diff options
author | U-BERGUFFLEN\meinersbur <llvm-project@meinersbur.de> | 2024-11-04 14:08:55 +0100 |
---|---|---|
committer | U-BERGUFFLEN\meinersbur <llvm-project@meinersbur.de> | 2024-11-04 14:08:55 +0100 |
commit | 54bc5758988e505e17618c04a9a36d1cfa72913d (patch) | |
tree | 37e93309d367876bc1b6ffac21988665f85dc43d /llvm/test/CodeGen/X86/tls-function-argument.ll | |
parent | dacf10168ae0dfd222ed301b93369834d411d139 (diff) | |
parent | 3cffa3474fd20518e19afa0c0ad3ff602864f688 (diff) | |
download | llvm-users/meinersbur/irbuilder-extract.zip llvm-users/meinersbur/irbuilder-extract.tar.gz llvm-users/meinersbur/irbuilder-extract.tar.bz2 |
Merge commit '3cffa3474fd20518e19afa0c0ad3ff602864f688' into users/meinersbur/irbuilder-extractusers/meinersbur/irbuilder-extract
Diffstat (limited to 'llvm/test/CodeGen/X86/tls-function-argument.ll')
-rw-r--r-- | llvm/test/CodeGen/X86/tls-function-argument.ll | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/tls-function-argument.ll b/llvm/test/CodeGen/X86/tls-function-argument.ll new file mode 100644 index 0000000..9b6ab52 --- /dev/null +++ b/llvm/test/CodeGen/X86/tls-function-argument.ll @@ -0,0 +1,30 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 +; RUN: llc -mtriple=x86_64 -verify-machineinstrs -relocation-model=pic < %s | FileCheck %s + +; Passing a pointer to thread-local storage to a function can be problematic +; since computing such addresses requires a function call that is introduced +; very late in instruction selection. We need to ensure that we don't introduce +; nested call sequence markers if this function call happens in a call sequence. + +@TLS = internal thread_local global i64 zeroinitializer, align 8 +declare void @bar(ptr) +define internal void @foo() { +; CHECK-LABEL: foo: +; CHECK: # %bb.0: +; CHECK-NEXT: pushq %rbx +; CHECK-NEXT: .cfi_def_cfa_offset 16 +; CHECK-NEXT: .cfi_offset %rbx, -16 +; CHECK-NEXT: leaq TLS@TLSLD(%rip), %rdi +; CHECK-NEXT: callq __tls_get_addr@PLT +; CHECK-NEXT: leaq TLS@DTPOFF(%rax), %rbx +; CHECK-NEXT: movq %rbx, %rdi +; CHECK-NEXT: callq bar@PLT +; CHECK-NEXT: movq %rbx, %rdi +; CHECK-NEXT: callq bar@PLT +; CHECK-NEXT: popq %rbx +; CHECK-NEXT: .cfi_def_cfa_offset 8 +; CHECK-NEXT: retq + call void @bar(ptr @TLS) + call void @bar(ptr @TLS) + ret void +} |