summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2003-06-06 04:00:05 +0000
committerChris Lattner <sabre@nondot.org>2003-06-06 04:00:05 +0000
commit65d29b87e3ba27454c8a360b3698c446c23b5d7b (patch)
tree19f5a333857e84fe62f6b2d30f1a76476a1ed143 /llvm/lib
parent905ffcb78055466e1d9bbb9817e7b5fd97310d99 (diff)
downloadbcm5719-llvm-65d29b87e3ba27454c8a360b3698c446c23b5d7b.tar.gz
bcm5719-llvm-65d29b87e3ba27454c8a360b3698c446c23b5d7b.zip
Add statistic for # machine instrs emitted
Add GROSS HACK to get CompilationCallback to work when compiled in release mode llvm-svn: 6646
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/X86/X86CodeEmitter.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/llvm/lib/Target/X86/X86CodeEmitter.cpp b/llvm/lib/Target/X86/X86CodeEmitter.cpp
index f41300daeac..687cbc731ed 100644
--- a/llvm/lib/Target/X86/X86CodeEmitter.cpp
+++ b/llvm/lib/Target/X86/X86CodeEmitter.cpp
@@ -12,8 +12,12 @@
#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);
OpenPOWER on IntegriCloud