Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 7 Sep 2016 18:16:06 +0000 (UTC)
From:      Dimitry Andric <dim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r305550 - stable/11/contrib/llvm/lib/Target/AArch64
Message-ID:  <201609071816.u87IG6kS009686@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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");



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201609071816.u87IG6kS009686>