mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-17 21:29:20 +00:00
Add statistic for # machine instrs emitted
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
This commit is contained in:
parent
3339459e48
commit
302de59001
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user