freebsd-dev/contrib/llvm/lib
Dimitry Andric 4f560b016f Pull in r354756 from upstream llvm trunk (by Craig Topper):
[X86] Fix tls variable lowering issue with large code model

  Summary:
  The problem here is the lowering for tls variable. Below is the DAG
  for the code. SelectionDAG has 11 nodes:

  t0: ch = EntryToken
	t8: i64,ch = load<(load 8 from `i8 addrspace(257)* null`,
	addrspace 257)> t0, Constant:i64<0>, undef:i64
	  t10: i64 = X86ISD::WrapperRIP TargetGlobalTLSAddress:i64<i32*
	  @x> 0 [TF=10]
	t11: i64,ch = load<(load 8 from got)> t0, t10, undef:i64
      t12: i64 = add t8, t11
    t4: i32,ch = load<(dereferenceable load 4 from @x)> t0, t12,
    undef:i64
  t6: ch = CopyToReg t0, Register:i32 %0, t4

  And when mcmodel is large, below instruction can NOT be folded.

    t10: i64 = X86ISD::WrapperRIP TargetGlobalTLSAddress:i64<i32* @x> 0
    [TF=10]
  t11: i64,ch = load<(load 8 from got)> t0, t10, undef:i64

  So "t11: i64,ch = load<(load 8 from got)> t0, t10, undef:i64" is
  lowered to " Morphed node: t11: i64,ch = MOV64rm<Mem:(load 8 from
  got)> t10, TargetConstant:i8<1>, Register:i64 $noreg,
  TargetConstant:i32<0>, Register:i32 $noreg, t0"

  When llvm start to lower "t10: i64 = X86ISD::WrapperRIP
  TargetGlobalTLSAddress:i64<i32* @x> 0 [TF=10]", it fails.

  The patch is to fold the load and X86ISD::WrapperRIP.

  Fixes PR26906

  Patch by LuoYuanke

  Reviewers: craig.topper, rnk, annita.zhang, wxiao3

  Reviewed By: rnk

  Subscribers: llvm-commits

  Tags: #llvm

  Differential Revision: https://reviews.llvm.org/D58336

This should fix "fatal error: error in backend: Cannot select" messages
when compiling <ctype.h> functions using -mcmodel=large.

Reported by:	phk
PR:		233143
MFC after:	3 days
2019-02-24 21:22:16 +00:00
..
Analysis Merge llvm, clang, lld, lldb, compiler-rt and libc++ release_70 branch 2018-12-09 11:36:04 +00:00
AsmParser
BinaryFormat
Bitcode
CodeGen Pull in r339734 from upstream llvm trunk (by Eli Friedman): 2019-02-12 18:32:14 +00:00
DebugInfo
Demangle
ExecutionEngine Merge llvm, clang, lld, lldb, compiler-rt and libc++ release_70 branch 2018-12-09 11:36:04 +00:00
FuzzMutate
IR Merge llvm, clang, lld, lldb, compiler-rt and libc++ release_70 branch 2018-08-29 20:53:24 +00:00
IRReader
LineEditor
Linker
LTO
MC Pull in r353907 from upstream llvm trunk (by Reid Kleckner): 2019-02-13 20:13:40 +00:00
Object
ObjectYAML
Option
Passes
ProfileData
Support Merge llvm, clang, lld, lldb, compiler-rt and libc++ release_70 branch 2018-09-11 18:50:40 +00:00
TableGen
Target Pull in r354756 from upstream llvm trunk (by Craig Topper): 2019-02-24 21:22:16 +00:00
Testing/Support
ToolDrivers
Transforms Merge llvm, clang, lld, lldb, compiler-rt and libc++ release_70 branch 2018-12-09 11:36:04 +00:00
WindowsManifest
XRay