diff options
author | Martin Storsjo <martin@martin.st> | 2018-03-14 13:09:10 +0000 |
---|---|---|
committer | Martin Storsjo <martin@martin.st> | 2018-03-14 13:09:10 +0000 |
commit | bde677289acc188f5f577ecbcb3c066b1d2c8aa8 (patch) | |
tree | 04ebf8bae48659752631ccce15ad9e0c739a0248 | |
parent | f0ccaae5bcc2d2501d0ec2f4dfc94d82990e596b (diff) | |
download | bcm5719-llvm-bde677289acc188f5f577ecbcb3c066b1d2c8aa8.tar.gz bcm5719-llvm-bde677289acc188f5f577ecbcb3c066b1d2c8aa8.zip |
[AArch64] Don't produce R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC
Support for this relocation is missing in both LLD and GNU binutils
at the moment.
This reverts the ELF parts of SVN r327316.
llvm-svn: 327503
-rw-r--r-- | llvm/lib/Target/AArch64/AArch64ISelLowering.cpp | 9 | ||||
-rw-r--r-- | llvm/test/CodeGen/AArch64/arm64-tls-execs.ll | 5 |
2 files changed, 10 insertions, 4 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp index c795a4411ad..be14561973d 100644 --- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp +++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp @@ -3918,7 +3918,10 @@ AArch64TargetLowering::LowerELFGlobalTLSAddress(SDValue Op, DAG.getTargetConstant(0, DL, MVT::i32)), 0); SDValue TPWithOff = - DAG.getNode(AArch64ISD::ADDlow, DL, PtrVT, TPWithOff_lo, LoVar); + SDValue(DAG.getMachineNode(AArch64::ADDXri, DL, PtrVT, TPWithOff_lo, + LoVar, + DAG.getTargetConstant(0, DL, MVT::i32)), + 0); return TPWithOff; } else if (Model == TLSModel::InitialExec) { TPOff = DAG.getTargetGlobalAddress(GV, DL, PtrVT, 0, AArch64II::MO_TLS); @@ -3955,7 +3958,9 @@ AArch64TargetLowering::LowerELFGlobalTLSAddress(SDValue Op, TPOff = SDValue(DAG.getMachineNode(AArch64::ADDXri, DL, PtrVT, TPOff, HiVar, DAG.getTargetConstant(0, DL, MVT::i32)), 0); - TPOff = DAG.getNode(AArch64ISD::ADDlow, DL, PtrVT, TPOff, LoVar); + TPOff = SDValue(DAG.getMachineNode(AArch64::ADDXri, DL, PtrVT, TPOff, LoVar, + DAG.getTargetConstant(0, DL, MVT::i32)), + 0); } else if (Model == TLSModel::GeneralDynamic) { // The call needs a relocation too for linker relaxation. It doesn't make // sense to call it MO_PAGE or MO_PAGEOFF though so we need another copy of diff --git a/llvm/test/CodeGen/AArch64/arm64-tls-execs.ll b/llvm/test/CodeGen/AArch64/arm64-tls-execs.ll index fc636d171cf..deced698881 100644 --- a/llvm/test/CodeGen/AArch64/arm64-tls-execs.ll +++ b/llvm/test/CodeGen/AArch64/arm64-tls-execs.ll @@ -40,10 +40,11 @@ define i32 @test_local_exec() { ; CHECK: mrs x[[R1:[0-9]+]], TPIDR_EL0 ; CHECK: add x[[R2:[0-9]+]], x[[R1]], :tprel_hi12:local_exec_var -; CHECK: ldr w0, [x[[R2]], :tprel_lo12_nc:local_exec_var] +; CHECK: add x[[R3:[0-9]+]], x[[R2]], :tprel_lo12_nc:local_exec_var +; CHECK: ldr w0, [x[[R3]]] ; CHECK-RELOC: R_AARCH64_TLSLE_ADD_TPREL_HI12 -; CHECK-RELOC: R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC +; CHECK-RELOC: R_AARCH64_TLSLE_ADD_TPREL_LO12_NC ret i32 %val } |