forked from OSchip/llvm-project
X86: Don't make illegal GOTTPOFF relocations
"ELF Handling for Thread-Local Storage" specifies that R_X86_64_GOTTPOFF relocation target a movq or addq instruction. Prohibit the truncation of such loads to movl or addl. This fixes PR22083. Differential Revision: http://reviews.llvm.org/D6839 llvm-svn: 225250
This commit is contained in:
parent
3fe09ea4d9
commit
29c52f7449
|
@ -3862,6 +3862,18 @@ bool X86TargetLowering::isFPImmLegal(const APFloat &Imm, EVT VT) const {
|
|||
return false;
|
||||
}
|
||||
|
||||
bool X86TargetLowering::shouldReduceLoadWidth(SDNode *Load,
|
||||
ISD::LoadExtType ExtTy,
|
||||
EVT NewVT) const {
|
||||
// "ELF Handling for Thread-Local Storage" specifies that R_X86_64_GOTTPOFF
|
||||
// relocation target a movq or addq instruction: don't let the load shrink.
|
||||
SDValue BasePtr = cast<LoadSDNode>(Load)->getBasePtr();
|
||||
if (BasePtr.getOpcode() == X86ISD::WrapperRIP)
|
||||
if (const auto *GA = dyn_cast<GlobalAddressSDNode>(BasePtr.getOperand(0)))
|
||||
return GA->getTargetFlags() != X86II::MO_GOTTPOFF;
|
||||
return true;
|
||||
}
|
||||
|
||||
/// \brief Returns true if it is beneficial to convert a load of a constant
|
||||
/// to just the constant itself.
|
||||
bool X86TargetLowering::shouldConvertConstantLoadToIntImm(const APInt &Imm,
|
||||
|
|
|
@ -770,6 +770,11 @@ namespace llvm {
|
|||
return !X86ScalarSSEf64 || VT == MVT::f80;
|
||||
}
|
||||
|
||||
/// Return true if we believe it is correct and profitable to reduce the
|
||||
/// load node to a smaller type.
|
||||
bool shouldReduceLoadWidth(SDNode *Load, ISD::LoadExtType ExtTy,
|
||||
EVT NewVT) const override;
|
||||
|
||||
const X86Subtarget* getSubtarget() const {
|
||||
return Subtarget;
|
||||
}
|
||||
|
|
|
@ -128,6 +128,14 @@ entry:
|
|||
; DARWIN: _internal_ie@TLVP
|
||||
}
|
||||
|
||||
define i32 @PR22083() {
|
||||
entry:
|
||||
ret i32 ptrtoint (i32* @external_ie to i32)
|
||||
; X64-LABEL: PR22083:
|
||||
; X64: movq external_ie@GOTTPOFF(%rip), %rax
|
||||
; X64_PIC-LABEL: PR22083:
|
||||
; X64_PIC: movq external_ie@GOTTPOFF(%rip), %rax
|
||||
}
|
||||
|
||||
; ----- localexec specified -----
|
||||
|
||||
|
|
Loading…
Reference in New Issue