Thumb2 PC-relative loads require a fixup rather than just an immediate.
authorOwen Anderson <resistor@mac.com>
Fri, 18 Mar 2011 17:42:55 +0000 (17:42 +0000)
committerOwen Anderson <resistor@mac.com>
Fri, 18 Mar 2011 17:42:55 +0000 (17:42 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127888 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMInstrThumb2.td
utils/TableGen/EDEmitter.cpp

index a93c3645059cefec2a5c1c4f094efcbe355f8cd8..ca88175dfac3bbea8e0652cc59c0435df7f84d03 100644 (file)
@@ -95,6 +95,12 @@ def t2addrmode_imm12 : Operand<i32>,
   let ParserMatchClass = MemMode5AsmOperand;
 }
 
+// t2ldrlabel  := imm12
+def t2ldrlabel : Operand<i32> {
+  let EncoderMethod = "getAddrModeImm12OpValue";
+}
+
+
 // ADR instruction labels.
 def t2adrlabel : Operand<i32> {
   let EncoderMethod = "getT2AdrLabelOpValue";
@@ -877,7 +883,7 @@ multiclass T2I_ld<bit signed, bits<2> opcod, string opc,
   }
 
   // FIXME: Is the pci variant actually needed?
-  def pci : T2Ipc <(outs GPR:$Rt), (ins i32imm:$addr), iii,
+  def pci : T2Ipc <(outs GPR:$Rt), (ins t2ldrlabel:$addr), iii,
                    opc, ".w\t$Rt, $addr",
                    [(set GPR:$Rt, (opnode (ARMWrapper tconstpool:$addr)))]> {
     let isReMaterializable = 1;
index e171da02a2f8c664e0c2ddb3e2f78968cc8f4a08..0a84eeee099d41c7ab03451b20c9baffdf4e28d9 100644 (file)
@@ -602,6 +602,7 @@ static int ARMFlagFromOpName(LiteralConstantEmitter *type,
   IMM("shr_imm16");
   IMM("shr_imm32");
   IMM("shr_imm64");
+  IMM("t2ldrlabel");
 
   MISC("brtarget", "kOperandTypeARMBranchTarget");                // ?
   MISC("uncondbrtarget", "kOperandTypeARMBranchTarget");           // ?