1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
3 ; RUN: --ppc-asm-full-reg-names -mcpu=pwr8 < %s | FileCheck %s
4 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
5 ; RUN: --ppc-asm-full-reg-names -mcpu=pwr7 < %s | FileCheck %s
6 ; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-aix \
7 ; RUN: --ppc-asm-full-reg-names -mcpu=pwr8 < %s | FileCheck %s
8 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-aix \
9 ; RUN: --ppc-asm-full-reg-names -mcpu=pwr8 < %s | FileCheck %s
12 declare void @llvm.ppc.tw(i32 %a, i32 %b, i32 %c)
13 define dso_local void @test__twlgt(i32 %a, i32 %b) {
14 ; CHECK-LABEL: test__twlgt:
16 ; CHECK-NEXT: twlgt r3, r4
18 call void @llvm.ppc.tw(i32 %a, i32 %b, i32 1)
22 define dso_local void @test__twllt(i32 %a, i32 %b) {
23 ; CHECK-LABEL: test__twllt:
25 ; CHECK-NEXT: twllt r3, r4
27 call void @llvm.ppc.tw(i32 %a, i32 %b, i32 2)
31 define dso_local void @test__tw3(i32 %a, i32 %b) {
32 ; CHECK-LABEL: test__tw3:
34 ; CHECK-NEXT: tw 3, r3, r4
36 call void @llvm.ppc.tw(i32 %a, i32 %b, i32 3)
40 define dso_local void @test__tweq(i32 %a, i32 %b) {
41 ; CHECK-LABEL: test__tweq:
43 ; CHECK-NEXT: tweq r3, r4
45 call void @llvm.ppc.tw(i32 %a, i32 %b, i32 4)
49 define dso_local void @test__twlge(i32 %a, i32 %b) {
50 ; CHECK-LABEL: test__twlge:
52 ; CHECK-NEXT: tw 5, r3, r4
54 call void @llvm.ppc.tw(i32 %a, i32 %b, i32 5)
58 define dso_local void @test__twlle(i32 %a, i32 %b) {
59 ; CHECK-LABEL: test__twlle:
61 ; CHECK-NEXT: tw 6, r3, r4
63 call void @llvm.ppc.tw(i32 %a, i32 %b, i32 6)
67 define dso_local void @test__twgt(i32 %a, i32 %b) {
68 ; CHECK-LABEL: test__twgt:
70 ; CHECK-NEXT: twgt r3, r4
72 call void @llvm.ppc.tw(i32 %a, i32 %b, i32 8)
76 define dso_local void @test__twge(i32 %a, i32 %b) {
77 ; CHECK-LABEL: test__twge:
79 ; CHECK-NEXT: tw 12, r3, r4
81 call void @llvm.ppc.tw(i32 %a, i32 %b, i32 12)
85 define dso_local void @test__twlt(i32 %a, i32 %b) {
86 ; CHECK-LABEL: test__twlt:
88 ; CHECK-NEXT: twlt r3, r4
90 call void @llvm.ppc.tw(i32 %a, i32 %b, i32 16)
94 define dso_local void @test__twle(i32 %a, i32 %b) {
95 ; CHECK-LABEL: test__twle:
97 ; CHECK-NEXT: tw 20, r3, r4
99 call void @llvm.ppc.tw(i32 %a, i32 %b, i32 20)
103 define dso_local void @test__twne24(i32 %a, i32 %b) {
104 ; CHECK-LABEL: test__twne24:
106 ; CHECK-NEXT: twne r3, r4
108 call void @llvm.ppc.tw(i32 %a, i32 %b, i32 24)
112 define dso_local void @test__twu(i32 %a, i32 %b) {
113 ; CHECK-LABEL: test__twu:
115 ; CHECK-NEXT: twu r3, r4
117 call void @llvm.ppc.tw(i32 %a, i32 %b, i32 31)
121 define dso_local void @test__tw_no_match(i32 %a, i32 %b) {
122 ; CHECK-LABEL: test__tw_no_match:
124 ; CHECK-NEXT: tw 13, r3, r4
126 call void @llvm.ppc.tw(i32 %a, i32 %b, i32 13)
131 define dso_local void @test__twi_boundary_reg_imm(i32 %a) {
132 ; CHECK-LABEL: test__twi_boundary_reg_imm:
134 ; CHECK-NEXT: twi 3, r3, 32767
136 call void @llvm.ppc.tw(i32 %a, i32 32767, i32 3)
140 define dso_local void @test__twi_boundary_imm_reg(i32 %a) {
141 ; CHECK-LABEL: test__twi_boundary_imm_reg:
143 ; CHECK-NEXT: twi 3, r3, 32767
145 call void @llvm.ppc.tw(i32 32767, i32 %a, i32 3)
149 define dso_local void @test__twi_boundary1_reg_imm(i32 %a) {
150 ; CHECK-LABEL: test__twi_boundary1_reg_imm:
152 ; CHECK-NEXT: twi 3, r3, -32768
154 call void @llvm.ppc.tw(i32 %a, i32 -32768, i32 3)
158 define dso_local void @test__twi_boundary1_imm_reg(i32 %a) {
159 ; CHECK-LABEL: test__twi_boundary1_imm_reg:
161 ; CHECK-NEXT: twi 3, r3, -32768
163 call void @llvm.ppc.tw(i32 -32768, i32 %a, i32 3)
167 define dso_local void @test__tw_boundary2_reg_imm(i32 %a) {
168 ; CHECK-LABEL: test__tw_boundary2_reg_imm:
170 ; CHECK-NEXT: lis r4, 0
171 ; CHECK-NEXT: ori r4, r4, 32768
172 ; CHECK-NEXT: tw 3, r3, r4
174 call void @llvm.ppc.tw(i32 %a, i32 32768, i32 3)
178 define dso_local void @test__tw_boundary2_imm_reg(i32 %a) {
179 ; CHECK-LABEL: test__tw_boundary2_imm_reg:
181 ; CHECK-NEXT: lis r4, 0
182 ; CHECK-NEXT: ori r4, r4, 32768
183 ; CHECK-NEXT: tw 3, r4, r3
185 call void @llvm.ppc.tw(i32 32768, i32 %a, i32 3)
189 define dso_local void @test__tw_boundary3_reg_imm(i32 %a) {
190 ; CHECK-LABEL: test__tw_boundary3_reg_imm:
192 ; CHECK-NEXT: lis r4, -1
193 ; CHECK-NEXT: ori r4, r4, 32767
194 ; CHECK-NEXT: tw 3, r3, r4
196 call void @llvm.ppc.tw(i32 %a, i32 -32769, i32 3)
200 define dso_local void @test__tw_boundary3_imm_reg(i32 %a) {
201 ; CHECK-LABEL: test__tw_boundary3_imm_reg:
203 ; CHECK-NEXT: lis r4, -1
204 ; CHECK-NEXT: ori r4, r4, 32767
205 ; CHECK-NEXT: tw 3, r4, r3
207 call void @llvm.ppc.tw(i32 -32769, i32 %a, i32 3)
211 define dso_local void @test__twlgti_reg_imm(i32 %a) {
212 ; CHECK-LABEL: test__twlgti_reg_imm:
214 ; CHECK-NEXT: twlgti r3, 0
216 call void @llvm.ppc.tw(i32 %a, i32 0, i32 1)
220 define dso_local void @test__twllti_imm_reg(i32 %a) {
221 ; CHECK-LABEL: test__twllti_imm_reg:
223 ; CHECK-NEXT: twllti r3, 0
225 call void @llvm.ppc.tw(i32 0, i32 %a, i32 1)
229 define dso_local void @test__twllti_reg_imm(i32 %a) {
230 ; CHECK-LABEL: test__twllti_reg_imm:
232 ; CHECK-NEXT: twllti r3, 1
234 call void @llvm.ppc.tw(i32 %a, i32 1, i32 2)
238 define dso_local void @test__twlgti_imm_reg(i32 %a) {
239 ; CHECK-LABEL: test__twlgti_imm_reg:
241 ; CHECK-NEXT: twlgti r3, 1
243 call void @llvm.ppc.tw(i32 1, i32 %a, i32 2)
247 define dso_local void @test__tweqi_reg_imm(i32 %a) {
248 ; CHECK-LABEL: test__tweqi_reg_imm:
250 ; CHECK-NEXT: tweqi r3, 2
252 call void @llvm.ppc.tw(i32 %a, i32 2, i32 4)
256 define dso_local void @test__tweqi_imm_reg(i32 %a) {
257 ; CHECK-LABEL: test__tweqi_imm_reg:
259 ; CHECK-NEXT: tweqi r3, 2
261 call void @llvm.ppc.tw(i32 2, i32 %a, i32 4)
265 define dso_local void @test__twgti_reg_imm(i32 %a) {
266 ; CHECK-LABEL: test__twgti_reg_imm:
268 ; CHECK-NEXT: twgti r3, 16
270 call void @llvm.ppc.tw(i32 %a, i32 16, i32 8)
274 define dso_local void @test__twlti_imm_reg(i32 %a) {
275 ; CHECK-LABEL: test__twlti_imm_reg:
277 ; CHECK-NEXT: twlti r3, 16
279 call void @llvm.ppc.tw(i32 16, i32 %a, i32 8)
283 define dso_local void @test__twlti_reg_imm(i32 %a) {
284 ; CHECK-LABEL: test__twlti_reg_imm:
286 ; CHECK-NEXT: twlti r3, 64
288 call void @llvm.ppc.tw(i32 %a, i32 64, i32 16)
292 define dso_local void @test__twgti_imm_reg(i32 %a) {
293 ; CHECK-LABEL: test__twgti_imm_reg:
295 ; CHECK-NEXT: twgti r3, 64
297 call void @llvm.ppc.tw(i32 64, i32 %a, i32 16)
301 define dso_local void @test__twnei_reg_imm(i32 %a) {
302 ; CHECK-LABEL: test__twnei_reg_imm:
304 ; CHECK-NEXT: twnei r3, 256
306 call void @llvm.ppc.tw(i32 %a, i32 256, i32 24)
310 define dso_local void @test__twnei_imm_reg(i32 %a) {
311 ; CHECK-LABEL: test__twnei_imm_reg:
313 ; CHECK-NEXT: twnei r3, 256
315 call void @llvm.ppc.tw(i32 256, i32 %a, i32 24)
319 define dso_local void @test__twui_reg_imm(i32 %a) {
320 ; CHECK-LABEL: test__twui_reg_imm:
322 ; CHECK-NEXT: twui r3, 512
324 call void @llvm.ppc.tw(i32 %a, i32 512, i32 31)
328 define dso_local void @test__twui_imm_imm(i32 %a) {
329 ; CHECK-LABEL: test__twui_imm_imm:
331 ; CHECK-NEXT: twui r3, 512
333 call void @llvm.ppc.tw(i32 512, i32 %a, i32 31)
338 declare void @llvm.ppc.trap(i32 %a)
339 define dso_local void @test__trap(i32 %a) {
340 ; CHECK-LABEL: test__trap:
342 ; CHECK-NEXT: twnei r3, 0
344 call void @llvm.ppc.trap(i32 %a)