diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2018-07-28 10:51:19 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2018-07-28 10:51:19 +0000 |
| commit | eb11fae6d08f479c0799db45860a98af528fa6e7 (patch) | |
| tree | 44d492a50c8c1a7eb8e2d17ea3360ec4d066f042 /test/CodeGen/AArch64/win-tls.ll | |
| parent | b8a2042aa938069e862750553db0e4d82d25822c (diff) | |
Notes
Diffstat (limited to 'test/CodeGen/AArch64/win-tls.ll')
| -rw-r--r-- | test/CodeGen/AArch64/win-tls.ll | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/test/CodeGen/AArch64/win-tls.ll b/test/CodeGen/AArch64/win-tls.ll new file mode 100644 index 000000000000..ea49b99bbaae --- /dev/null +++ b/test/CodeGen/AArch64/win-tls.ll @@ -0,0 +1,64 @@ +; RUN: llc -mtriple aarch64-windows %s -o - | FileCheck %s + +@tlsVar = thread_local global i32 0 +@tlsVar8 = thread_local global i8 0 +@tlsVar64 = thread_local global i64 0 + +define i32 @getVar() { + %1 = load i32, i32* @tlsVar + ret i32 %1 +} + +define i32* @getPtr() { + ret i32* @tlsVar +} + +define void @setVar(i32 %val) { + store i32 %val, i32* @tlsVar + ret void +} + +define i8 @getVar8() { + %1 = load i8, i8* @tlsVar8 + ret i8 %1 +} + +define i64 @getVar64() { + %1 = load i64, i64* @tlsVar64 + ret i64 %1 +} + +; CHECK-LABEL: getVar +; CHECK: adrp [[TLS_INDEX_ADDR:x[0-9]+]], _tls_index +; CHECK: ldr w[[TLS_INDEX:[0-9]+]], {{\[}}[[TLS_INDEX_ADDR]], _tls_index] +; CHECK: ldr [[TLS_POINTER:x[0-9]+]], [x18, #88] + +; CHECK: ldr [[TLS:x[0-9]+]], {{\[}}[[TLS_POINTER]], x[[TLS_INDEX]], lsl #3] +; CHECK: add [[TLS]], [[TLS]], :secrel_hi12:tlsVar +; CHECK: ldr w0, {{\[}}[[TLS]], :secrel_lo12:tlsVar{{\]}} + +; CHECK-LABEL: getPtr +; CHECK: adrp [[TLS_INDEX_ADDR:x[0-9]+]], _tls_index +; CHECK: ldr w[[TLS_INDEX:[0-9]+]], {{\[}}[[TLS_INDEX_ADDR]], _tls_index] +; CHECK: ldr [[TLS_POINTER:x[0-9]+]], [x18, #88] + +; CHECK: ldr [[TLS:x[0-9]+]], {{\[}}[[TLS_POINTER]], x[[TLS_INDEX]], lsl #3] +; CHECK: add [[TLS]], [[TLS]], :secrel_hi12:tlsVar +; CHECK: add x0, [[TLS]], :secrel_lo12:tlsVar + +; CHECK-LABEL: setVar +; CHECK: adrp [[TLS_INDEX_ADDR:x[0-9]+]], _tls_index +; CHECK: ldr w[[TLS_INDEX:[0-9]+]], {{\[}}[[TLS_INDEX_ADDR]], _tls_index] +; CHECK: ldr [[TLS_POINTER:x[0-9]+]], [x18, #88] + +; CHECK: ldr [[TLS:x[0-9]+]], {{\[}}[[TLS_POINTER]], x[[TLS_INDEX]], lsl #3] +; CHECK: add [[TLS]], [[TLS]], :secrel_hi12:tlsVar +; CHECK: str w0, {{\[}}[[TLS]], :secrel_lo12:tlsVar{{\]}} + +; CHECK-LABEL: getVar8 +; CHECK: add [[TLS:x[0-9]+]], [[TLS]], :secrel_hi12:tlsVar8 +; CHECK: ldrb w0, {{\[}}[[TLS]], :secrel_lo12:tlsVar8{{\]}} + +; CHECK-LABEL: getVar64 +; CHECK: add [[TLS:x[0-9]+]], [[TLS]], :secrel_hi12:tlsVar64 +; CHECK: ldr x0, {{\[}}[[TLS]], :secrel_lo12:tlsVar64{{\]}} |
