1; RUN: llc < %s -mtriple=ve-unknown-unknown | FileCheck %s
2
3define signext i16 @func1() {
4; CHECK-LABEL: func1:
5; CHECK:       .LBB{{[0-9]+}}_2:
6; CHECK-NEXT:    ld1b.sx %s0, 191(, %s11)
7; CHECK-NEXT:    or %s11, 0, %s9
8  %a = alloca i8, align 1
9  %a.val = load i8, i8* %a, align 1
10  %a.conv = sext i8 %a.val to i16
11  ret i16 %a.conv
12}
13
14define i32 @func2() {
15; CHECK-LABEL: func2:
16; CHECK:       .LBB{{[0-9]+}}_2:
17; CHECK-NEXT:    ld1b.sx %s0, 191(, %s11)
18; CHECK-NEXT:    or %s11, 0, %s9
19  %a = alloca i8, align 1
20  %a.val = load i8, i8* %a, align 1
21  %a.conv = sext i8 %a.val to i32
22  ret i32 %a.conv
23}
24
25define i64 @func3() {
26; CHECK-LABEL: func3:
27; CHECK:       .LBB{{[0-9]+}}_2:
28; CHECK-NEXT:    ld1b.sx %s0, 191(, %s11)
29; CHECK-NEXT:    or %s11, 0, %s9
30  %a = alloca i8, align 1
31  %a.val = load i8, i8* %a, align 1
32  %a.conv = sext i8 %a.val to i64
33  ret i64 %a.conv
34}
35
36define zeroext i16 @func5() {
37; CHECK-LABEL: func5:
38; CHECK:       .LBB{{[0-9]+}}_2:
39; CHECK-NEXT:    ld1b.sx %s0, 191(, %s11)
40; CHECK-NEXT:    and %s0, %s0, (48)0
41; CHECK-NEXT:    or %s11, 0, %s9
42  %a = alloca i8, align 1
43  %a.val = load i8, i8* %a, align 1
44  %a.conv = sext i8 %a.val to i16
45  ret i16 %a.conv
46}
47
48define i32 @func6() {
49; CHECK-LABEL: func6:
50; CHECK:       .LBB{{[0-9]+}}_2:
51; CHECK-NEXT:    ld1b.sx %s0, 191(, %s11)
52; CHECK-NEXT:    or %s11, 0, %s9
53  %a = alloca i8, align 1
54  %a.val = load i8, i8* %a, align 1
55  %a.conv = sext i8 %a.val to i32
56  ret i32 %a.conv
57}
58
59define i64 @func7() {
60; CHECK-LABEL: func7:
61; CHECK:       .LBB{{[0-9]+}}_2:
62; CHECK-NEXT:    ld1b.sx %s0, 191(, %s11)
63; CHECK-NEXT:    or %s11, 0, %s9
64  %a = alloca i8, align 1
65  %a.val = load i8, i8* %a, align 1
66  %a.conv = sext i8 %a.val to i64
67  ret i64 %a.conv
68}
69
70define signext i16 @func9() {
71; CHECK-LABEL: func9:
72; CHECK:       .LBB{{[0-9]+}}_2:
73; CHECK-NEXT:    ld1b.zx %s0, 191(, %s11)
74; CHECK-NEXT:    or %s11, 0, %s9
75  %a = alloca i8, align 1
76  %a.val = load i8, i8* %a, align 1
77  %a.conv = zext i8 %a.val to i16
78  ret i16 %a.conv
79}
80
81define i32 @func10() {
82; CHECK-LABEL: func10:
83; CHECK:       .LBB{{[0-9]+}}_2:
84; CHECK-NEXT:    ld1b.zx %s0, 191(, %s11)
85; CHECK-NEXT:    or %s11, 0, %s9
86  %a = alloca i8, align 1
87  %a.val = load i8, i8* %a, align 1
88  %a.conv = zext i8 %a.val to i32
89  ret i32 %a.conv
90}
91
92define i64 @func11() {
93; CHECK-LABEL: func11:
94; CHECK:       .LBB{{[0-9]+}}_2:
95; CHECK-NEXT:    ld1b.zx %s0, 191(, %s11)
96; CHECK-NEXT:    or %s11, 0, %s9
97  %a = alloca i8, align 1
98  %a.val = load i8, i8* %a, align 1
99  %a.conv = zext i8 %a.val to i64
100  ret i64 %a.conv
101}
102
103define zeroext i16 @func13() {
104; CHECK-LABEL: func13:
105; CHECK:       .LBB{{[0-9]+}}_2:
106; CHECK-NEXT:    ld1b.zx %s0, 191(, %s11)
107; CHECK-NEXT:    or %s11, 0, %s9
108  %a = alloca i8, align 1
109  %a.val = load i8, i8* %a, align 1
110  %a.conv = zext i8 %a.val to i16
111  ret i16 %a.conv
112}
113
114define zeroext i16 @func14() {
115; CHECK-LABEL: func14:
116; CHECK:       .LBB{{[0-9]+}}_2:
117; CHECK-NEXT:    ld1b.zx %s0, 191(, %s11)
118; CHECK-NEXT:    or %s11, 0, %s9
119  %a = alloca i8, align 1
120  %a.val = load i8, i8* %a, align 1
121  %a.conv = zext i8 %a.val to i16
122  ret i16 %a.conv
123}
124
125define i64 @func15() {
126; CHECK-LABEL: func15:
127; CHECK:       .LBB{{[0-9]+}}_2:
128; CHECK-NEXT:    ld1b.zx %s0, 191(, %s11)
129; CHECK-NEXT:    or %s11, 0, %s9
130  %a = alloca i8, align 1
131  %a.val = load i8, i8* %a, align 1
132  %a.conv = zext i8 %a.val to i64
133  ret i64 %a.conv
134}
135
136define i32 @func17() {
137; CHECK-LABEL: func17:
138; CHECK:       .LBB{{[0-9]+}}_2:
139; CHECK-NEXT:    ld2b.sx %s0, 190(, %s11)
140; CHECK-NEXT:    or %s11, 0, %s9
141  %a = alloca i16, align 2
142  %a.val = load i16, i16* %a, align 2
143  %a.conv = sext i16 %a.val to i32
144  ret i32 %a.conv
145}
146
147define i64 @func18() {
148; CHECK-LABEL: func18:
149; CHECK:       .LBB{{[0-9]+}}_2:
150; CHECK-NEXT:    ld2b.sx %s0, 190(, %s11)
151; CHECK-NEXT:    or %s11, 0, %s9
152  %a = alloca i16, align 2
153  %a.val = load i16, i16* %a, align 2
154  %a.conv = sext i16 %a.val to i64
155  ret i64 %a.conv
156}
157
158define zeroext i16 @func20() {
159; CHECK-LABEL: func20:
160; CHECK:       .LBB{{[0-9]+}}_2:
161; CHECK-NEXT:    ld2b.zx %s0, 190(, %s11)
162; CHECK-NEXT:    or %s11, 0, %s9
163  %a = alloca i16, align 2
164  %a.conv = load i16, i16* %a, align 2
165  ret i16 %a.conv
166}
167
168define i64 @func21() {
169; CHECK-LABEL: func21:
170; CHECK:       .LBB{{[0-9]+}}_2:
171; CHECK-NEXT:    ld2b.sx %s0, 190(, %s11)
172; CHECK-NEXT:    or %s11, 0, %s9
173  %a = alloca i16, align 2
174  %a.val = load i16, i16* %a, align 2
175  %a.conv = sext i16 %a.val to i64
176  ret i64 %a.conv
177}
178
179define i32 @func23() {
180; CHECK-LABEL: func23:
181; CHECK:       .LBB{{[0-9]+}}_2:
182; CHECK-NEXT:    ld2b.zx %s0, 190(, %s11)
183; CHECK-NEXT:    or %s11, 0, %s9
184  %a = alloca i16, align 2
185  %a.val = load i16, i16* %a, align 2
186  %a.conv = zext i16 %a.val to i32
187  ret i32 %a.conv
188}
189
190define i64 @func24() {
191; CHECK-LABEL: func24:
192; CHECK:       .LBB{{[0-9]+}}_2:
193; CHECK-NEXT:    ld2b.zx %s0, 190(, %s11)
194; CHECK-NEXT:    or %s11, 0, %s9
195  %a = alloca i16, align 2
196  %a.val = load i16, i16* %a, align 2
197  %a.conv = zext i16 %a.val to i64
198  ret i64 %a.conv
199}
200
201define zeroext i16 @func26() {
202; CHECK-LABEL: func26:
203; CHECK:       .LBB{{[0-9]+}}_2:
204; CHECK-NEXT:    ld2b.zx %s0, 190(, %s11)
205; CHECK-NEXT:    or %s11, 0, %s9
206  %a = alloca i16, align 2
207  %a.conv = load i16, i16* %a, align 2
208  ret i16 %a.conv
209}
210
211define i64 @func27() {
212; CHECK-LABEL: func27:
213; CHECK:       .LBB{{[0-9]+}}_2:
214; CHECK-NEXT:    ld2b.zx %s0, 190(, %s11)
215; CHECK-NEXT:    or %s11, 0, %s9
216  %a = alloca i16, align 2
217  %a.val = load i16, i16* %a, align 2
218  %a.conv = zext i16 %a.val to i64
219  ret i64 %a.conv
220}
221
222define i64 @func29() {
223; CHECK-LABEL: func29:
224; CHECK:       .LBB{{[0-9]+}}_2:
225; CHECK-NEXT:    ldl.sx %s0, 188(, %s11)
226; CHECK-NEXT:    or %s11, 0, %s9
227  %a = alloca i32, align 4
228  %a.val = load i32, i32* %a, align 4
229  %a.conv = sext i32 %a.val to i64
230  ret i64 %a.conv
231}
232
233define i64 @func31() {
234; CHECK-LABEL: func31:
235; CHECK:       .LBB{{[0-9]+}}_2:
236; CHECK-NEXT:    ldl.sx %s0, 188(, %s11)
237; CHECK-NEXT:    or %s11, 0, %s9
238  %a = alloca i32, align 4
239  %a.val = load i32, i32* %a, align 4
240  %a.conv = sext i32 %a.val to i64
241  ret i64 %a.conv
242}
243
244define i64 @func33() {
245; CHECK-LABEL: func33:
246; CHECK:       .LBB{{[0-9]+}}_2:
247; CHECK-NEXT:    ldl.zx %s0, 188(, %s11)
248; CHECK-NEXT:    or %s11, 0, %s9
249  %a = alloca i32, align 4
250  %a.val = load i32, i32* %a, align 4
251  %a.conv = zext i32 %a.val to i64
252  ret i64 %a.conv
253}
254
255define i64 @func35() {
256; CHECK-LABEL: func35:
257; CHECK:       .LBB{{[0-9]+}}_2:
258; CHECK-NEXT:    ldl.zx %s0, 188(, %s11)
259; CHECK-NEXT:    or %s11, 0, %s9
260  %a = alloca i32, align 4
261  %a.val = load i32, i32* %a, align 4
262  %a.conv = zext i32 %a.val to i64
263  ret i64 %a.conv
264}
265
266define signext i8 @func37() {
267; CHECK-LABEL: func37:
268; CHECK:       .LBB{{[0-9]+}}_2:
269; CHECK-NEXT:    ld1b.zx %s0, 191(, %s11)
270; CHECK-NEXT:    sll %s0, %s0, 63
271; CHECK-NEXT:    sra.l %s0, %s0, 63
272; CHECK-NEXT:    or %s11, 0, %s9
273  %a = alloca i1, align 1
274  %a.val = load i1, i1* %a, align 1
275  %a.conv = sext i1 %a.val to i8
276  ret i8 %a.conv
277}
278
279define signext i16 @func38() {
280; CHECK-LABEL: func38:
281; CHECK:       .LBB{{[0-9]+}}_2:
282; CHECK-NEXT:    ld1b.zx %s0, 191(, %s11)
283; CHECK-NEXT:    sll %s0, %s0, 63
284; CHECK-NEXT:    sra.l %s0, %s0, 63
285; CHECK-NEXT:    or %s11, 0, %s9
286  %a = alloca i1, align 1
287  %a.val = load i1, i1* %a, align 1
288  %a.conv = sext i1 %a.val to i16
289  ret i16 %a.conv
290}
291
292define signext i32 @func39() {
293; CHECK-LABEL: func39:
294; CHECK:       .LBB{{[0-9]+}}_2:
295; CHECK-NEXT:    ld1b.zx %s0, 191(, %s11)
296; CHECK-NEXT:    sll %s0, %s0, 63
297; CHECK-NEXT:    sra.l %s0, %s0, 63
298; CHECK-NEXT:    or %s11, 0, %s9
299  %a = alloca i1, align 1
300  %a.val = load i1, i1* %a, align 1
301  %a.conv = sext i1 %a.val to i32
302  ret i32 %a.conv
303}
304
305define signext i64 @func40() {
306; CHECK-LABEL: func40:
307; CHECK:       .LBB{{[0-9]+}}_2:
308; CHECK-NEXT:    ld1b.zx %s0, 191(, %s11)
309; CHECK-NEXT:    sll %s0, %s0, 63
310; CHECK-NEXT:    sra.l %s0, %s0, 63
311; CHECK-NEXT:    or %s11, 0, %s9
312  %a = alloca i1, align 1
313  %a.val = load i1, i1* %a, align 1
314  %a.conv = sext i1 %a.val to i64
315  ret i64 %a.conv
316}
317
318define signext i8 @func42() {
319; CHECK-LABEL: func42:
320; CHECK:       .LBB{{[0-9]+}}_2:
321; CHECK-NEXT:    ld1b.zx %s0, 191(, %s11)
322; CHECK-NEXT:    or %s11, 0, %s9
323  %a = alloca i1, align 1
324  %a.val = load i1, i1* %a, align 1
325  %a.conv = zext i1 %a.val to i8
326  ret i8 %a.conv
327}
328
329define signext i16 @func43() {
330; CHECK-LABEL: func43:
331; CHECK:       .LBB{{[0-9]+}}_2:
332; CHECK-NEXT:    ld1b.zx %s0, 191(, %s11)
333; CHECK-NEXT:    or %s11, 0, %s9
334  %a = alloca i1, align 1
335  %a.val = load i1, i1* %a, align 1
336  %a.conv = zext i1 %a.val to i16
337  ret i16 %a.conv
338}
339
340define signext i32 @func44() {
341; CHECK-LABEL: func44:
342; CHECK:       .LBB{{[0-9]+}}_2:
343; CHECK-NEXT:    ld1b.zx %s0, 191(, %s11)
344; CHECK-NEXT:    or %s11, 0, %s9
345  %a = alloca i1, align 1
346  %a.val = load i1, i1* %a, align 1
347  %a.conv = zext i1 %a.val to i32
348  ret i32 %a.conv
349}
350
351define signext i64 @func45() {
352; CHECK-LABEL: func45:
353; CHECK:       .LBB{{[0-9]+}}_2:
354; CHECK-NEXT:    ld1b.zx %s0, 191(, %s11)
355; CHECK-NEXT:    or %s11, 0, %s9
356  %a = alloca i1, align 1
357  %a.val = load i1, i1* %a, align 1
358  %a.conv = zext i1 %a.val to i64
359  ret i64 %a.conv
360}
361