Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / RISCV / GlobalISel / irtranslator / args.ll
blobfda08d91dc3a2c7c237eaf492b725dfe3907d9ef
1 ; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -global-isel -stop-after=irtranslator -verify-machineinstrs < %s \
3 ; RUN:   | FileCheck -check-prefix=RV32I %s
4 ; RUN: llc -mtriple=riscv64 -global-isel -stop-after=irtranslator -verify-machineinstrs < %s \
5 ; RUN:   | FileCheck -check-prefix=RV64I %s
7 define void @test_args_i8(i8 %a) {
9   ; RV32I-LABEL: name: test_args_i8
10   ; RV32I: bb.1.entry:
11   ; RV32I-NEXT:   liveins: $x10
12   ; RV32I-NEXT: {{  $}}
13   ; RV32I-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $x10
14   ; RV32I-NEXT:   [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)
15   ; RV32I-NEXT:   [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 1
16   ; RV32I-NEXT:   [[ADD:%[0-9]+]]:_(s8) = G_ADD [[TRUNC]], [[C]]
17   ; RV32I-NEXT:   PseudoRET
18   ; RV64I-LABEL: name: test_args_i8
19   ; RV64I: bb.1.entry:
20   ; RV64I-NEXT:   liveins: $x10
21   ; RV64I-NEXT: {{  $}}
22   ; RV64I-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10
23   ; RV64I-NEXT:   [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s64)
24   ; RV64I-NEXT:   [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 1
25   ; RV64I-NEXT:   [[ADD:%[0-9]+]]:_(s8) = G_ADD [[TRUNC]], [[C]]
26   ; RV64I-NEXT:   PseudoRET
27 entry:
28   %0 = add i8 %a, 1
29   ret void
32 define void @test_args_i16(i16 %a) {
34   ; RV32I-LABEL: name: test_args_i16
35   ; RV32I: bb.1.entry:
36   ; RV32I-NEXT:   liveins: $x10
37   ; RV32I-NEXT: {{  $}}
38   ; RV32I-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $x10
39   ; RV32I-NEXT:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
40   ; RV32I-NEXT:   [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 1
41   ; RV32I-NEXT:   [[ADD:%[0-9]+]]:_(s16) = G_ADD [[TRUNC]], [[C]]
42   ; RV32I-NEXT:   PseudoRET
43   ; RV64I-LABEL: name: test_args_i16
44   ; RV64I: bb.1.entry:
45   ; RV64I-NEXT:   liveins: $x10
46   ; RV64I-NEXT: {{  $}}
47   ; RV64I-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10
48   ; RV64I-NEXT:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s64)
49   ; RV64I-NEXT:   [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 1
50   ; RV64I-NEXT:   [[ADD:%[0-9]+]]:_(s16) = G_ADD [[TRUNC]], [[C]]
51   ; RV64I-NEXT:   PseudoRET
52 entry:
53   %0 = add i16 %a, 1
54   ret void
57 define void @test_args_i32(i32 %a) {
59   ; RV32I-LABEL: name: test_args_i32
60   ; RV32I: bb.1.entry:
61   ; RV32I-NEXT:   liveins: $x10
62   ; RV32I-NEXT: {{  $}}
63   ; RV32I-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $x10
64   ; RV32I-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
65   ; RV32I-NEXT:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C]]
66   ; RV32I-NEXT:   PseudoRET
67   ; RV64I-LABEL: name: test_args_i32
68   ; RV64I: bb.1.entry:
69   ; RV64I-NEXT:   liveins: $x10
70   ; RV64I-NEXT: {{  $}}
71   ; RV64I-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10
72   ; RV64I-NEXT:   [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
73   ; RV64I-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
74   ; RV64I-NEXT:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[TRUNC]], [[C]]
75   ; RV64I-NEXT:   PseudoRET
76 entry:
77   %0 = add i32 %a, 1
78   ret void
81 define void @test_args_i64(i64 %a) {
83   ; RV32I-LABEL: name: test_args_i64
84   ; RV32I: bb.1.entry:
85   ; RV32I-NEXT:   liveins: $x10, $x11
86   ; RV32I-NEXT: {{  $}}
87   ; RV32I-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $x10
88   ; RV32I-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
89   ; RV32I-NEXT:   [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
90   ; RV32I-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
91   ; RV32I-NEXT:   [[ADD:%[0-9]+]]:_(s64) = G_ADD [[MV]], [[C]]
92   ; RV32I-NEXT:   PseudoRET
93   ; RV64I-LABEL: name: test_args_i64
94   ; RV64I: bb.1.entry:
95   ; RV64I-NEXT:   liveins: $x10
96   ; RV64I-NEXT: {{  $}}
97   ; RV64I-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10
98   ; RV64I-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
99   ; RV64I-NEXT:   [[ADD:%[0-9]+]]:_(s64) = G_ADD [[COPY]], [[C]]
100   ; RV64I-NEXT:   PseudoRET
101 entry:
102   %0 = add i64 %a, 1
103   ret void
106 define void @test_args_i8_ptr(ptr %a) {
108   ; RV32I-LABEL: name: test_args_i8_ptr
109   ; RV32I: bb.1.entry:
110   ; RV32I-NEXT:   liveins: $x10
111   ; RV32I-NEXT: {{  $}}
112   ; RV32I-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10
113   ; RV32I-NEXT:   [[LOAD:%[0-9]+]]:_(s8) = G_LOAD [[COPY]](p0) :: (load (s8) from %ir.a)
114   ; RV32I-NEXT:   PseudoRET
115   ; RV64I-LABEL: name: test_args_i8_ptr
116   ; RV64I: bb.1.entry:
117   ; RV64I-NEXT:   liveins: $x10
118   ; RV64I-NEXT: {{  $}}
119   ; RV64I-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10
120   ; RV64I-NEXT:   [[LOAD:%[0-9]+]]:_(s8) = G_LOAD [[COPY]](p0) :: (load (s8) from %ir.a)
121   ; RV64I-NEXT:   PseudoRET
122 entry:
123   %0 = load i8, ptr %a
124   ret void
127 define void @test_args_2xi8(i8 %a, i8 %b) {
129   ; RV32I-LABEL: name: test_args_2xi8
130   ; RV32I: bb.1.entry:
131   ; RV32I-NEXT:   liveins: $x10, $x11
132   ; RV32I-NEXT: {{  $}}
133   ; RV32I-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $x10
134   ; RV32I-NEXT:   [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)
135   ; RV32I-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
136   ; RV32I-NEXT:   [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[COPY1]](s32)
137   ; RV32I-NEXT:   [[ADD:%[0-9]+]]:_(s8) = G_ADD [[TRUNC]], [[TRUNC1]]
138   ; RV32I-NEXT:   PseudoRET
139   ; RV64I-LABEL: name: test_args_2xi8
140   ; RV64I: bb.1.entry:
141   ; RV64I-NEXT:   liveins: $x10, $x11
142   ; RV64I-NEXT: {{  $}}
143   ; RV64I-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10
144   ; RV64I-NEXT:   [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s64)
145   ; RV64I-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x11
146   ; RV64I-NEXT:   [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[COPY1]](s64)
147   ; RV64I-NEXT:   [[ADD:%[0-9]+]]:_(s8) = G_ADD [[TRUNC]], [[TRUNC1]]
148   ; RV64I-NEXT:   PseudoRET
149 entry:
150   %0 = add i8 %a, %b
151   ret void
154 define void @test_args_2xi16(i16 %a, i16 %b) {
156   ; RV32I-LABEL: name: test_args_2xi16
157   ; RV32I: bb.1.entry:
158   ; RV32I-NEXT:   liveins: $x10, $x11
159   ; RV32I-NEXT: {{  $}}
160   ; RV32I-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $x10
161   ; RV32I-NEXT:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
162   ; RV32I-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
163   ; RV32I-NEXT:   [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
164   ; RV32I-NEXT:   [[ADD:%[0-9]+]]:_(s16) = G_ADD [[TRUNC]], [[TRUNC1]]
165   ; RV32I-NEXT:   PseudoRET
166   ; RV64I-LABEL: name: test_args_2xi16
167   ; RV64I: bb.1.entry:
168   ; RV64I-NEXT:   liveins: $x10, $x11
169   ; RV64I-NEXT: {{  $}}
170   ; RV64I-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10
171   ; RV64I-NEXT:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s64)
172   ; RV64I-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x11
173   ; RV64I-NEXT:   [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s64)
174   ; RV64I-NEXT:   [[ADD:%[0-9]+]]:_(s16) = G_ADD [[TRUNC]], [[TRUNC1]]
175   ; RV64I-NEXT:   PseudoRET
176 entry:
177   %0 = add i16 %a, %b
178   ret void
181 define void @test_args_2xi32(i32 %a, i32 %b) {
183   ; RV32I-LABEL: name: test_args_2xi32
184   ; RV32I: bb.1.entry:
185   ; RV32I-NEXT:   liveins: $x10, $x11
186   ; RV32I-NEXT: {{  $}}
187   ; RV32I-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $x10
188   ; RV32I-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
189   ; RV32I-NEXT:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[COPY1]]
190   ; RV32I-NEXT:   PseudoRET
191   ; RV64I-LABEL: name: test_args_2xi32
192   ; RV64I: bb.1.entry:
193   ; RV64I-NEXT:   liveins: $x10, $x11
194   ; RV64I-NEXT: {{  $}}
195   ; RV64I-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10
196   ; RV64I-NEXT:   [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
197   ; RV64I-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x11
198   ; RV64I-NEXT:   [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)
199   ; RV64I-NEXT:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[TRUNC]], [[TRUNC1]]
200   ; RV64I-NEXT:   PseudoRET
201 entry:
202   %0 = add i32 %a, %b
203   ret void
206 define void @test_args_2xi64(i64 %a, i64 %b) {
208   ; RV32I-LABEL: name: test_args_2xi64
209   ; RV32I: bb.1.entry:
210   ; RV32I-NEXT:   liveins: $x10, $x11, $x12, $x13
211   ; RV32I-NEXT: {{  $}}
212   ; RV32I-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $x10
213   ; RV32I-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
214   ; RV32I-NEXT:   [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
215   ; RV32I-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $x12
216   ; RV32I-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $x13
217   ; RV32I-NEXT:   [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
218   ; RV32I-NEXT:   [[ADD:%[0-9]+]]:_(s64) = G_ADD [[MV]], [[MV1]]
219   ; RV32I-NEXT:   PseudoRET
220   ; RV64I-LABEL: name: test_args_2xi64
221   ; RV64I: bb.1.entry:
222   ; RV64I-NEXT:   liveins: $x10, $x11
223   ; RV64I-NEXT: {{  $}}
224   ; RV64I-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $x10
225   ; RV64I-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $x11
226   ; RV64I-NEXT:   [[ADD:%[0-9]+]]:_(s64) = G_ADD [[COPY]], [[COPY1]]
227   ; RV64I-NEXT:   PseudoRET
228 entry:
229   %0 = add i64 %a, %b
230   ret void
233 define void @test_args_2xi8_ptr(ptr %a, ptr %b) {
235   ; RV32I-LABEL: name: test_args_2xi8_ptr
236   ; RV32I: bb.1.entry:
237   ; RV32I-NEXT:   liveins: $x10, $x11
238   ; RV32I-NEXT: {{  $}}
239   ; RV32I-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10
240   ; RV32I-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x11
241   ; RV32I-NEXT:   [[LOAD:%[0-9]+]]:_(s8) = G_LOAD [[COPY]](p0) :: (load (s8) from %ir.a)
242   ; RV32I-NEXT:   [[LOAD1:%[0-9]+]]:_(s8) = G_LOAD [[COPY1]](p0) :: (load (s8) from %ir.b)
243   ; RV32I-NEXT:   PseudoRET
244   ; RV64I-LABEL: name: test_args_2xi8_ptr
245   ; RV64I: bb.1.entry:
246   ; RV64I-NEXT:   liveins: $x10, $x11
247   ; RV64I-NEXT: {{  $}}
248   ; RV64I-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10
249   ; RV64I-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x11
250   ; RV64I-NEXT:   [[LOAD:%[0-9]+]]:_(s8) = G_LOAD [[COPY]](p0) :: (load (s8) from %ir.a)
251   ; RV64I-NEXT:   [[LOAD1:%[0-9]+]]:_(s8) = G_LOAD [[COPY1]](p0) :: (load (s8) from %ir.b)
252   ; RV64I-NEXT:   PseudoRET
253 entry:
254   %0 = load i8, ptr %a
255   %1 = load i8, ptr %b
256   ret void
259 define void @test_args_ptr_byval(ptr byval(i8) %a) {
260   ; RV32I-LABEL: name: test_args_ptr_byval
261   ; RV32I: bb.1.entry:
262   ; RV32I-NEXT:   liveins: $x10
263   ; RV32I-NEXT: {{  $}}
264   ; RV32I-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10
265   ; RV32I-NEXT:   [[LOAD:%[0-9]+]]:_(s8) = G_LOAD [[COPY]](p0) :: (dereferenceable load (s8) from %ir.a)
266   ; RV32I-NEXT:   PseudoRET
267   ; RV64I-LABEL: name: test_args_ptr_byval
268   ; RV64I: bb.1.entry:
269   ; RV64I-NEXT:   liveins: $x10
270   ; RV64I-NEXT: {{  $}}
271   ; RV64I-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10
272   ; RV64I-NEXT:   [[LOAD:%[0-9]+]]:_(s8) = G_LOAD [[COPY]](p0) :: (dereferenceable load (s8) from %ir.a)
273   ; RV64I-NEXT:   PseudoRET
274 entry:
275   %0 = load i8, ptr %a
276   ret void
279 define void @test_args_ptr_sret(ptr sret(i8) %a) {
280   ; RV32I-LABEL: name: test_args_ptr_sret
281   ; RV32I: bb.1.entry:
282   ; RV32I-NEXT:   liveins: $x10
283   ; RV32I-NEXT: {{  $}}
284   ; RV32I-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10
285   ; RV32I-NEXT:   [[LOAD:%[0-9]+]]:_(s8) = G_LOAD [[COPY]](p0) :: (dereferenceable load (s8) from %ir.a)
286   ; RV32I-NEXT:   PseudoRET
287   ; RV64I-LABEL: name: test_args_ptr_sret
288   ; RV64I: bb.1.entry:
289   ; RV64I-NEXT:   liveins: $x10
290   ; RV64I-NEXT: {{  $}}
291   ; RV64I-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x10
292   ; RV64I-NEXT:   [[LOAD:%[0-9]+]]:_(s8) = G_LOAD [[COPY]](p0) :: (dereferenceable load (s8) from %ir.a)
293   ; RV64I-NEXT:   PseudoRET
294 entry:
295   %0 = load i8, ptr %a
296   ret void