@@ -11,12 +11,8 @@ define <4 x i32> @load_i32_zext_to_v4i32(ptr %di) {
11
11
; CHECK-LABEL: define <4 x i32> @load_i32_zext_to_v4i32(
12
12
; CHECK-SAME: ptr [[DI:%.*]]) {
13
13
; CHECK-NEXT: [[ENTRY:.*:]]
14
- ; CHECK-NEXT: [[L:%.*]] = load i32, ptr [[DI]], align 4
15
- ; CHECK-NEXT: [[VEC_INS:%.*]] = insertelement <2 x i32> <i32 poison, i32 0>, i32 [[L]], i64 0
16
- ; CHECK-NEXT: [[VEC_BC:%.*]] = bitcast <2 x i32> [[VEC_INS]] to <8 x i8>
17
- ; CHECK-NEXT: [[E_1:%.*]] = zext <8 x i8> [[VEC_BC]] to <8 x i16>
18
- ; CHECK-NEXT: [[VEC_SHUFFLE:%.*]] = shufflevector <8 x i16> [[E_1]], <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
19
- ; CHECK-NEXT: [[EXT_2:%.*]] = zext nneg <4 x i16> [[VEC_SHUFFLE]] to <4 x i32>
14
+ ; CHECK-NEXT: [[L_VEC:%.*]] = load <4 x i8>, ptr [[DI]], align 4
15
+ ; CHECK-NEXT: [[EXT_2:%.*]] = zext <4 x i8> [[L_VEC]] to <4 x i32>
20
16
; CHECK-NEXT: ret <4 x i32> [[EXT_2]]
21
17
;
22
18
entry:
@@ -33,12 +29,8 @@ define <4 x i32> @load_i32_zext_to_v4i32_both_nneg(ptr %di) {
33
29
; CHECK-LABEL: define <4 x i32> @load_i32_zext_to_v4i32_both_nneg(
34
30
; CHECK-SAME: ptr [[DI:%.*]]) {
35
31
; CHECK-NEXT: [[ENTRY:.*:]]
36
- ; CHECK-NEXT: [[L:%.*]] = load i32, ptr [[DI]], align 4
37
- ; CHECK-NEXT: [[VEC_INS:%.*]] = insertelement <2 x i32> <i32 poison, i32 0>, i32 [[L]], i64 0
38
- ; CHECK-NEXT: [[VEC_BC:%.*]] = bitcast <2 x i32> [[VEC_INS]] to <8 x i8>
39
- ; CHECK-NEXT: [[E_1:%.*]] = zext nneg <8 x i8> [[VEC_BC]] to <8 x i16>
40
- ; CHECK-NEXT: [[VEC_SHUFFLE:%.*]] = shufflevector <8 x i16> [[E_1]], <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
41
- ; CHECK-NEXT: [[EXT_2:%.*]] = zext nneg <4 x i16> [[VEC_SHUFFLE]] to <4 x i32>
32
+ ; CHECK-NEXT: [[L_VEC:%.*]] = load <4 x i8>, ptr [[DI]], align 4
33
+ ; CHECK-NEXT: [[EXT_2:%.*]] = zext <4 x i8> [[L_VEC]] to <4 x i32>
42
34
; CHECK-NEXT: ret <4 x i32> [[EXT_2]]
43
35
;
44
36
entry:
@@ -55,13 +47,9 @@ define <4 x i32> @load_i32_zext_to_v4i32_clobber_after_load(ptr %di) {
55
47
; CHECK-LABEL: define <4 x i32> @load_i32_zext_to_v4i32_clobber_after_load(
56
48
; CHECK-SAME: ptr [[DI:%.*]]) {
57
49
; CHECK-NEXT: [[ENTRY:.*:]]
58
- ; CHECK-NEXT: [[L:%.*]] = load i32, ptr [[DI]], align 4
50
+ ; CHECK-NEXT: [[L_VEC:%.*]] = load <4 x i8>, ptr [[DI]], align 4
51
+ ; CHECK-NEXT: [[EXT_2:%.*]] = zext <4 x i8> [[L_VEC]] to <4 x i32>
59
52
; CHECK-NEXT: call void @use.i32(i32 0)
60
- ; CHECK-NEXT: [[VEC_INS:%.*]] = insertelement <2 x i32> <i32 poison, i32 0>, i32 [[L]], i64 0
61
- ; CHECK-NEXT: [[VEC_BC:%.*]] = bitcast <2 x i32> [[VEC_INS]] to <8 x i8>
62
- ; CHECK-NEXT: [[E_1:%.*]] = zext <8 x i8> [[VEC_BC]] to <8 x i16>
63
- ; CHECK-NEXT: [[VEC_SHUFFLE:%.*]] = shufflevector <8 x i16> [[E_1]], <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
64
- ; CHECK-NEXT: [[EXT_2:%.*]] = zext nneg <4 x i16> [[VEC_SHUFFLE]] to <4 x i32>
65
53
; CHECK-NEXT: ret <4 x i32> [[EXT_2]]
66
54
;
67
55
entry:
@@ -221,12 +209,8 @@ define <8 x i32> @load_i64_zext_to_v8i32(ptr %di) {
221
209
; CHECK-LABEL: define <8 x i32> @load_i64_zext_to_v8i32(
222
210
; CHECK-SAME: ptr [[DI:%.*]]) {
223
211
; CHECK-NEXT: [[ENTRY:.*:]]
224
- ; CHECK-NEXT: [[L:%.*]] = load i64, ptr [[DI]], align 8
225
- ; CHECK-NEXT: [[VEC_INS:%.*]] = insertelement <2 x i64> <i64 poison, i64 0>, i64 [[L]], i64 0
226
- ; CHECK-NEXT: [[VEC_BC:%.*]] = bitcast <2 x i64> [[VEC_INS]] to <16 x i8>
227
- ; CHECK-NEXT: [[EXT_1:%.*]] = zext <16 x i8> [[VEC_BC]] to <16 x i16>
228
- ; CHECK-NEXT: [[VEC_SHUFFLE:%.*]] = shufflevector <16 x i16> [[EXT_1]], <16 x i16> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
229
- ; CHECK-NEXT: [[OUTER_EXT:%.*]] = zext nneg <8 x i16> [[VEC_SHUFFLE]] to <8 x i32>
212
+ ; CHECK-NEXT: [[L_VEC:%.*]] = load <8 x i8>, ptr [[DI]], align 8
213
+ ; CHECK-NEXT: [[OUTER_EXT:%.*]] = zext <8 x i8> [[L_VEC]] to <8 x i32>
230
214
; CHECK-NEXT: ret <8 x i32> [[OUTER_EXT]]
231
215
;
232
216
entry:
@@ -243,12 +227,8 @@ define <3 x i32> @load_i24_zext_to_v3i32(ptr %di) {
243
227
; CHECK-LABEL: define <3 x i32> @load_i24_zext_to_v3i32(
244
228
; CHECK-SAME: ptr [[DI:%.*]]) {
245
229
; CHECK-NEXT: [[ENTRY:.*:]]
246
- ; CHECK-NEXT: [[L:%.*]] = load i24, ptr [[DI]], align 4
247
- ; CHECK-NEXT: [[VEC_INS:%.*]] = insertelement <2 x i24> <i24 poison, i24 0>, i24 [[L]], i64 0
248
- ; CHECK-NEXT: [[VEC_BC:%.*]] = bitcast <2 x i24> [[VEC_INS]] to <6 x i8>
249
- ; CHECK-NEXT: [[EXT_1:%.*]] = zext <6 x i8> [[VEC_BC]] to <6 x i16>
250
- ; CHECK-NEXT: [[VEC_SHUFFLE:%.*]] = shufflevector <6 x i16> [[EXT_1]], <6 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
251
- ; CHECK-NEXT: [[EXT_2:%.*]] = zext nneg <3 x i16> [[VEC_SHUFFLE]] to <3 x i32>
230
+ ; CHECK-NEXT: [[L_VEC:%.*]] = load <3 x i8>, ptr [[DI]], align 4
231
+ ; CHECK-NEXT: [[EXT_2:%.*]] = zext <3 x i8> [[L_VEC]] to <3 x i32>
252
232
; CHECK-NEXT: ret <3 x i32> [[EXT_2]]
253
233
;
254
234
entry:
@@ -353,12 +333,8 @@ define <4 x i32> @load_i32_sext_to_v4i32(ptr %di) {
353
333
; CHECK-LABEL: define <4 x i32> @load_i32_sext_to_v4i32(
354
334
; CHECK-SAME: ptr [[DI:%.*]]) {
355
335
; CHECK-NEXT: [[ENTRY:.*:]]
356
- ; CHECK-NEXT: [[L:%.*]] = load i32, ptr [[DI]], align 4
357
- ; CHECK-NEXT: [[VEC_INS:%.*]] = insertelement <2 x i32> <i32 poison, i32 0>, i32 [[L]], i64 0
358
- ; CHECK-NEXT: [[VEC_BC:%.*]] = bitcast <2 x i32> [[VEC_INS]] to <8 x i8>
359
- ; CHECK-NEXT: [[E_1:%.*]] = sext <8 x i8> [[VEC_BC]] to <8 x i16>
360
- ; CHECK-NEXT: [[VEC_SHUFFLE:%.*]] = shufflevector <8 x i16> [[E_1]], <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
361
- ; CHECK-NEXT: [[EXT_2:%.*]] = sext <4 x i16> [[VEC_SHUFFLE]] to <4 x i32>
336
+ ; CHECK-NEXT: [[L_VEC:%.*]] = load <4 x i8>, ptr [[DI]], align 4
337
+ ; CHECK-NEXT: [[EXT_2:%.*]] = sext <4 x i8> [[L_VEC]] to <4 x i32>
362
338
; CHECK-NEXT: ret <4 x i32> [[EXT_2]]
363
339
;
364
340
entry:
@@ -375,12 +351,8 @@ define <8 x i32> @load_i64_sext_to_v8i32(ptr %di) {
375
351
; CHECK-LABEL: define <8 x i32> @load_i64_sext_to_v8i32(
376
352
; CHECK-SAME: ptr [[DI:%.*]]) {
377
353
; CHECK-NEXT: [[ENTRY:.*:]]
378
- ; CHECK-NEXT: [[L:%.*]] = load i64, ptr [[DI]], align 8
379
- ; CHECK-NEXT: [[VEC_INS:%.*]] = insertelement <2 x i64> <i64 poison, i64 0>, i64 [[L]], i64 0
380
- ; CHECK-NEXT: [[VEC_BC:%.*]] = bitcast <2 x i64> [[VEC_INS]] to <16 x i8>
381
- ; CHECK-NEXT: [[EXT_1:%.*]] = sext <16 x i8> [[VEC_BC]] to <16 x i16>
382
- ; CHECK-NEXT: [[VEC_SHUFFLE:%.*]] = shufflevector <16 x i16> [[EXT_1]], <16 x i16> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
383
- ; CHECK-NEXT: [[OUTER_EXT:%.*]] = sext <8 x i16> [[VEC_SHUFFLE]] to <8 x i32>
354
+ ; CHECK-NEXT: [[L_VEC:%.*]] = load <8 x i8>, ptr [[DI]], align 8
355
+ ; CHECK-NEXT: [[OUTER_EXT:%.*]] = sext <8 x i8> [[L_VEC]] to <8 x i32>
384
356
; CHECK-NEXT: ret <8 x i32> [[OUTER_EXT]]
385
357
;
386
358
entry:
@@ -397,12 +369,8 @@ define <3 x i32> @load_i24_sext_to_v3i32(ptr %di) {
397
369
; CHECK-LABEL: define <3 x i32> @load_i24_sext_to_v3i32(
398
370
; CHECK-SAME: ptr [[DI:%.*]]) {
399
371
; CHECK-NEXT: [[ENTRY:.*:]]
400
- ; CHECK-NEXT: [[L:%.*]] = load i24, ptr [[DI]], align 4
401
- ; CHECK-NEXT: [[VEC_INS:%.*]] = insertelement <2 x i24> <i24 poison, i24 0>, i24 [[L]], i64 0
402
- ; CHECK-NEXT: [[VEC_BC:%.*]] = bitcast <2 x i24> [[VEC_INS]] to <6 x i8>
403
- ; CHECK-NEXT: [[EXT_1:%.*]] = sext <6 x i8> [[VEC_BC]] to <6 x i16>
404
- ; CHECK-NEXT: [[VEC_SHUFFLE:%.*]] = shufflevector <6 x i16> [[EXT_1]], <6 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
405
- ; CHECK-NEXT: [[EXT_2:%.*]] = sext <3 x i16> [[VEC_SHUFFLE]] to <3 x i32>
372
+ ; CHECK-NEXT: [[L_VEC:%.*]] = load <3 x i8>, ptr [[DI]], align 4
373
+ ; CHECK-NEXT: [[EXT_2:%.*]] = sext <3 x i8> [[L_VEC]] to <3 x i32>
406
374
; CHECK-NEXT: ret <3 x i32> [[EXT_2]]
407
375
;
408
376
entry:
0 commit comments