xref: /llvm-project/llvm/test/CodeGen/AArch64/GlobalISel/combine-const-fold-barrier-rhs.mir (revision e2c91091e537a54f1469610ab407e7c9561e7ffc)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 2
2# RUN: llc -mtriple aarch64 -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s
3---
4name:            cfb_lhs
5tracksRegLiveness: true
6body:             |
7  bb.1:
8    liveins: $w0
9
10    ; CHECK-LABEL: name: cfb_lhs
11    ; CHECK: liveins: $w0
12    ; CHECK-NEXT: {{  $}}
13    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
14    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1
15    ; CHECK-NEXT: %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst
16    ; CHECK-NEXT: %add:_(s32) = G_ADD [[COPY]], %cfb
17    ; CHECK-NEXT: $w0 = COPY %add(s32)
18    ; CHECK-NEXT: RET_ReallyLR
19    %0:_(s32) = COPY $w0
20    %cst:_(s32) = G_CONSTANT i32 1
21    %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst
22    %cst2:_(s32) = G_CONSTANT i32 2
23    %add:_(s32) = G_ADD %cfb, %0
24    $w0 = COPY %add
25    RET_ReallyLR
26
27...
28---
29name:            cfb_lhs_cfb_already_rhs
30tracksRegLiveness: true
31body:             |
32  bb.1:
33    liveins: $w0
34
35    ; CHECK-LABEL: name: cfb_lhs_cfb_already_rhs
36    ; CHECK: liveins: $w0
37    ; CHECK-NEXT: {{  $}}
38    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1
39    ; CHECK-NEXT: %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst
40    ; CHECK-NEXT: %cst2:_(s32) = G_CONSTANT i32 2
41    ; CHECK-NEXT: %cfb2:_(s32) = G_CONSTANT_FOLD_BARRIER %cst2
42    ; CHECK-NEXT: %add:_(s32) = G_ADD %cfb, %cfb2
43    ; CHECK-NEXT: $w0 = COPY %add(s32)
44    ; CHECK-NEXT: RET_ReallyLR
45    %0:_(s32) = COPY $w0
46    %cst:_(s32) = G_CONSTANT i32 1
47    %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst
48    %cst2:_(s32) = G_CONSTANT i32 2
49    %cfb2:_(s32) = G_CONSTANT_FOLD_BARRIER %cst2
50    %add:_(s32) = G_ADD %cfb, %cfb2
51    $w0 = COPY %add
52    RET_ReallyLR
53
54...
55---
56name:            cfb_lhs_cst_on_rhs
57alignment:       4
58tracksRegLiveness: true
59body:             |
60  bb.1:
61    liveins: $w0
62
63    ; CHECK-LABEL: name: cfb_lhs_cst_on_rhs
64    ; CHECK: liveins: $w0
65    ; CHECK-NEXT: {{  $}}
66    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1
67    ; CHECK-NEXT: %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst
68    ; CHECK-NEXT: %cst2:_(s32) = G_CONSTANT i32 2
69    ; CHECK-NEXT: %add:_(s32) = G_ADD %cfb, %cst2
70    ; CHECK-NEXT: $w0 = COPY %add(s32)
71    ; CHECK-NEXT: RET_ReallyLR
72    %0:_(s32) = COPY $w0
73    %cst:_(s32) = G_CONSTANT i32 1
74    %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst
75    %cst2:_(s32) = G_CONSTANT i32 2
76    %add:_(s32) = G_ADD %cfb, %cst2
77    $w0 = COPY %add
78    RET_ReallyLR
79
80...
81---
82name:            cfb_lhs_smulo
83tracksRegLiveness: true
84body:             |
85  bb.1:
86    liveins: $w0
87
88    ; CHECK-LABEL: name: cfb_lhs_smulo
89    ; CHECK: liveins: $w0
90    ; CHECK-NEXT: {{  $}}
91    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
92    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1
93    ; CHECK-NEXT: %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst
94    ; CHECK-NEXT: %mul:_(s32), %overflow:_(s1) = G_SMULO [[COPY]], %cfb
95    ; CHECK-NEXT: %ret:_(s32) = G_ANYEXT %overflow(s1)
96    ; CHECK-NEXT: $w0 = COPY %ret(s32)
97    ; CHECK-NEXT: RET_ReallyLR
98    %0:_(s32) = COPY $w0
99    %cst:_(s32) = G_CONSTANT i32 1
100    %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst
101    %mul:_(s32), %overflow:_(s1) = G_SMULO %cfb, %0
102    %ret:_(s32) = G_ANYEXT %overflow
103    $w0 = COPY %ret
104    RET_ReallyLR
105
106...
107---
108name:            cfb_lhs_cfb_already_rhs_smulo
109tracksRegLiveness: true
110body:             |
111  bb.1:
112    liveins: $w0
113
114    ; CHECK-LABEL: name: cfb_lhs_cfb_already_rhs_smulo
115    ; CHECK: liveins: $w0
116    ; CHECK-NEXT: {{  $}}
117    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1
118    ; CHECK-NEXT: %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst
119    ; CHECK-NEXT: %cst2:_(s32) = G_CONSTANT i32 6
120    ; CHECK-NEXT: %cfb2:_(s32) = G_CONSTANT_FOLD_BARRIER %cst2
121    ; CHECK-NEXT: %mul:_(s32), %overflow:_(s1) = G_SMULO %cfb, %cfb2
122    ; CHECK-NEXT: %ret:_(s32) = G_ANYEXT %overflow(s1)
123    ; CHECK-NEXT: $w0 = COPY %ret(s32)
124    ; CHECK-NEXT: RET_ReallyLR
125    %0:_(s32) = COPY $w0
126    %cst:_(s32) = G_CONSTANT i32 1
127    %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst
128    %cst2:_(s32) = G_CONSTANT i32 6
129    %cfb2:_(s32) = G_CONSTANT_FOLD_BARRIER %cst2
130    %mul:_(s32), %overflow:_(s1) = G_SMULO %cfb, %cfb2
131    %ret:_(s32) = G_ANYEXT %overflow
132    $w0 = COPY %ret
133    RET_ReallyLR
134
135...
136---
137name:            cfb_lhs_cst_on_rhs_smulo
138alignment:       4
139tracksRegLiveness: true
140body:             |
141  bb.1:
142    liveins: $w0
143
144    ; CHECK-LABEL: name: cfb_lhs_cst_on_rhs_smulo
145    ; CHECK: liveins: $w0
146    ; CHECK-NEXT: {{  $}}
147    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1
148    ; CHECK-NEXT: %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst
149    ; CHECK-NEXT: %cst2:_(s32) = G_CONSTANT i32 6
150    ; CHECK-NEXT: %mul:_(s32), %overflow:_(s1) = G_SMULO %cfb, %cst2
151    ; CHECK-NEXT: %ret:_(s32) = G_ANYEXT %overflow(s1)
152    ; CHECK-NEXT: $w0 = COPY %ret(s32)
153    ; CHECK-NEXT: RET_ReallyLR
154    %0:_(s32) = COPY $w0
155    %cst:_(s32) = G_CONSTANT i32 1
156    %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst
157    %cst2:_(s32) = G_CONSTANT i32 6
158    %mul:_(s32), %overflow:_(s1) = G_SMULO %cfb, %cst2
159    %ret:_(s32) = G_ANYEXT %overflow
160    $w0 = COPY %ret
161    RET_ReallyLR
162
163...
164---
165name:            cfb_lhs_umulfixsat
166tracksRegLiveness: true
167body:             |
168  bb.1:
169    liveins: $w0
170
171    ; CHECK-LABEL: name: cfb_lhs_umulfixsat
172    ; CHECK: liveins: $w0
173    ; CHECK-NEXT: {{  $}}
174    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
175    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1
176    ; CHECK-NEXT: %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst
177    ; CHECK-NEXT: %mul:_(s32) = G_UMULFIXSAT [[COPY]], %cfb, 7
178    ; CHECK-NEXT: $w0 = COPY %mul(s32)
179    ; CHECK-NEXT: RET_ReallyLR
180    %0:_(s32) = COPY $w0
181    %cst:_(s32) = G_CONSTANT i32 1
182    %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst
183    %mul:_(s32) = G_UMULFIXSAT %cfb, %0, 7
184    $w0 = COPY %mul
185    RET_ReallyLR
186
187...
188---
189name:            cfb_lhs_cfb_already_rhs_umulfixsat
190tracksRegLiveness: true
191body:             |
192  bb.1:
193    liveins: $w0
194
195    ; CHECK-LABEL: name: cfb_lhs_cfb_already_rhs_umulfixsat
196    ; CHECK: liveins: $w0
197    ; CHECK-NEXT: {{  $}}
198    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1
199    ; CHECK-NEXT: %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst
200    ; CHECK-NEXT: %cst2:_(s32) = G_CONSTANT i32 2
201    ; CHECK-NEXT: %cfb2:_(s32) = G_CONSTANT_FOLD_BARRIER %cst2
202    ; CHECK-NEXT: %add:_(s32) = G_UMULFIXSAT %cfb, %cfb2, 7
203    ; CHECK-NEXT: $w0 = COPY %add(s32)
204    ; CHECK-NEXT: RET_ReallyLR
205    %0:_(s32) = COPY $w0
206    %cst:_(s32) = G_CONSTANT i32 1
207    %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst
208    %cst2:_(s32) = G_CONSTANT i32 2
209    %cfb2:_(s32) = G_CONSTANT_FOLD_BARRIER %cst2
210    %add:_(s32) = G_UMULFIXSAT %cfb, %cfb2, 7
211    $w0 = COPY %add
212    RET_ReallyLR
213
214...
215---
216name:            cfb_lhs_cst_on_rhs_umulfixsat
217alignment:       4
218tracksRegLiveness: true
219body:             |
220  bb.1:
221    liveins: $w0
222
223    ; CHECK-LABEL: name: cfb_lhs_cst_on_rhs_umulfixsat
224    ; CHECK: liveins: $w0
225    ; CHECK-NEXT: {{  $}}
226    ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1
227    ; CHECK-NEXT: %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst
228    ; CHECK-NEXT: %cst2:_(s32) = G_CONSTANT i32 2
229    ; CHECK-NEXT: %add:_(s32) = G_UMULFIXSAT %cfb, %cst2, 7
230    ; CHECK-NEXT: $w0 = COPY %add(s32)
231    ; CHECK-NEXT: RET_ReallyLR
232    %0:_(s32) = COPY $w0
233    %cst:_(s32) = G_CONSTANT i32 1
234    %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst
235    %cst2:_(s32) = G_CONSTANT i32 2
236    %add:_(s32) = G_UMULFIXSAT %cfb, %cst2, 7
237    $w0 = COPY %add
238    RET_ReallyLR
239
240...
241