mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-14 23:48:49 +00:00
allow marking of loads and stores in the instruction stream with enough information to reconstruct the Value* if it existed
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22195 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
eee2a881cf
commit
cd7f8cf70b
@ -45,6 +45,9 @@ namespace llvm {
|
||||
cl::opt<bool> EnableAlphaCount("enable-alpha-count",
|
||||
cl::desc("Print estimates on live ins and outs"),
|
||||
cl::Hidden);
|
||||
cl::opt<bool> EnableAlphaLSMark("enable-alpha-lsmark",
|
||||
cl::desc("Emit symbols to corrolate Mem ops to LLVM Values"),
|
||||
cl::Hidden);
|
||||
}
|
||||
|
||||
namespace {
|
||||
@ -514,6 +517,27 @@ void ISel::EmitFunctionEntryCode(Function &Fn, MachineFunction &MF) {
|
||||
}
|
||||
}
|
||||
|
||||
//Find the offset of the arg in it's parent's function
|
||||
static int getValueOffset(const Value* v)
|
||||
{
|
||||
if (v == NULL)
|
||||
return 0;
|
||||
|
||||
const Instruction* itarget = dyn_cast<Instruction>(v);
|
||||
const BasicBlock* btarget = itarget->getParent();
|
||||
const Function* ftarget = btarget->getParent();
|
||||
|
||||
//offset due to earlier BBs
|
||||
int i = 0;
|
||||
for(Function::const_iterator ii = ftarget->begin(); &*ii != btarget; ++ii)
|
||||
i += ii->size();
|
||||
|
||||
for(BasicBlock::const_iterator ii = btarget->begin(); &*ii != itarget; ++ii)
|
||||
++i;
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
//Factorize a number using the list of constants
|
||||
static bool factorize(int v[], int res[], int size, uint64_t c)
|
||||
{
|
||||
@ -1119,6 +1143,12 @@ unsigned ISel::SelectExprFP(SDOperand N, unsigned Result)
|
||||
Select(Chain);
|
||||
Opc = DestType == MVT::f64 ? Alpha::LDT : Alpha::LDS;
|
||||
|
||||
if (EnableAlphaLSMark)
|
||||
{
|
||||
int i = getValueOffset(dyn_cast<SrcValueSDNode>(N.getOperand(2))->getValue());
|
||||
BuildMI(BB, Alpha::MEMLABEL, 2).addImm(i);
|
||||
}
|
||||
|
||||
if (Address.getOpcode() == ISD::GlobalAddress) {
|
||||
AlphaLowering.restoreGP(BB);
|
||||
Opc = GetSymVersion(Opc);
|
||||
|
@ -31,6 +31,7 @@ def ADJUSTSTACKUP : PseudoInstAlpha<(ops ), "ADJUP">;
|
||||
def ADJUSTSTACKDOWN : PseudoInstAlpha<(ops ), "ADJDOWN">;
|
||||
def ALTENT : PseudoInstAlpha<(ops s64imm:$TARGET), "$TARGET:\n">;
|
||||
def PCLABEL : PseudoInstAlpha<(ops s64imm:$num), "PCMARKER_$num:\n">;
|
||||
def MEMLABEL : PseudoInstAlpha<(ops s64imm:$i), "LSMARKER_$i:\n">;
|
||||
|
||||
//*****************
|
||||
//These are shortcuts, the assembler expands them
|
||||
|
Loading…
Reference in New Issue
Block a user