From: Andrew Lenharth Date: Mon, 6 Jun 2005 19:03:55 +0000 (+0000) Subject: allow marking of loads and stores in the instruction stream with enough information... X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=cd7f8cf70b713d18b2fac2db3f31891872f9df4b;p=oota-llvm.git 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 --- diff --git a/lib/Target/Alpha/AlphaISelPattern.cpp b/lib/Target/Alpha/AlphaISelPattern.cpp index ff5d268bf75..1f11065971d 100644 --- a/lib/Target/Alpha/AlphaISelPattern.cpp +++ b/lib/Target/Alpha/AlphaISelPattern.cpp @@ -45,6 +45,9 @@ namespace llvm { cl::opt EnableAlphaCount("enable-alpha-count", cl::desc("Print estimates on live ins and outs"), cl::Hidden); + cl::opt 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(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(N.getOperand(2))->getValue()); + BuildMI(BB, Alpha::MEMLABEL, 2).addImm(i); + } + if (Address.getOpcode() == ISD::GlobalAddress) { AlphaLowering.restoreGP(BB); Opc = GetSymVersion(Opc); diff --git a/lib/Target/Alpha/AlphaInstrInfo.td b/lib/Target/Alpha/AlphaInstrInfo.td index c42ad1ed20f..bc29404ad1f 100644 --- a/lib/Target/Alpha/AlphaInstrInfo.td +++ b/lib/Target/Alpha/AlphaInstrInfo.td @@ -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