svn commit: r305550 - stable/11/contrib/llvm/lib/Target/AArch64
Dimitry Andric
dim at FreeBSD.org
Wed Sep 7 18:16:07 UTC 2016
Author: dim
Date: Wed Sep 7 18:16:06 2016
New Revision: 305550
URL: https://svnweb.freebsd.org/changeset/base/305550
Log:
MFC r305218:
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
Modified:
stable/11/contrib/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/contrib/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
==============================================================================
--- stable/11/contrib/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp Wed Sep 7 18:13:57 2016 (r305549)
+++ stable/11/contrib/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp Wed Sep 7 18:16:06 2016 (r305550)
@@ -52,6 +52,9 @@ unsigned AArch64InstrInfo::GetInstSizeIn
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");
More information about the svn-src-all
mailing list