[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / machine-outliner.mir
blob83eda744d24a9ed2efbf936bd129dcf9a09b0697
1 # RUN: llc -mtriple=aarch64--- -run-pass=prologepilog -run-pass=machine-outliner -verify-machineinstrs -frame-pointer=non-leaf %s -o - | FileCheck %s
2 --- |
4   @x = common global i32 0, align 4
6   define void @baz() #0 {
7     ret void
8   }
10   define i32 @main() #0 {
11     ret i32 0
12   }
14   define void @bar(i32 %a) #0 {
15     ret void
16   }
18   attributes #0 = { noinline noredzone }
19 ...
20 ---
21 # This test ensures that we
22 # - Create outlined functions
23 # - Don't outline anything to do with LR or W30
24 # - Save LR when it's not available
25 # - Functions whose addresses are taken can still be outlined
27 # CHECK-LABEL: main
28 # CHECK-LABEL: bb.1:
29 # CHECK-DAG: BL @OUTLINED_FUNCTION_[[F0:[0-9]+]]
30 # CHECK-NEXT: $lr = ORRXrs $xzr, $x[[REG:[0-9]+]], 0
31 # CHECK-NEXT: STRHHroW $w12, $x9, $w30, 1, 1
32 # CHECK-NEXT: $lr = ORRXri $xzr, 1
34 # CHECK-DAG: bb.2
35 # CHECK: BL @OUTLINED_FUNCTION_[[F0]]
36 # CHECK-NEXT: $lr = ORRXrs $xzr, $x[[REG]], 0
37 # CHECK-NEXT: STRHHroW $w12, $x9, $w30, 1, 1
38 # CHECK-NEXT: $lr = ORRXri $xzr, 1
40 # CHECK-DAG: bb.3
41 # CHECK: BL @OUTLINED_FUNCTION_[[F0]]
42 # CHECK-NEXT: $lr = ORRXrs $xzr, $x[[REG]], 0
43 # CHECK-NEXT: STRHHroW $w12, $x9, $w30, 1, 1
44 # CHECK-NEXT: $lr = ORRXri $xzr, 1
45 name:            main
46 tracksRegLiveness: true
47 body:             |
48   bb.0:
49   liveins: $lr
50     $sp = frame-setup SUBXri $sp, 16, 0
51     renamable $x9 = ADRP target-flags(aarch64-page) @bar
52     $x9 = ORRXri $xzr, 1
53     $w12 = ORRWri $wzr, 1
54     $w30 = ORRWri $wzr, 1
55     $lr = ORRXri $xzr, 1
56   bb.1:
57   liveins: $lr
58     $x20, $x19 = LDPXi $sp, 10
59     $w12 = ORRWri $wzr, 1
60     $w12 = ORRWri $wzr, 1
61     $w12 = ORRWri $wzr, 1
62     $w12 = ORRWri $wzr, 1
63     $w12 = ORRWri $wzr, 1
64     $w12 = ORRWri $wzr, 1
65     renamable $x9 = ADRP target-flags(aarch64-page) @x
66     $x12 = ADDXri $sp, 48, 0;
67     STRHHroW $w12, $x9, $w30, 1, 1
68     $lr = ORRXri $xzr, 1
69   bb.2:
70   liveins: $lr
71     $x20, $x19 = LDPXi $sp, 10
72     $w12 = ORRWri $wzr, 1
73     $w12 = ORRWri $wzr, 1
74     $w12 = ORRWri $wzr, 1
75     $w12 = ORRWri $wzr, 1
76     $w12 = ORRWri $wzr, 1
77     $w12 = ORRWri $wzr, 1
78     renamable $x9 = ADRP target-flags(aarch64-page) @x
79     $x12 = ADDXri $sp, 48, 0;
80     STRHHroW $w12, $x9, $w30, 1, 1
81     $lr = ORRXri $xzr, 1
82   bb.3:
83   liveins: $lr
84     $x20, $x19 = LDPXi $sp, 10
85     $w12 = ORRWri $wzr, 1
86     $w12 = ORRWri $wzr, 1
87     $w12 = ORRWri $wzr, 1
88     $w12 = ORRWri $wzr, 1
89     $w12 = ORRWri $wzr, 1
90     $w12 = ORRWri $wzr, 1
91     renamable $x9 = ADRP target-flags(aarch64-page) @x
92     $x12 = ADDXri $sp, 48, 0;
93     STRHHroW $w12, $x9, $w30, 1, 1
94     $lr = ORRXri $xzr, 1
95     $sp = ADDXri $sp, 16, 0
96   bb.4:
97   liveins: $lr
98     RET undef $lr
102 # This test ensures that we can avoid saving LR when it's available.
103 # It also makes sure that KILL instructions don't impact outlining.
104 # CHECK-LABEL: bb.1:
105 # CHECK-NOT: BL @baz, implicit-def dead $lr, implicit $sp
106 # CHECK: BL @OUTLINED_FUNCTION_[[F1:[0-9]+]], implicit-def $lr, implicit $sp
107 # CHECK-NEXT: $w11 = ORRWri $wzr, 2
108 # CHECK-NEXT: BL @OUTLINED_FUNCTION_[[F1]], implicit-def $lr, implicit $sp
109 # CHECK-NEXT: $w8 = ORRWri $wzr, 0
110 # CHECK-NOT: $w11 = KILL renamable $w11, implicit killed $w11
111 name:            bar
112 tracksRegLiveness: true
113 body:             |
114   bb.0:
115     liveins: $w0, $lr, $w8
116     $sp = frame-setup SUBXri $sp, 32, 0
117     $fp = frame-setup ADDXri $sp, 16, 0
119   bb.1:
120     BL @baz, implicit-def dead $lr, implicit $sp
121     $w11 = ORRWri $wzr, 1
122     $w11 = ORRWri $wzr, 1
123     $w11 = KILL renamable $w11, implicit killed $w11
124     $w11 = ORRWri $wzr, 1
125     $w11 = ORRWri $wzr, 1
126     BL @baz, implicit-def dead $lr, implicit $sp
127     $w11 = ORRWri $wzr, 1
128     $w11 = ORRWri $wzr, 1
129     $w11 = ORRWri $wzr, 2
130     BL @baz, implicit-def dead $lr, implicit $sp
131     $w11 = ORRWri $wzr, 1
132     $w11 = ORRWri $wzr, 1
133     $w11 = ORRWri $wzr, 1
134     $w11 = ORRWri $wzr, 1
135     BL @baz, implicit-def dead $lr, implicit $sp
136     $w11 = ORRWri $wzr, 1
137     $w11 = ORRWri $wzr, 1
138     $w8 = ORRWri $wzr, 0
140   bb.2:
141     $w15 = ORRWri $wzr, 1
142     $w15 = ORRWri $wzr, 1
143     $w15 = ORRWri $wzr, 1
144     $w15 = ORRWri $wzr, 1
145     $x15 = ADDXri $sp, 48, 0;
146     $w9 = ORRWri $wzr, 0
147     $w15 = ORRWri $wzr, 1
148     $w15 = ORRWri $wzr, 1
149     $w15 = ORRWri $wzr, 1
150     $w15 = ORRWri $wzr, 1
151     $x15 = ADDXri $sp, 48, 0;
152     $w8 = ORRWri $wzr, 0
154   bb.3:
155     $fp, $lr = LDPXi $sp, 2
156     $sp = ADDXri $sp, 32, 0
157     RET undef $lr
161 name:            baz
162 tracksRegLiveness: true
163 body:             |
164   bb.0:
165     liveins: $w0, $lr, $w8
166     RET undef $lr
168 # CHECK-LABEL: name:            OUTLINED_FUNCTION_{{[0-9]}}
169 # CHECK=LABEL: name:            OUTLINED_FUNCTION_{{[1-9]}}