[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / select-brcond-of-binop.mir
blobd8e4a549148fd2f7aaa907bf70fc659322c32795
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=aarch64-- -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
3 ---
4 name:            condbr_of_not
5 legalized:       true
6 regBankSelected: true
7 liveins:
8   - { reg: '$x0' }
9 body:             |
10   ; CHECK-LABEL: name: condbr_of_not
11   ; CHECK: bb.0:
12   ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
13   ; CHECK:   [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
14   ; CHECK:   [[LDRBBui:%[0-9]+]]:gpr32 = LDRBBui [[COPY]], 0 :: (load (s8))
15   ; CHECK:   TBZW [[LDRBBui]], 0, %bb.2
16   ; CHECK: bb.1:
17   ; CHECK:   RET_ReallyLR
18   ; CHECK: bb.2:
19   ; CHECK:   RET_ReallyLR
20   bb.1:
21     successors: %bb.2, %bb.3
22     liveins: $x0
24     %0:gpr(p0) = COPY $x0
25     %8:gpr(s8) = G_LOAD %0(p0) :: (load (s8))
26     %4:gpr(s32) = G_ANYEXT %8(s8)
27     %5:gpr(s32) = G_CONSTANT i32 1
28     %6:gpr(s32) = G_XOR %4, %5
29     %3:gpr(s1) = G_TRUNC %6(s32)
30     G_BRCOND %3(s1), %bb.3
32   bb.2:
33     RET_ReallyLR
35   bb.3:
36     RET_ReallyLR
38 ...
39 ---
40 name:            condbr_of_not_64
41 legalized:       true
42 regBankSelected: true
43 liveins:
44   - { reg: '$x0' }
45 body:             |
46   ; CHECK-LABEL: name: condbr_of_not_64
47   ; CHECK: bb.0:
48   ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
49   ; CHECK:   [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
50   ; CHECK:   [[LDRBBui:%[0-9]+]]:gpr32 = LDRBBui [[COPY]], 0 :: (load (s8))
51   ; CHECK:   TBZW [[LDRBBui]], 0, %bb.2
52   ; CHECK: bb.1:
53   ; CHECK:   RET_ReallyLR
54   ; CHECK: bb.2:
55   ; CHECK:   RET_ReallyLR
56   ; TB(N)ZX has no encoding if the bit being tested is < 32, so we should get
57   ; TBZW here.
58   ;
59   bb.1:
60     successors: %bb.2, %bb.3
61     liveins: $x0
63     %0:gpr(p0) = COPY $x0
64     %8:gpr(s8) = G_LOAD %0(p0) :: (load (s8))
65     %4:gpr(s64) = G_ANYEXT %8(s8)
66     %5:gpr(s64) = G_CONSTANT i64 1
67     %6:gpr(s64) = G_XOR %4, %5
68     %3:gpr(s1) = G_TRUNC %6(s64)
69     G_BRCOND %3(s1), %bb.3
71   bb.2:
72     RET_ReallyLR
74   bb.3:
75     RET_ReallyLR
77 ...
78 ---
79 name:            condbr_of_and
80 legalized:       true
81 regBankSelected: true
82 body:             |
83   ; CHECK-LABEL: name: condbr_of_and
84   ; CHECK: bb.0:
85   ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
86   ; CHECK:   %lhs:gpr32 = COPY $w0
87   ; CHECK:   TBNZW %lhs, 0, %bb.2
88   ; CHECK: bb.1:
89   ; CHECK:   RET_ReallyLR
90   ; CHECK: bb.2:
91   ; CHECK:   RET_ReallyLR
92   bb.1:
93     successors: %bb.2, %bb.3
94     liveins: $w0
95     %lhs:gpr(s32) = COPY $w0
96     %rhs:gpr(s32) = G_CONSTANT i32 1
97     %op:gpr(s32) = G_AND %lhs, %rhs
98     %trunc:gpr(s1) = G_TRUNC %op(s32)
99     G_BRCOND %trunc(s1), %bb.3
101   bb.2:
102     RET_ReallyLR
104   bb.3:
105     RET_ReallyLR
109 name:            condbr_of_and_no_cst
110 legalized:       true
111 regBankSelected: true
112 body:             |
113   ; CHECK-LABEL: name: condbr_of_and_no_cst
114   ; CHECK: bb.0:
115   ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
116   ; CHECK:   %lhs:gpr32 = COPY $w0
117   ; CHECK:   %rhs:gpr32 = COPY $w1
118   ; CHECK:   %op:gpr32 = ANDWrr %lhs, %rhs
119   ; CHECK:   TBNZW %op, 0, %bb.2
120   ; CHECK: bb.1:
121   ; CHECK:   RET_ReallyLR
122   ; CHECK: bb.2:
123   ; CHECK:   RET_ReallyLR
124   bb.1:
125     successors: %bb.2, %bb.3
126     liveins: $w0, $w1
127     %lhs:gpr(s32) = COPY $w0
128     %rhs:gpr(s32) = COPY $w1
129     %op:gpr(s32) = G_AND %lhs, %rhs
130     %trunc:gpr(s1) = G_TRUNC %op(s32)
131     G_BRCOND %trunc(s1), %bb.3
133   bb.2:
134     RET_ReallyLR
136   bb.3:
137     RET_ReallyLR
141 name:            condbr_of_shl
142 legalized:       true
143 regBankSelected: true
144 body:             |
145   ; CHECK-LABEL: name: condbr_of_shl
146   ; CHECK: bb.0:
147   ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
148   ; CHECK:   %lhs:gpr32 = COPY $w0
149   ; CHECK:   %op:gpr32 = UBFMWri %lhs, 31, 30
150   ; CHECK:   TBNZW %op, 0, %bb.2
151   ; CHECK: bb.1:
152   ; CHECK:   RET_ReallyLR
153   ; CHECK: bb.2:
154   ; CHECK:   RET_ReallyLR
155   ; We won't ever fold this, because
156   ; bit = 0
157   ; bit - constant < 0, which isn't valid for tbz/tbnz.
158   ;
159   bb.1:
160     successors: %bb.2, %bb.3
161     liveins: $w0
162     %lhs:gpr(s32) = COPY $w0
163     %rhs:gpr(s32) = G_CONSTANT i32 1
164     %op:gpr(s32) = G_SHL %lhs, %rhs
165     %trunc:gpr(s1) = G_TRUNC %op(s32)
166     G_BRCOND %trunc(s1), %bb.3
168   bb.2:
169     RET_ReallyLR
171   bb.3:
172     RET_ReallyLR
176 name:            condbr_of_ashr
177 legalized:       true
178 regBankSelected: true
179 body:             |
180   ; CHECK-LABEL: name: condbr_of_ashr
181   ; CHECK: bb.0:
182   ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
183   ; CHECK:   %lhs:gpr32 = COPY $w0
184   ; CHECK:   TBNZW %lhs, 1, %bb.2
185   ; CHECK: bb.1:
186   ; CHECK:   RET_ReallyLR
187   ; CHECK: bb.2:
188   ; CHECK:   RET_ReallyLR
189   ; We can fold ashr, because we can have
190   ;
191   ; (tbz (ashr x, c), 0) where 0 + c > # bits in x.
192   ;
193   bb.1:
194     successors: %bb.2, %bb.3
195     liveins: $w0
196     %lhs:gpr(s32) = COPY $w0
197     %rhs:gpr(s32) = G_CONSTANT i32 1
198     %op:gpr(s32) = G_ASHR %lhs, %rhs
199     %trunc:gpr(s1) = G_TRUNC %op(s32)
200     G_BRCOND %trunc(s1), %bb.3
202   bb.2:
203     RET_ReallyLR
205   bb.3:
206     RET_ReallyLR
210 name:            tbnzx
211 legalized:       true
212 regBankSelected: true
213 body:             |
214   ; CHECK-LABEL: name: tbnzx
215   ; CHECK: bb.0:
216   ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
217   ; CHECK:   %lhs:gpr64 = COPY $x0
218   ; CHECK:   TBNZX %lhs, 63, %bb.2
219   ; CHECK: bb.1:
220   ; CHECK:   RET_ReallyLR
221   ; CHECK: bb.2:
222   ; CHECK:   RET_ReallyLR
223   bb.1:
224     successors: %bb.2, %bb.3
225     liveins: $x0
226     %lhs:gpr(s64) = COPY $x0
227     %rhs:gpr(s64) = G_CONSTANT i64 8589934592
228     %op:gpr(s64) = G_ASHR %lhs, %rhs
229     %trunc:gpr(s1) = G_TRUNC %op(s64)
230     G_BRCOND %trunc(s1), %bb.3
231   bb.2:
232     RET_ReallyLR
233   bb.3:
234     RET_ReallyLR