Add statistic for # machine instrs emitted
authorChris Lattner <sabre@nondot.org>
Fri, 6 Jun 2003 04:00:05 +0000 (04:00 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 6 Jun 2003 04:00:05 +0000 (04:00 +0000)
Add GROSS HACK to get CompilationCallback to work when compiled in release mode

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6646 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86CodeEmitter.cpp

index f41300daeacd104e0d0e12e8b679d58758860111..687cbc731ed2022f20b16babcb59acf0fea8f448 100644 (file)
 #include "llvm/CodeGen/MachineFunctionPass.h"
 #include "llvm/CodeGen/MachineInstr.h"
 #include "llvm/Value.h"
+#include "Support/Statistic.h"
 
 namespace {
+  Statistic<>
+  NumEmitted("x86-emitter", "Number of machine instructions emitted");
+
   class JITResolver {
     MachineCodeEmitter &MCE;
 
@@ -71,11 +75,17 @@ unsigned JITResolver::getLazyResolver(Function *F) {
 void JITResolver::CompilationCallback() {
   unsigned *StackPtr = (unsigned*)__builtin_frame_address(0);
   unsigned RetAddr = (unsigned)(intptr_t)__builtin_return_address(0);
-
   assert(StackPtr[1] == RetAddr &&
          "Could not find return address on the stack!");
   bool isStub = ((unsigned char*)RetAddr)[0] == 0xCD;  // Interrupt marker?
 
+  // FIXME FIXME FIXME FIXME: __builtin_frame_address doesn't work if frame
+  // pointer elimination has been performed.  Having a variable sized alloca
+  // disables frame pointer elimination currently, even if it's dead.  This is a
+  // gross hack.
+  alloca(10+isStub);
+  // FIXME FIXME FIXME FIXME
+
   // The call instruction should have pushed the return value onto the stack...
   RetAddr -= 4;  // Backtrack to the reference itself...
 
@@ -429,6 +439,8 @@ static unsigned sizeOfPtr(const TargetInstrDescriptor &Desc) {
 }
 
 void Emitter::emitInstruction(MachineInstr &MI) {
+  NumEmitted++;  // Keep track of the # of mi's emitted
+
   unsigned Opcode = MI.getOpcode();
   const TargetInstrDescriptor &Desc = II->get(Opcode);