| ; 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{{\]}} |