1; RUN: llc < %s -mtriple=aarch64-w64-mingw32 | FileCheck %s 2 3@var = external local_unnamed_addr global i32, align 4 4@dsolocalvar = external dso_local local_unnamed_addr global i32, align 4 5@localvar = dso_local local_unnamed_addr global i32 0, align 4 6@localcommon = common dso_local local_unnamed_addr global i32 0, align 4 7@extvar = external dllimport local_unnamed_addr global i32, align 4 8 9define dso_local i32 @getVar() { 10; CHECK-LABEL: getVar: 11; CHECK: adrp x8, .refptr.var 12; CHECK: ldr x8, [x8, .refptr.var] 13; CHECK: ldr w0, [x8] 14; CHECK: ret 15entry: 16 %0 = load i32, i32* @var, align 4 17 ret i32 %0 18} 19 20define dso_local i32 @getDsoLocalVar() { 21; CHECK-LABEL: getDsoLocalVar: 22; CHECK: adrp x8, dsolocalvar 23; CHECK: ldr w0, [x8, dsolocalvar] 24; CHECK: ret 25entry: 26 %0 = load i32, i32* @dsolocalvar, align 4 27 ret i32 %0 28} 29 30define dso_local i32 @getLocalVar() { 31; CHECK-LABEL: getLocalVar: 32; CHECK: adrp x8, localvar 33; CHECK: ldr w0, [x8, localvar] 34; CHECK: ret 35entry: 36 %0 = load i32, i32* @localvar, align 4 37 ret i32 %0 38} 39 40define dso_local i32 @getLocalCommon() { 41; CHECK-LABEL: getLocalCommon: 42; CHECK: adrp x8, localcommon 43; CHECK: ldr w0, [x8, localcommon] 44; CHECK: ret 45entry: 46 %0 = load i32, i32* @localcommon, align 4 47 ret i32 %0 48} 49 50define dso_local i32 @getExtVar() { 51; CHECK-LABEL: getExtVar: 52; CHECK: adrp x8, __imp_extvar 53; CHECK: ldr x8, [x8, __imp_extvar] 54; CHECK: ldr w0, [x8] 55; CHECK: ret 56entry: 57 %0 = load i32, i32* @extvar, align 4 58 ret i32 %0 59} 60 61define dso_local void @callFunc() { 62; CHECK-LABEL: callFunc: 63; CHECK: b otherFunc 64entry: 65 tail call void @otherFunc() 66 ret void 67} 68 69declare dso_local void @otherFunc() 70 71define dso_local void @sspFunc() #0 { 72; CHECK-LABEL: sspFunc: 73; CHECK: adrp x8, .refptr.__stack_chk_guard 74; CHECK: ldr x8, [x8, .refptr.__stack_chk_guard] 75; CHECK: ldr x8, [x8] 76entry: 77 %c = alloca i8, align 1 78 call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %c) 79 call void @ptrUser(i8* nonnull %c) 80 call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %c) 81 ret void 82} 83 84declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture) 85declare dso_local void @ptrUser(i8*) local_unnamed_addr #2 86declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture) 87 88attributes #0 = { sspstrong } 89 90; CHECK: .section .rdata$.refptr.__stack_chk_guard,"dr",discard,.refptr.__stack_chk_guard 91; CHECK: .globl .refptr.__stack_chk_guard 92; CHECK: .refptr.__stack_chk_guard: 93; CHECK: .xword __stack_chk_guard 94; CHECK: .section .rdata$.refptr.var,"dr",discard,.refptr.var 95; CHECK: .globl .refptr.var 96; CHECK: .refptr.var: 97; CHECK: .xword var 98