@@ -47,17 +47,13 @@ define <2 x i64> @shuffle_32_add_8_shuffle_32_masks_are_eq(<2 x i64> %v) {
47
47
ret <2 x i64 > %bc5
48
48
}
49
49
50
- ; TODO: Eliminate redundant shuffles
50
+ ; Eliminate redundant shuffles
51
51
52
52
define <2 x i64 > @shuffle_8_add_32_shuffle_8_masks_are_eq (<2 x i64 > %v ) {
53
53
; CHECK-LABEL: @shuffle_8_add_32_shuffle_8_masks_are_eq(
54
- ; CHECK-NEXT: [[BC0:%.*]] = bitcast <2 x i64> [[V:%.*]] to <16 x i8>
55
- ; CHECK-NEXT: [[SHUFFLE:%.*]] = shufflevector <16 x i8> [[BC0]], <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
56
- ; CHECK-NEXT: [[BC2:%.*]] = bitcast <16 x i8> [[SHUFFLE]] to <4 x i32>
57
- ; CHECK-NEXT: [[ADD_I:%.*]] = shl <4 x i32> [[BC2]], <i32 1, i32 1, i32 1, i32 1>
58
- ; CHECK-NEXT: [[BC4:%.*]] = bitcast <4 x i32> [[ADD_I]] to <16 x i8>
59
- ; CHECK-NEXT: [[SHUFFLE4:%.*]] = shufflevector <16 x i8> [[BC4]], <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
60
- ; CHECK-NEXT: [[BC5:%.*]] = bitcast <16 x i8> [[SHUFFLE4]] to <2 x i64>
54
+ ; CHECK-NEXT: [[TMP1:%.*]] = bitcast <2 x i64> [[V:%.*]] to <4 x i32>
55
+ ; CHECK-NEXT: [[TMP2:%.*]] = shl <4 x i32> [[TMP1]], <i32 1, i32 1, i32 1, i32 1>
56
+ ; CHECK-NEXT: [[BC5:%.*]] = bitcast <4 x i32> [[TMP2]] to <2 x i64>
61
57
; CHECK-NEXT: ret <2 x i64> [[BC5]]
62
58
;
63
59
%bc0 = bitcast <2 x i64 > %v to <16 x i8 >
@@ -126,15 +122,14 @@ define <16 x i8> @shuffle_16_add_8_masks_are_eq(<8 x i16> %v1, <8 x i16> %v2) {
126
122
ret <16 x i8 > %add
127
123
}
128
124
129
- ; TODO: Sink single shuffle.
125
+ ; Sink single shuffle.
130
126
131
127
define <4 x i32 > @shuffle_16_add_32_masks_are_eq_and_can_be_converted_up (<8 x i16 > %v1 , <8 x i16 > %v2 ) {
132
128
; CHECK-LABEL: @shuffle_16_add_32_masks_are_eq_and_can_be_converted_up(
133
- ; CHECK-NEXT: [[SHUFFLE1:%.*]] = shufflevector <8 x i16> [[V1:%.*]], <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3>
134
- ; CHECK-NEXT: [[SHUFFLE2:%.*]] = shufflevector <8 x i16> [[V2:%.*]], <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3>
135
- ; CHECK-NEXT: [[BC1:%.*]] = bitcast <8 x i16> [[SHUFFLE1]] to <4 x i32>
136
- ; CHECK-NEXT: [[BC2:%.*]] = bitcast <8 x i16> [[SHUFFLE2]] to <4 x i32>
137
- ; CHECK-NEXT: [[ADD:%.*]] = add <4 x i32> [[BC2]], [[BC1]]
129
+ ; CHECK-NEXT: [[TMP1:%.*]] = bitcast <8 x i16> [[V1:%.*]] to <4 x i32>
130
+ ; CHECK-NEXT: [[TMP2:%.*]] = bitcast <8 x i16> [[V2:%.*]] to <4 x i32>
131
+ ; CHECK-NEXT: [[TMP3:%.*]] = add <4 x i32> [[TMP2]], [[TMP1]]
132
+ ; CHECK-NEXT: [[ADD:%.*]] = shufflevector <4 x i32> [[TMP3]], <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 0, i32 1>
138
133
; CHECK-NEXT: ret <4 x i32> [[ADD]]
139
134
;
140
135
%shuffle1 = shufflevector <8 x i16 > %v1 , <8 x i16 > undef , <8 x i32 > <i32 4 , i32 5 , i32 6 , i32 7 , i32 0 , i32 1 , i32 2 , i32 3 >
@@ -145,15 +140,14 @@ define <4 x i32> @shuffle_16_add_32_masks_are_eq_and_can_be_converted_up(<8 x i1
145
140
ret <4 x i32 > %add
146
141
}
147
142
148
- ; TODO: Sink single shuffle.
143
+ ; Sink single shuffle.
149
144
150
145
define <4 x i32 > @shuffle_8_add_32_masks_are_eq_and_can_be_converted_up (<16 x i8 > %v1 , <16 x i8 > %v2 ) {
151
146
; CHECK-LABEL: @shuffle_8_add_32_masks_are_eq_and_can_be_converted_up(
152
- ; CHECK-NEXT: [[SHUFFLE1:%.*]] = shufflevector <16 x i8> [[V1:%.*]], <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
153
- ; CHECK-NEXT: [[SHUFFLE2:%.*]] = shufflevector <16 x i8> [[V2:%.*]], <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
154
- ; CHECK-NEXT: [[BC1:%.*]] = bitcast <16 x i8> [[SHUFFLE1]] to <4 x i32>
155
- ; CHECK-NEXT: [[BC2:%.*]] = bitcast <16 x i8> [[SHUFFLE2]] to <4 x i32>
156
- ; CHECK-NEXT: [[ADD:%.*]] = add <4 x i32> [[BC2]], [[BC1]]
147
+ ; CHECK-NEXT: [[TMP1:%.*]] = bitcast <16 x i8> [[V1:%.*]] to <4 x i32>
148
+ ; CHECK-NEXT: [[TMP2:%.*]] = bitcast <16 x i8> [[V2:%.*]] to <4 x i32>
149
+ ; CHECK-NEXT: [[TMP3:%.*]] = add <4 x i32> [[TMP2]], [[TMP1]]
150
+ ; CHECK-NEXT: [[ADD:%.*]] = shufflevector <4 x i32> [[TMP3]], <4 x i32> undef, <4 x i32> <i32 1, i32 0, i32 2, i32 3>
157
151
; CHECK-NEXT: ret <4 x i32> [[ADD]]
158
152
;
159
153
%shuffle1 = shufflevector <16 x i8 > %v1 , <16 x i8 > undef , <16 x i32 > <i32 4 , i32 5 , i32 6 , i32 7 , i32 0 , i32 1 , i32 2 , i32 3 , i32 8 , i32 9 , i32 10 , i32 11 , i32 12 , i32 13 , i32 14 , i32 15 >
@@ -229,13 +223,13 @@ define <16 x i8> @shuffle_32_bitcast_8_shuffle_8_can_not_be_converted_up(<4 x i3
229
223
}
230
224
231
225
; shuffle<4 x i32>( bitcast<4 x i32>( shuffle<16 x i8>(v)))
232
- ; TODO: Narrow, squash shuffles, and widen type ?
226
+ ; TODO: squash shuffles?
233
227
234
228
define <4 x i32 > @shuffle_8_bitcast_32_shuffle_32_can_be_converted_up (<16 x i8 > %v1 ) {
235
229
; CHECK-LABEL: @shuffle_8_bitcast_32_shuffle_32_can_be_converted_up(
236
- ; CHECK-NEXT: [[SHUFFLE1 :%.*]] = shufflevector <16 x i8> [[V1:%.*]], <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3 >
237
- ; CHECK-NEXT: [[BC1 :%.*]] = bitcast <16 x i8 > [[SHUFFLE1]] to <4 x i32>
238
- ; CHECK-NEXT: [[SHUFFLE2:%.*]] = shufflevector <4 x i32> [[BC1 ]], <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0>
230
+ ; CHECK-NEXT: [[TMP1 :%.*]] = bitcast <16 x i8> [[V1:%.*]] to <4 x i32>
231
+ ; CHECK-NEXT: [[TMP2 :%.*]] = shufflevector <4 x i32 > [[TMP1]], <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0 >
232
+ ; CHECK-NEXT: [[SHUFFLE2:%.*]] = shufflevector <4 x i32> [[TMP2 ]], <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0>
239
233
; CHECK-NEXT: ret <4 x i32> [[SHUFFLE2]]
240
234
;
241
235
%shuffle1 = shufflevector <16 x i8 > %v1 , <16 x i8 > undef , <16 x i32 > <i32 8 , i32 9 , i32 10 , i32 11 , i32 12 , i32 13 , i32 14 , i32 15 , i32 4 , i32 5 , i32 6 , i32 7 , i32 0 , i32 1 , i32 2 , i32 3 >
@@ -245,13 +239,13 @@ define <4 x i32> @shuffle_8_bitcast_32_shuffle_32_can_be_converted_up(<16 x i8>
245
239
}
246
240
247
241
; shuffle<4 x i32>( bitcast<4 x i32>( shuffle<8 x i16>(v)))
248
- ; TODO: Narrow, squash shuffles, and widen type ?
242
+ ; TODO: squash shuffles?
249
243
250
244
define <4 x i32 > @shuffle_16_bitcast_32_shuffle_32_can_be_converted_up (<8 x i16 > %v1 ) {
251
245
; CHECK-LABEL: @shuffle_16_bitcast_32_shuffle_32_can_be_converted_up(
252
- ; CHECK-NEXT: [[SHUFFLE1 :%.*]] = shufflevector <8 x i16> [[V1:%.*]], <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 2, i32 3, i32 0, i32 1 >
253
- ; CHECK-NEXT: [[BC1 :%.*]] = bitcast <8 x i16 > [[SHUFFLE1]] to <4 x i32>
254
- ; CHECK-NEXT: [[SHUFFLE2:%.*]] = shufflevector <4 x i32> [[BC1 ]], <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0>
246
+ ; CHECK-NEXT: [[TMP1 :%.*]] = bitcast <8 x i16> [[V1:%.*]] to <4 x i32>
247
+ ; CHECK-NEXT: [[TMP2 :%.*]] = shufflevector <4 x i32 > [[TMP1]], <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0 >
248
+ ; CHECK-NEXT: [[SHUFFLE2:%.*]] = shufflevector <4 x i32> [[TMP2 ]], <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0>
255
249
; CHECK-NEXT: ret <4 x i32> [[SHUFFLE2]]
256
250
;
257
251
%shuffle1 = shufflevector <8 x i16 > %v1 , <8 x i16 > undef , <8 x i32 > <i32 4 , i32 5 , i32 6 , i32 7 , i32 2 , i32 3 , i32 0 , i32 1 >
@@ -293,13 +287,13 @@ define <4 x i32> @shuffle_16_bitcast_32_shuffle_32_can_not_be_converted_up(<8 x
293
287
}
294
288
295
289
; shuffle<8 x i16>( bitcast<8 x i16>( shuffle<16 x i8>(v)))
296
- ; TODO: Narrow, squash shuffles, and widen type?
290
+ ; TODO: squash shuffles and widen type?
297
291
298
292
define <8 x i16 > @shuffle_8_bitcast_16_shuffle_16_can__be_converted_up (<16 x i8 > %v1 ) {
299
293
; CHECK-LABEL: @shuffle_8_bitcast_16_shuffle_16_can__be_converted_up(
300
- ; CHECK-NEXT: [[SHUFFLE1 :%.*]] = shufflevector <16 x i8> [[V1:%.*]], <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3 >
301
- ; CHECK-NEXT: [[BC1 :%.*]] = bitcast <16 x i8 > [[SHUFFLE1]] to <8 x i16>
302
- ; CHECK-NEXT: [[SHUFFLE2:%.*]] = shufflevector <8 x i16> [[BC1 ]], <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 2, i32 3, i32 0, i32 1>
294
+ ; CHECK-NEXT: [[TMP1 :%.*]] = bitcast <16 x i8> [[V1:%.*]] to <8 x i16 >
295
+ ; CHECK-NEXT: [[TMP2 :%.*]] = shufflevector <8 x i16 > [[TMP1]], <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 2, i32 3, i32 0, i32 1 >
296
+ ; CHECK-NEXT: [[SHUFFLE2:%.*]] = shufflevector <8 x i16> [[TMP2 ]], <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 2, i32 3, i32 0, i32 1>
303
297
; CHECK-NEXT: ret <8 x i16> [[SHUFFLE2]]
304
298
;
305
299
%shuffle1 = shufflevector <16 x i8 > %v1 , <16 x i8 > undef , <16 x i32 > <i32 8 , i32 9 , i32 10 , i32 11 , i32 12 , i32 13 , i32 14 , i32 15 , i32 4 , i32 5 , i32 6 , i32 7 , i32 0 , i32 1 , i32 2 , i32 3 >
0 commit comments