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