[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / mingw-refptr.ll
blob306bee9f85c42e137b3ab0e300b645fe9d58c879
1 ; RUN: llc < %s -mtriple=aarch64-w64-mingw32 | FileCheck %s
2 ; 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
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
11 define dso_local i32 @getVar() {
12 ; CHECK-LABEL: getVar:
13 ; CHECK:    adrp x8, .refptr.var
14 ; CHECK:    ldr  x8, [x8, :lo12:.refptr.var]
15 ; CHECK:    ldr  w0, [x8]
16 ; CHECK:    ret
17 entry:
18   %0 = load i32, ptr @var, align 4
19   ret i32 %0
22 define dso_local i32 @getDsoLocalVar() {
23 ; CHECK-LABEL: getDsoLocalVar:
24 ; CHECK:    adrp x8, dsolocalvar
25 ; CHECK:    ldr  w0, [x8, :lo12:dsolocalvar]
26 ; CHECK:    ret
27 entry:
28   %0 = load i32, ptr @dsolocalvar, align 4
29   ret i32 %0
32 define dso_local i32 @getLocalVar() {
33 ; CHECK-LABEL: getLocalVar:
34 ; CHECK:    adrp x8, localvar
35 ; CHECK:    ldr  w0, [x8, :lo12:localvar]
36 ; CHECK:    ret
37 entry:
38   %0 = load i32, ptr @localvar, align 4
39   ret i32 %0
42 define dso_local i32 @getLocalCommon() {
43 ; CHECK-LABEL: getLocalCommon:
44 ; CHECK:    adrp x8, localcommon
45 ; CHECK:    ldr  w0, [x8, :lo12:localcommon]
46 ; CHECK:    ret
47 entry:
48   %0 = load i32, ptr @localcommon, align 4
49   ret i32 %0
52 define dso_local i32 @getExtVar() {
53 ; CHECK-LABEL: getExtVar:
54 ; CHECK:    adrp x8, __imp_extvar
55 ; CHECK:    ldr  x8, [x8, :lo12:__imp_extvar]
56 ; CHECK:    ldr  w0, [x8]
57 ; CHECK:    ret
58 entry:
59   %0 = load i32, ptr @extvar, align 4
60   ret i32 %0
63 define dso_local void @callFunc() {
64 ; CHECK-LABEL: callFunc:
65 ; CHECK:    b otherFunc
66 entry:
67   tail call void @otherFunc()
68   ret void
71 declare dso_local void @otherFunc()
73 ; FALLBACK-NOT: remark:{{.*}}sspFunc
74 define dso_local void @sspFunc() #0 {
75 ; CHECK-LABEL: sspFunc:
76 ; CHECK:    adrp x8, .refptr.__stack_chk_guard
77 ; CHECK:    ldr  x8, [x8, :lo12:.refptr.__stack_chk_guard]
78 ; CHECK:    ldr  x8, [x8]
79 ; GISEL-LABEL: sspFunc:
80 ; GISEL:    adrp x8, .refptr.__stack_chk_guard
81 ; GISEL:    ldr  x8, [x8, :lo12:.refptr.__stack_chk_guard]
82 ; GISEL:    ldr  x8, [x8]
83 entry:
84   %c = alloca i8, align 1
85   call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %c)
86   call void @ptrUser(ptr nonnull %c)
87   call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %c)
88   ret void
91 declare void @llvm.lifetime.start.p0(i64, ptr nocapture)
92 declare dso_local void @ptrUser(ptr) local_unnamed_addr #2
93 declare void @llvm.lifetime.end.p0(i64, ptr nocapture)
95 attributes #0 = { sspstrong }
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