Special LDR instructions to load from non-pc-relative constantpools. These are
authorEvan Cheng <evan.cheng@apple.com>
Mon, 19 Mar 2007 07:20:03 +0000 (07:20 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Mon, 19 Mar 2007 07:20:03 +0000 (07:20 +0000)
rematerializable. Only used for constant generation for now.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35162 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMISelDAGToDAG.cpp
lib/Target/ARM/ARMInstrInfo.td
lib/Target/ARM/ARMInstrThumb.td

index b0c040b39d730515ee29ca30adcebf6f21f59f77..7c40a712212a66f406cf7d5dbaca6d78ca6f8ea2 100644 (file)
@@ -551,7 +551,7 @@ SDNode *ARMDAGToDAGISel::Select(SDOperand Op) {
 
       SDNode *ResNode;
       if (Subtarget->isThumb())
-        ResNode = CurDAG->getTargetNode(ARM::tLDRpci, MVT::i32, MVT::Other,
+        ResNode = CurDAG->getTargetNode(ARM::tLDRcp, MVT::i32, MVT::Other,
                                         CPIdx, CurDAG->getEntryNode());
       else {
         SDOperand Ops[] = {
@@ -560,7 +560,7 @@ SDNode *ARMDAGToDAGISel::Select(SDOperand Op) {
           CurDAG->getTargetConstant(0, MVT::i32),
           CurDAG->getEntryNode()
         };
-        ResNode = CurDAG->getTargetNode(ARM::LDR, MVT::i32, MVT::Other, Ops, 4);
+        ResNode=CurDAG->getTargetNode(ARM::LDRcp, MVT::i32, MVT::Other, Ops, 4);
       }
       ReplaceUses(Op, SDOperand(ResNode, 0));
       return NULL;
index cb0a508bf93ea38a6f0e635e533b17e325fba463..b222c5b0ee9528ddae3721ca4734dc6c4796f043 100644 (file)
@@ -580,6 +580,11 @@ def LDR  : AI2<(ops GPR:$dst, addrmode2:$addr),
                "ldr $dst, $addr",
                [(set GPR:$dst, (load addrmode2:$addr))]>;
 
+// Special LDR for loads from non-pc-relative constpools.
+let isReMaterializable = 1 in
+def LDRcp : AI2<(ops GPR:$dst, addrmode2:$addr),
+                 "ldr $dst, $addr", []>;
+
 // Loads with zero extension
 def LDRH  : AI3<(ops GPR:$dst, addrmode3:$addr),
                  "ldrh $dst, $addr",
index 6b289d9a051ac9f6a2c7ac5f3044525e4730f360..a70bf96fd021b925759f3c6a55ac8753db6842a6 100644 (file)
@@ -248,6 +248,11 @@ def tRestore : TIs<(ops GPR:$dst, t_addrmode_sp:$addr),
 def tLDRpci : TIs<(ops GPR:$dst, i32imm:$addr),
                   "ldr $dst, $addr",
                   [(set GPR:$dst, (load (ARMWrapper tconstpool:$addr)))]>;
+
+// Special LDR for loads from non-pc-relative constpools.
+let isReMaterializable = 1 in
+def tLDRcp  : TIs<(ops GPR:$dst, i32imm:$addr),
+                  "ldr $dst, $addr", []>;
 } // isLoad
 
 let isStore = 1 in {