Pull in r277331 from upstream llvm trunk (by Diana Picus):
[AArch64] Return the correct size for TLSDESC_CALLSEQ The branch relaxation pass is computing the wrong offsets because it assumes TLSDESC_CALLSEQ eats up 4 bytes, when in fact it is lowered to an instruction sequence taking up 16 bytes. This can become a problem in huge files with lots of TLS accesses, as it may slowly move branch targets out of the range computed by the branch relaxation pass. Fixes PR24234 https://llvm.org/bugs/show_bug.cgi?id=24234 Differential Revision: https://reviews.llvm.org/D22870 This fixes "error in backend: fixup value out of range" when compiling the misc/talkfilters port for AArch64. Reported by: sbruno PR: 201762 MFC after: 3 days
This commit is contained in:
parent
7c0c104bfc
commit
1dc088ab69
@ -52,6 +52,9 @@ unsigned AArch64InstrInfo::GetInstSizeInBytes(const MachineInstr *MI) const {
|
||||
case TargetOpcode::IMPLICIT_DEF:
|
||||
case TargetOpcode::KILL:
|
||||
return 0;
|
||||
case AArch64::TLSDESC_CALLSEQ:
|
||||
// This gets lowered to an instruction sequence which takes 16 bytes
|
||||
return 16;
|
||||
}
|
||||
|
||||
llvm_unreachable("GetInstSizeInBytes()- Unable to determin insn size");
|
||||
|
Loading…
x
Reference in New Issue
Block a user