From c9bd496aa206746d0bc114d15781650a5b543296 Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Fri, 18 Mar 2011 17:42:55 +0000 Subject: [PATCH] Thumb2 PC-relative loads require a fixup rather than just an immediate. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127888 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/ARM/ARMInstrThumb2.td | 8 +++++++- utils/TableGen/EDEmitter.cpp | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/Target/ARM/ARMInstrThumb2.td b/lib/Target/ARM/ARMInstrThumb2.td index a93c3645059..ca88175dfac 100644 --- a/lib/Target/ARM/ARMInstrThumb2.td +++ b/lib/Target/ARM/ARMInstrThumb2.td @@ -95,6 +95,12 @@ def t2addrmode_imm12 : Operand, let ParserMatchClass = MemMode5AsmOperand; } +// t2ldrlabel := imm12 +def t2ldrlabel : Operand { + let EncoderMethod = "getAddrModeImm12OpValue"; +} + + // ADR instruction labels. def t2adrlabel : Operand { let EncoderMethod = "getT2AdrLabelOpValue"; @@ -877,7 +883,7 @@ multiclass T2I_ld 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; diff --git a/utils/TableGen/EDEmitter.cpp b/utils/TableGen/EDEmitter.cpp index e171da02a2f..0a84eeee099 100644 --- a/utils/TableGen/EDEmitter.cpp +++ b/utils/TableGen/EDEmitter.cpp @@ -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"); // ?