diff options
Diffstat (limited to 'llvm/test/CodeGen')
-rw-r--r-- | llvm/test/CodeGen/X86/cxx_tlscc64.ll | 6 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/x86-shrink-wrapping.ll | 44 |
2 files changed, 49 insertions, 1 deletions
diff --git a/llvm/test/CodeGen/X86/cxx_tlscc64.ll b/llvm/test/CodeGen/X86/cxx_tlscc64.ll index c229521cc9a..16e678a9222 100644 --- a/llvm/test/CodeGen/X86/cxx_tlscc64.ll +++ b/llvm/test/CodeGen/X86/cxx_tlscc64.ll @@ -1,5 +1,9 @@ ; RUN: llc < %s -mtriple=x86_64-apple-darwin | FileCheck %s -; RUN: llc < %s -mtriple=x86_64-apple-darwin -enable-shrink-wrap=true | FileCheck --check-prefix=SHRINK %s +; TLS function were wrongly model and after fixing that, shrink-wrapping +; cannot help here. To achieve the expected lowering, we need to playing +; tricks similar to AArch64 fast TLS calling convention (r255821). +; Re-enable the following run line when +; _RUN_: llc < %s -mtriple=x86_64-apple-darwin -enable-shrink-wrap=true | FileCheck --check-prefix=SHRINK %s %struct.S = type { i8 } @sg = internal thread_local global %struct.S zeroinitializer, align 1 diff --git a/llvm/test/CodeGen/X86/x86-shrink-wrapping.ll b/llvm/test/CodeGen/X86/x86-shrink-wrapping.ll index 34e56919468..b5a3174f10e 100644 --- a/llvm/test/CodeGen/X86/x86-shrink-wrapping.ll +++ b/llvm/test/CodeGen/X86/x86-shrink-wrapping.ll @@ -878,4 +878,48 @@ for.end: ; preds = %for.cond.for.end_cr declare i32 @varfunc(i8* nocapture readonly) +@sum1 = external hidden thread_local global i32, align 4 + + +; Function Attrs: nounwind +; Make sure the TLS call used to access @sum1 happens after the prologue +; and before the epilogue. +; TLS calls used to be wrongly model and shrink-wrapping would have inserted +; the prologue and epilogue just around the call to doSomething. +; PR25820. +; +; CHECK-LABEL: tlsCall: +; CHECK: pushq +; CHECK: testb $1, %dil +; CHECK: je [[ELSE_LABEL:LBB[0-9_]+]] +; +; master bb +; CHECK: movq _sum1@TLVP(%rip), %rdi +; CHECK-NEXT: callq *(%rdi) +; CHECK: jmp [[EXIT_LABEL:LBB[0-9_]+]] +; +; [[ELSE_LABEL]]: +; CHECK: callq _doSomething +; +; [[EXIT_LABEL]]: +; CHECK: popq +; CHECK-NEXT: retq +define i32 @tlsCall(i1 %bool1, i32 %arg, i32* readonly dereferenceable(4) %sum1) #3 { +entry: + br i1 %bool1, label %master, label %else + +master: + %tmp1 = load i32, i32* %sum1, align 4 + store i32 %tmp1, i32* @sum1, align 4 + br label %exit + +else: + %call = call i32 @doSomething(i32 0, i32* null) + br label %exit + +exit: + %res = phi i32 [ %arg, %master], [ %call, %else ] + ret i32 %res +} + attributes #3 = { nounwind } |