65 lines · plain
1; RUN: llc -mtriple aarch64-windows %s -o - | FileCheck %s2 3@tlsVar = thread_local global i32 04@tlsVar8 = thread_local global i8 05@tlsVar64 = thread_local global i64 06 7define i32 @getVar() {8 %1 = load i32, ptr @tlsVar9 ret i32 %110}11 12define ptr @getPtr() {13 ret ptr @tlsVar14}15 16define void @setVar(i32 %val) {17 store i32 %val, ptr @tlsVar18 ret void19}20 21define i8 @getVar8() {22 %1 = load i8, ptr @tlsVar823 ret i8 %124}25 26define i64 @getVar64() {27 %1 = load i64, ptr @tlsVar6428 ret i64 %129}30 31; CHECK-LABEL: getVar32; CHECK: adrp [[TLS_INDEX_ADDR:x[0-9]+]], _tls_index33; CHECK: ldr [[TLS_POINTER:x[0-9]+]], [x18, #88]34; CHECK: ldr w[[TLS_INDEX:[0-9]+]], [[[TLS_INDEX_ADDR]], :lo12:_tls_index]35 36; CHECK: ldr [[TLS:x[0-9]+]], [[[TLS_POINTER]], x[[TLS_INDEX]], lsl #3]37; CHECK: add [[TLS]], [[TLS]], :secrel_hi12:tlsVar38; CHECK: ldr w0, [[[TLS]], :secrel_lo12:tlsVar]39 40; CHECK-LABEL: getPtr41; CHECK: adrp [[TLS_INDEX_ADDR:x[0-9]+]], _tls_index42; CHECK: ldr [[TLS_POINTER:x[0-9]+]], [x18, #88]43; CHECK: ldr w[[TLS_INDEX:[0-9]+]], [[[TLS_INDEX_ADDR]], :lo12:_tls_index]44 45; CHECK: ldr [[TLS:x[0-9]+]], [[[TLS_POINTER]], x[[TLS_INDEX]], lsl #3]46; CHECK: add [[TLS]], [[TLS]], :secrel_hi12:tlsVar47; CHECK: add x0, [[TLS]], :secrel_lo12:tlsVar48 49; CHECK-LABEL: setVar50; CHECK: adrp [[TLS_INDEX_ADDR:x[0-9]+]], _tls_index51; CHECK: ldr [[TLS_POINTER:x[0-9]+]], [x18, #88]52; CHECK: ldr w[[TLS_INDEX:[0-9]+]], [[[TLS_INDEX_ADDR]], :lo12:_tls_index]53 54; CHECK: ldr [[TLS:x[0-9]+]], [[[TLS_POINTER]], x[[TLS_INDEX]], lsl #3]55; CHECK: add [[TLS]], [[TLS]], :secrel_hi12:tlsVar56; CHECK: str w0, [[[TLS]], :secrel_lo12:tlsVar]57 58; CHECK-LABEL: getVar859; CHECK: add [[TLS:x[0-9]+]], [[TLS]], :secrel_hi12:tlsVar860; CHECK: ldrb w0, [[[TLS]], :secrel_lo12:tlsVar8]61 62; CHECK-LABEL: getVar6463; CHECK: add [[TLS:x[0-9]+]], [[TLS]], :secrel_hi12:tlsVar6464; CHECK: ldr x0, [[[TLS]], :secrel_lo12:tlsVar64]65