blob: 88d0fedea980351c705897c7aae57a47fcbbabc1 [file] [log] [blame]
Alex Bradburyffc435e2017-11-21 08:11:03 +00001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \
3; RUN: | FileCheck %s -check-prefix=RV32I
4
Alex Bradburyffc435e2017-11-21 08:11:03 +00005define i8 @sext_i1_to_i8(i1 %a) {
Alex Bradburyffc435e2017-11-21 08:11:03 +00006; RV32I-LABEL: sext_i1_to_i8:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00007; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +00008; RV32I-NEXT: andi a0, a0, 1
Alex Bradbury59136ff2017-12-15 09:47:01 +00009; RV32I-NEXT: neg a0, a0
Alex Bradbury59136ff2017-12-15 09:47:01 +000010; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +000011 %1 = sext i1 %a to i8
12 ret i8 %1
13}
14
15define i16 @sext_i1_to_i16(i1 %a) {
Alex Bradburyffc435e2017-11-21 08:11:03 +000016; RV32I-LABEL: sext_i1_to_i16:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000017; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +000018; RV32I-NEXT: andi a0, a0, 1
Alex Bradbury59136ff2017-12-15 09:47:01 +000019; RV32I-NEXT: neg a0, a0
Alex Bradbury59136ff2017-12-15 09:47:01 +000020; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +000021 %1 = sext i1 %a to i16
22 ret i16 %1
23}
24
25define i32 @sext_i1_to_i32(i1 %a) {
Alex Bradburyffc435e2017-11-21 08:11:03 +000026; RV32I-LABEL: sext_i1_to_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000027; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +000028; RV32I-NEXT: andi a0, a0, 1
Alex Bradbury59136ff2017-12-15 09:47:01 +000029; RV32I-NEXT: neg a0, a0
Alex Bradbury59136ff2017-12-15 09:47:01 +000030; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +000031 %1 = sext i1 %a to i32
32 ret i32 %1
33}
34
35define i64 @sext_i1_to_i64(i1 %a) {
Alex Bradburyffc435e2017-11-21 08:11:03 +000036; RV32I-LABEL: sext_i1_to_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000037; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +000038; RV32I-NEXT: andi a0, a0, 1
Alex Bradbury59136ff2017-12-15 09:47:01 +000039; RV32I-NEXT: neg a0, a0
40; RV32I-NEXT: mv a1, a0
Alex Bradbury59136ff2017-12-15 09:47:01 +000041; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +000042 %1 = sext i1 %a to i64
43 ret i64 %1
44}
45
46define i16 @sext_i8_to_i16(i8 %a) {
47; RV32I-LABEL: sext_i8_to_i16:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000048; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +000049; RV32I-NEXT: slli a0, a0, 24
50; RV32I-NEXT: srai a0, a0, 24
Alex Bradbury59136ff2017-12-15 09:47:01 +000051; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +000052 %1 = sext i8 %a to i16
53 ret i16 %1
54}
55
56define i32 @sext_i8_to_i32(i8 %a) {
57; RV32I-LABEL: sext_i8_to_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000058; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +000059; RV32I-NEXT: slli a0, a0, 24
60; RV32I-NEXT: srai a0, a0, 24
Alex Bradbury59136ff2017-12-15 09:47:01 +000061; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +000062 %1 = sext i8 %a to i32
63 ret i32 %1
64}
65
66define i64 @sext_i8_to_i64(i8 %a) {
67; RV32I-LABEL: sext_i8_to_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000068; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +000069; RV32I-NEXT: slli a1, a0, 24
70; RV32I-NEXT: srai a0, a1, 24
71; RV32I-NEXT: srai a1, a1, 31
Alex Bradbury59136ff2017-12-15 09:47:01 +000072; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +000073 %1 = sext i8 %a to i64
74 ret i64 %1
75}
76
77define i32 @sext_i16_to_i32(i16 %a) {
78; RV32I-LABEL: sext_i16_to_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000079; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +000080; RV32I-NEXT: slli a0, a0, 16
81; RV32I-NEXT: srai a0, a0, 16
Alex Bradbury59136ff2017-12-15 09:47:01 +000082; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +000083 %1 = sext i16 %a to i32
84 ret i32 %1
85}
86
87define i64 @sext_i16_to_i64(i16 %a) {
88; RV32I-LABEL: sext_i16_to_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000089; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +000090; RV32I-NEXT: slli a1, a0, 16
91; RV32I-NEXT: srai a0, a1, 16
92; RV32I-NEXT: srai a1, a1, 31
Alex Bradbury59136ff2017-12-15 09:47:01 +000093; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +000094 %1 = sext i16 %a to i64
95 ret i64 %1
96}
97
98define i64 @sext_i32_to_i64(i32 %a) {
99; RV32I-LABEL: sext_i32_to_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000100; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +0000101; RV32I-NEXT: srai a1, a0, 31
Alex Bradbury59136ff2017-12-15 09:47:01 +0000102; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +0000103 %1 = sext i32 %a to i64
104 ret i64 %1
105}
106
107define i8 @zext_i1_to_i8(i1 %a) {
108; RV32I-LABEL: zext_i1_to_i8:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000109; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +0000110; RV32I-NEXT: andi a0, a0, 1
Alex Bradbury59136ff2017-12-15 09:47:01 +0000111; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +0000112 %1 = zext i1 %a to i8
113 ret i8 %1
114}
115
116define i16 @zext_i1_to_i16(i1 %a) {
117; RV32I-LABEL: zext_i1_to_i16:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000118; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +0000119; RV32I-NEXT: andi a0, a0, 1
Alex Bradbury59136ff2017-12-15 09:47:01 +0000120; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +0000121 %1 = zext i1 %a to i16
122 ret i16 %1
123}
124
125define i32 @zext_i1_to_i32(i1 %a) {
126; RV32I-LABEL: zext_i1_to_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000127; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +0000128; RV32I-NEXT: andi a0, a0, 1
Alex Bradbury59136ff2017-12-15 09:47:01 +0000129; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +0000130 %1 = zext i1 %a to i32
131 ret i32 %1
132}
133
134define i64 @zext_i1_to_i64(i1 %a) {
135; RV32I-LABEL: zext_i1_to_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000136; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +0000137; RV32I-NEXT: andi a0, a0, 1
Alex Bradbury59136ff2017-12-15 09:47:01 +0000138; RV32I-NEXT: mv a1, zero
Alex Bradbury59136ff2017-12-15 09:47:01 +0000139; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +0000140 %1 = zext i1 %a to i64
141 ret i64 %1
142}
143
144define i16 @zext_i8_to_i16(i8 %a) {
145; RV32I-LABEL: zext_i8_to_i16:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000146; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +0000147; RV32I-NEXT: andi a0, a0, 255
Alex Bradbury59136ff2017-12-15 09:47:01 +0000148; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +0000149 %1 = zext i8 %a to i16
150 ret i16 %1
151}
152
153define i32 @zext_i8_to_i32(i8 %a) {
154; RV32I-LABEL: zext_i8_to_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000155; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +0000156; RV32I-NEXT: andi a0, a0, 255
Alex Bradbury59136ff2017-12-15 09:47:01 +0000157; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +0000158 %1 = zext i8 %a to i32
159 ret i32 %1
160}
161
162define i64 @zext_i8_to_i64(i8 %a) {
163; RV32I-LABEL: zext_i8_to_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000164; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +0000165; RV32I-NEXT: andi a0, a0, 255
Alex Bradbury59136ff2017-12-15 09:47:01 +0000166; RV32I-NEXT: mv a1, zero
Alex Bradbury59136ff2017-12-15 09:47:01 +0000167; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +0000168 %1 = zext i8 %a to i64
169 ret i64 %1
170}
171
172define i32 @zext_i16_to_i32(i16 %a) {
173; RV32I-LABEL: zext_i16_to_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000174; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +0000175; RV32I-NEXT: lui a1, 16
176; RV32I-NEXT: addi a1, a1, -1
177; RV32I-NEXT: and a0, a0, a1
Alex Bradbury59136ff2017-12-15 09:47:01 +0000178; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +0000179 %1 = zext i16 %a to i32
180 ret i32 %1
181}
182
183define i64 @zext_i16_to_i64(i16 %a) {
184; RV32I-LABEL: zext_i16_to_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000185; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +0000186; RV32I-NEXT: lui a1, 16
187; RV32I-NEXT: addi a1, a1, -1
188; RV32I-NEXT: and a0, a0, a1
Alex Bradbury59136ff2017-12-15 09:47:01 +0000189; RV32I-NEXT: mv a1, zero
Alex Bradbury59136ff2017-12-15 09:47:01 +0000190; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +0000191 %1 = zext i16 %a to i64
192 ret i64 %1
193}
194
195define i64 @zext_i32_to_i64(i32 %a) {
196; RV32I-LABEL: zext_i32_to_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000197; RV32I: # %bb.0:
Alex Bradbury59136ff2017-12-15 09:47:01 +0000198; RV32I-NEXT: mv a1, zero
Alex Bradbury59136ff2017-12-15 09:47:01 +0000199; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +0000200 %1 = zext i32 %a to i64
201 ret i64 %1
202}
203
204; TODO: should the trunc tests explicitly ensure no code is generated before
205; jalr?
206
207define i1 @trunc_i8_to_i1(i8 %a) {
208; RV32I-LABEL: trunc_i8_to_i1:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000209; RV32I: # %bb.0:
Alex Bradbury59136ff2017-12-15 09:47:01 +0000210; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +0000211 %1 = trunc i8 %a to i1
212 ret i1 %1
213}
214
215define i1 @trunc_i16_to_i1(i16 %a) {
216; RV32I-LABEL: trunc_i16_to_i1:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000217; RV32I: # %bb.0:
Alex Bradbury59136ff2017-12-15 09:47:01 +0000218; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +0000219 %1 = trunc i16 %a to i1
220 ret i1 %1
221}
222
223define i1 @trunc_i32_to_i1(i32 %a) {
224; RV32I-LABEL: trunc_i32_to_i1:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000225; RV32I: # %bb.0:
Alex Bradbury59136ff2017-12-15 09:47:01 +0000226; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +0000227 %1 = trunc i32 %a to i1
228 ret i1 %1
229}
230
231define i1 @trunc_i64_to_i1(i64 %a) {
232; RV32I-LABEL: trunc_i64_to_i1:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000233; RV32I: # %bb.0:
Alex Bradbury59136ff2017-12-15 09:47:01 +0000234; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +0000235 %1 = trunc i64 %a to i1
236 ret i1 %1
237}
238
239define i8 @trunc_i16_to_i8(i16 %a) {
240; RV32I-LABEL: trunc_i16_to_i8:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000241; RV32I: # %bb.0:
Alex Bradbury59136ff2017-12-15 09:47:01 +0000242; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +0000243 %1 = trunc i16 %a to i8
244 ret i8 %1
245}
246
247define i8 @trunc_i32_to_i8(i32 %a) {
248; RV32I-LABEL: trunc_i32_to_i8:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000249; RV32I: # %bb.0:
Alex Bradbury59136ff2017-12-15 09:47:01 +0000250; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +0000251 %1 = trunc i32 %a to i8
252 ret i8 %1
253}
254
255define i8 @trunc_i64_to_i8(i64 %a) {
256; RV32I-LABEL: trunc_i64_to_i8:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000257; RV32I: # %bb.0:
Alex Bradbury59136ff2017-12-15 09:47:01 +0000258; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +0000259 %1 = trunc i64 %a to i8
260 ret i8 %1
261}
262
263define i16 @trunc_i32_to_i16(i32 %a) {
264; RV32I-LABEL: trunc_i32_to_i16:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000265; RV32I: # %bb.0:
Alex Bradbury59136ff2017-12-15 09:47:01 +0000266; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +0000267 %1 = trunc i32 %a to i16
268 ret i16 %1
269}
270
271define i16 @trunc_i64_to_i16(i64 %a) {
272; RV32I-LABEL: trunc_i64_to_i16:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000273; RV32I: # %bb.0:
Alex Bradbury59136ff2017-12-15 09:47:01 +0000274; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +0000275 %1 = trunc i64 %a to i16
276 ret i16 %1
277}
278
279define i32 @trunc_i64_to_i32(i64 %a) {
280; RV32I-LABEL: trunc_i64_to_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000281; RV32I: # %bb.0:
Alex Bradbury59136ff2017-12-15 09:47:01 +0000282; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +0000283 %1 = trunc i64 %a to i32
284 ret i32 %1
285}