[ARM] More MVE compare vector splat combines for ANDs
[llvm-complete.git] / test / CodeGen / ARM / GlobalISel / thumb-select-logical-ops.mir
blobd63c59942b784ab7c681f577270a00d0df2202be
1 # RUN: llc -O0 -mtriple thumb-- -mattr=+v6t2 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
2 --- |
3   define void @test_and_regs() { ret void }
4   define void @test_and_imm() { ret void }
6   define void @test_bfc() { ret void }
7   define void @test_no_bfc_bad_mask() { ret void }
9   define void @test_mvn() { ret void }
10   define void @test_bic() { ret void }
11   define void @test_orn() { ret void }
12 ...
13 ---
14 name:            test_and_regs
15 # CHECK-LABEL: name: test_and_regs
16 legalized:       true
17 regBankSelected: true
18 selected:        false
19 # CHECK: selected: true
20 registers:
21   - { id: 0, class: gprb }
22   - { id: 1, class: gprb }
23   - { id: 2, class: gprb }
24 body:             |
25   bb.0:
26     liveins: $r0, $r1
28     %0(s32) = COPY $r0
29     ; CHECK: [[VREGX:%[0-9]+]]:rgpr = COPY $r0
31     %1(s32) = COPY $r1
32     ; CHECK: [[VREGY:%[0-9]+]]:rgpr = COPY $r1
34     %2(s32) = G_AND %0, %1
35     ; CHECK: [[VREGRES:%[0-9]+]]:rgpr = t2ANDrr [[VREGX]], [[VREGY]], 14, $noreg, $noreg
37     $r0 = COPY %2(s32)
38     ; CHECK: $r0 = COPY [[VREGRES]]
40     BX_RET 14, $noreg, implicit $r0
41     ; CHECK: BX_RET 14, $noreg, implicit $r0
42 ...
43 ---
44 name:            test_and_imm
45 # CHECK-LABEL: name: test_and_imm
46 legalized:       true
47 regBankSelected: true
48 selected:        false
49 # CHECK: selected: true
50 registers:
51   - { id: 0, class: gprb }
52   - { id: 1, class: gprb }
53   - { id: 2, class: gprb }
54 body:             |
55   bb.0:
56     liveins: $r0
58     %0(s32) = COPY $r0
59     ; CHECK: [[VREGX:%[0-9]+]]:rgpr = COPY $r0
61     %1(s32) = G_CONSTANT i32 786444 ; 0x000c000c
62     %2(s32) = G_AND %0, %1
63     ; CHECK: [[VREGRES:%[0-9]+]]:rgpr = t2ANDri [[VREGX]], 786444, 14, $noreg, $noreg
65     $r0 = COPY %2(s32)
66     ; CHECK: $r0 = COPY [[VREGRES]]
68     BX_RET 14, $noreg, implicit $r0
69     ; CHECK: BX_RET 14, $noreg, implicit $r0
70 ...
71 ---
72 name:            test_bfc
73 # CHECK-LABEL: name: test_bfc
74 legalized:       true
75 regBankSelected: true
76 selected:        false
77 # CHECK: selected: true
78 registers:
79   - { id: 0, class: gprb }
80   - { id: 1, class: gprb }
81   - { id: 2, class: gprb }
82 body:             |
83   bb.0:
84     liveins: $r0
86     %0(s32) = COPY $r0
87     ; CHECK: [[VREGX:%[0-9]+]]:rgpr = COPY $r0
89     %1(s32) = G_CONSTANT i32 -65529 ; 0xFFFF0007
90     %2(s32) = G_AND %0, %1
91     ; CHECK: [[VREGRES:%[0-9]+]]:rgpr = t2BFC [[VREGX]], -65529, 14, $noreg
93     $r0 = COPY %2(s32)
94     ; CHECK: $r0 = COPY [[VREGRES]]
96     BX_RET 14, $noreg, implicit $r0
97     ; CHECK: BX_RET 14, $noreg, implicit $r0
98 ...
99 ---
100 name:            test_no_bfc_bad_mask
101 # CHECK-LABEL: name: test_no_bfc_bad_mask
102 legalized:       true
103 regBankSelected: true
104 selected:        false
105 # CHECK: selected: true
106 registers:
107   - { id: 0, class: gprb }
108   - { id: 1, class: gprb }
109   - { id: 2, class: gprb }
110 body:             |
111   bb.0:
112     liveins: $r0
114     %0(s32) = COPY $r0
116     %1(s32) = G_CONSTANT i32 786444 ; 0x000c000c
117     %2(s32) = G_AND %0, %1
118     ; CHECK-NOT: t2BFC
120     $r0 = COPY %2(s32)
122     BX_RET 14, $noreg, implicit $r0
125 name:            test_mvn
126 # CHECK-LABEL: name: test_mvn
127 legalized:       true
128 regBankSelected: true
129 selected:        false
130 # CHECK: selected: true
131 registers:
132   - { id: 0, class: gprb }
133   - { id: 1, class: gprb }
134   - { id: 2, class: gprb }
135 body:             |
136   bb.0:
137     liveins: $r0
139     %0(s32) = COPY $r0
140     ; CHECK: [[VREGX:%[0-9]+]]:rgpr = COPY $r0
142     %1(s32) = G_CONSTANT i32 -1
143     %2(s32) = G_XOR %0, %1
144     ; CHECK: [[VREGRES:%[0-9]+]]:rgpr = t2MVNr [[VREGX]], 14, $noreg, $noreg
146     $r0 = COPY %2(s32)
147     ; CHECK: $r0 = COPY [[VREGRES]]
149     BX_RET 14, $noreg, implicit $r0
150     ; CHECK: BX_RET 14, $noreg, implicit $r0
153 name:            test_bic
154 # CHECK-LABEL: name: test_bic
155 legalized:       true
156 regBankSelected: true
157 selected:        false
158 # CHECK: selected: true
159 registers:
160   - { id: 0, class: gprb }
161   - { id: 1, class: gprb }
162   - { id: 2, class: gprb }
163   - { id: 3, class: gprb }
164   - { id: 4, class: gprb }
165 body:             |
166   bb.0:
167     liveins: $r0, $r1
169     %0(s32) = COPY $r0
170     %1(s32) = COPY $r1
171     ; CHECK-DAG: [[VREGX:%[0-9]+]]:rgpr = COPY $r0
172     ; CHECK-DAG: [[VREGY:%[0-9]+]]:rgpr = COPY $r1
174     %2(s32) = G_CONSTANT i32 -1
175     %3(s32) = G_XOR %1, %2
177     %4(s32) = G_AND %0, %3
178     ; CHECK: [[VREGRES:%[0-9]+]]:rgpr = t2BICrr [[VREGX]], [[VREGY]], 14, $noreg, $noreg
180     $r0 = COPY %4(s32)
181     ; CHECK: $r0 = COPY [[VREGRES]]
183     BX_RET 14, $noreg, implicit $r0
184     ; CHECK: BX_RET 14, $noreg, implicit $r0
187 name:            test_orn
188 # CHECK-LABEL: name: test_orn
189 legalized:       true
190 regBankSelected: true
191 selected:        false
192 # CHECK: selected: true
193 registers:
194   - { id: 0, class: gprb }
195   - { id: 1, class: gprb }
196   - { id: 2, class: gprb }
197   - { id: 3, class: gprb }
198   - { id: 4, class: gprb }
199 body:             |
200   bb.0:
201     liveins: $r0, $r1
203     %0(s32) = COPY $r0
204     %1(s32) = COPY $r1
205     ; CHECK-DAG: [[VREGX:%[0-9]+]]:rgpr = COPY $r0
206     ; CHECK-DAG: [[VREGY:%[0-9]+]]:rgpr = COPY $r1
208     %2(s32) = G_CONSTANT i32 -1
209     %3(s32) = G_XOR %1, %2
211     %4(s32) = G_OR %0, %3
212     ; CHECK: [[VREGRES:%[0-9]+]]:rgpr = t2ORNrr [[VREGX]], [[VREGY]], 14, $noreg, $noreg
214     $r0 = COPY %4(s32)
215     ; CHECK: $r0 = COPY [[VREGRES]]
217     BX_RET 14, $noreg, implicit $r0
218     ; CHECK: BX_RET 14, $noreg, implicit $r0