allow marking of loads and stores in the instruction stream with enough information...
authorAndrew Lenharth <andrewl@lenharth.org>
Mon, 6 Jun 2005 19:03:55 +0000 (19:03 +0000)
committerAndrew Lenharth <andrewl@lenharth.org>
Mon, 6 Jun 2005 19:03:55 +0000 (19:03 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22195 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/Alpha/AlphaISelPattern.cpp
lib/Target/Alpha/AlphaInstrInfo.td

index ff5d268bf75297e2b037558f5b9c9e9b9f28d305..1f11065971dcb7b6a3c8ac845c91e6b87cd79e23 100644 (file)
@@ -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);
index c42ad1ed20f0c371593cd0d11cb06879c9f85ba7..bc29404ad1fb93079ae9cb8687820dfcb33a8d67 100644 (file)
@@ -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