@@ -7,35 +7,31 @@ declare <16 x i8> @llvm.wasm.swizzle(<16 x i8>, <16 x i8>)
77declare <16 x i8 > @llvm.wasm.relaxed.swizzle (<16 x i8 >, <16 x i8 >)
88
99; Identity swizzle pattern
10- ; TODO: Should simplify to nothing.
1110define <16 x i8 > @swizzle_identity (<16 x i8 > %v ) {
1211; CHECK-LABEL: define <16 x i8> @swizzle_identity(
1312; CHECK-SAME: <16 x i8> [[V:%.*]]) {
14- ; CHECK-NEXT: [[RESULT:%.*]] = tail call <16 x i8> @llvm.wasm.swizzle(<16 x i8> [[V]], <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>)
15- ; CHECK-NEXT: ret <16 x i8> [[RESULT]]
13+ ; CHECK-NEXT: ret <16 x i8> [[V]]
1614;
1715 %result = tail call <16 x i8 > @llvm.wasm.swizzle (<16 x i8 > %v , <16 x i8 > <i8 0 , i8 1 , i8 2 , i8 3 , i8 4 , i8 5 , i8 6 , i8 7 , i8 8 , i8 9 , i8 10 , i8 11 , i8 12 , i8 13 , i8 14 , i8 15 >)
1816 ret <16 x i8 > %result
1917}
2018
2119; Reverse swizzle pattern
22- ; TODO: Should simplify to shufflevector.
2320define <16 x i8 > @swizzle_reverse (<16 x i8 > %v ) {
2421; CHECK-LABEL: define <16 x i8> @swizzle_reverse(
2522; CHECK-SAME: <16 x i8> [[V:%.*]]) {
26- ; CHECK-NEXT: [[RESULT:%.*]] = tail call <16 x i8> @llvm.wasm.swizzle( <16 x i8> [[V]] , <16 x i8 > <i8 15, i8 14, i8 13, i8 12, i8 11, i8 10, i8 9, i8 8, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>)
23+ ; CHECK-NEXT: [[RESULT:%.*]] = shufflevector <16 x i8> [[V]], <16 x i8> poison , <16 x i32 > <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
2724; CHECK-NEXT: ret <16 x i8> [[RESULT]]
2825;
2926 %result = tail call <16 x i8 > @llvm.wasm.swizzle (<16 x i8 > %v , <16 x i8 > <i8 15 , i8 14 , i8 13 , i8 12 , i8 11 , i8 10 , i8 9 , i8 8 , i8 7 , i8 6 , i8 5 , i8 4 , i8 3 , i8 2 , i8 1 , i8 0 >)
3027 ret <16 x i8 > %result
3128}
3229
3330; undef elements
34- ; TODO: Should simplify to shufflevector.
3531define <16 x i8 > @swizzle_with_undef (<16 x i8 > %v ) {
3632; CHECK-LABEL: define <16 x i8> @swizzle_with_undef(
3733; CHECK-SAME: <16 x i8> [[V:%.*]]) {
38- ; CHECK-NEXT: [[RESULT:%.*]] = tail call <16 x i8> @llvm.wasm.swizzle( <16 x i8> [[V]] , <16 x i8 > <i8 0, i8 undef, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>)
34+ ; CHECK-NEXT: [[RESULT:%.*]] = shufflevector <16 x i8> [[V]], <16 x i8> poison , <16 x i32 > <i32 0, i32 poison, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
3935; CHECK-NEXT: ret <16 x i8> [[RESULT]]
4036;
4137 %result = tail call <16 x i8 > @llvm.wasm.swizzle (<16 x i8 > %v , <16 x i8 > <i8 0 , i8 undef , i8 2 , i8 3 , i8 4 , i8 5 , i8 6 , i8 7 , i8 8 , i8 9 , i8 10 , i8 11 , i8 12 , i8 13 , i8 14 , i8 15 >)
@@ -54,59 +50,53 @@ define <16 x i8> @swizzle_non_constant(<16 x i8> %v, <16 x i8> %mask) {
5450}
5551
5652; Out-of-bounds index, otherwise identity pattern
57- ; TODO: Should simplify to insertelement.
5853define <16 x i8 > @swizzle_out_of_bounds_1 (<16 x i8 > %v ) {
5954; CHECK-LABEL: define <16 x i8> @swizzle_out_of_bounds_1(
6055; CHECK-SAME: <16 x i8> [[V:%.*]]) {
61- ; CHECK-NEXT: [[RESULT:%.*]] = tail call <16 x i8> @llvm.wasm.swizzle(<16 x i8> [[V]], <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 16>)
56+ ; CHECK-NEXT: [[RESULT:%.*]] = insertelement <16 x i8> [[V]], i8 0, i64 15
6257; CHECK-NEXT: ret <16 x i8> [[RESULT]]
6358;
6459 %result = tail call <16 x i8 > @llvm.wasm.swizzle (<16 x i8 > %v , <16 x i8 > <i8 0 , i8 1 , i8 2 , i8 3 , i8 4 , i8 5 , i8 6 , i8 7 , i8 8 , i8 9 , i8 10 , i8 11 , i8 12 , i8 13 , i8 14 , i8 16 >)
6560 ret <16 x i8 > %result
6661}
6762
6863; Out-of-bounds indices, both negative and positive
69- ; TODO: Should simplify to shufflevector.
7064define <16 x i8 > @swizzle_out_of_bounds_2 (<16 x i8 > %v ) {
7165; CHECK-LABEL: define <16 x i8> @swizzle_out_of_bounds_2(
7266; CHECK-SAME: <16 x i8> [[V:%.*]]) {
73- ; CHECK-NEXT: [[RESULT:%.*]] = tail call <16 x i8> @llvm.wasm.swizzle(<16 x i8> [[V]], <16 x i8> <i8 99 , i8 -1 , i8 13 , i8 12 , i8 11 , i8 10 , i8 9 , i8 8 , i8 7 , i8 6 , i8 5 , i8 4 , i8 3 , i8 2 , i8 1 , i8 0>)
67+ ; CHECK-NEXT: [[RESULT:%.*]] = shufflevector <16 x i8> [[V]], <16 x i8> <i8 0 , i8 poison , i8 poison , i8 poison , i8 poison , i8 poison , i8 poison , i8 poison , i8 poison , i8 poison , i8 poison , i8 poison , i8 poison , i8 poison , i8 poison , i8 poison>, <16 x i32> <i32 16, i32 16, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
7468; CHECK-NEXT: ret <16 x i8> [[RESULT]]
7569;
7670 %result = tail call <16 x i8 > @llvm.wasm.swizzle (<16 x i8 > %v , <16 x i8 > <i8 99 , i8 -1 , i8 13 , i8 12 , i8 11 , i8 10 , i8 9 , i8 8 , i8 7 , i8 6 , i8 5 , i8 4 , i8 3 , i8 2 , i8 1 , i8 0 >)
7771 ret <16 x i8 > %result
7872}
7973
8074; Identity swizzle pattern (relaxed_swizzle)
81- ; TODO: Should simplify to nothing.
8275define <16 x i8 > @relaxed_swizzle_identity (<16 x i8 > %v ) {
8376; CHECK-LABEL: define <16 x i8> @relaxed_swizzle_identity(
8477; CHECK-SAME: <16 x i8> [[V:%.*]]) {
85- ; CHECK-NEXT: [[RESULT:%.*]] = tail call <16 x i8> @llvm.wasm.relaxed.swizzle(<16 x i8> [[V]], <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>)
86- ; CHECK-NEXT: ret <16 x i8> [[RESULT]]
78+ ; CHECK-NEXT: ret <16 x i8> [[V]]
8779;
8880 %result = tail call <16 x i8 > @llvm.wasm.relaxed.swizzle (<16 x i8 > %v , <16 x i8 > <i8 0 , i8 1 , i8 2 , i8 3 , i8 4 , i8 5 , i8 6 , i8 7 , i8 8 , i8 9 , i8 10 , i8 11 , i8 12 , i8 13 , i8 14 , i8 15 >)
8981 ret <16 x i8 > %result
9082}
9183
9284; Reverse swizzle pattern (relaxed_swizzle)
93- ; TODO: Should simplify to shufflevector.
9485define <16 x i8 > @relaxed_swizzle_reverse (<16 x i8 > %v ) {
9586; CHECK-LABEL: define <16 x i8> @relaxed_swizzle_reverse(
9687; CHECK-SAME: <16 x i8> [[V:%.*]]) {
97- ; CHECK-NEXT: [[RESULT:%.*]] = tail call <16 x i8> @llvm.wasm.relaxed.swizzle( <16 x i8> [[V]] , <16 x i8 > <i8 15, i8 14, i8 13, i8 12, i8 11, i8 10, i8 9, i8 8, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>)
88+ ; CHECK-NEXT: [[RESULT:%.*]] = shufflevector <16 x i8> [[V]], <16 x i8> poison , <16 x i32 > <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
9889; CHECK-NEXT: ret <16 x i8> [[RESULT]]
9990;
10091 %result = tail call <16 x i8 > @llvm.wasm.relaxed.swizzle (<16 x i8 > %v , <16 x i8 > <i8 15 , i8 14 , i8 13 , i8 12 , i8 11 , i8 10 , i8 9 , i8 8 , i8 7 , i8 6 , i8 5 , i8 4 , i8 3 , i8 2 , i8 1 , i8 0 >)
10192 ret <16 x i8 > %result
10293}
10394
10495; Out-of-bounds index, only negative (relaxed_swizzle)
105- ; TODO: Should simplify to shufflevector.
10696define <16 x i8 > @relaxed_swizzle_out_of_bounds (<16 x i8 > %v ) {
10797; CHECK-LABEL: define <16 x i8> @relaxed_swizzle_out_of_bounds(
10898; CHECK-SAME: <16 x i8> [[V:%.*]]) {
109- ; CHECK-NEXT: [[RESULT:%.*]] = tail call <16 x i8> @llvm.wasm.relaxed.swizzle(<16 x i8> [[V]], <16 x i8> <i8 -99 , i8 -1 , i8 13 , i8 12 , i8 11 , i8 10 , i8 9 , i8 8 , i8 7 , i8 6 , i8 5 , i8 4 , i8 3 , i8 2 , i8 1 , i8 0>)
99+ ; CHECK-NEXT: [[RESULT:%.*]] = shufflevector <16 x i8> [[V]], <16 x i8> <i8 0 , i8 poison , i8 poison , i8 poison , i8 poison , i8 poison , i8 poison , i8 poison , i8 poison , i8 poison , i8 poison , i8 poison , i8 poison , i8 poison , i8 poison , i8 poison>, <16 x i32> <i32 16, i32 16, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
110100; CHECK-NEXT: ret <16 x i8> [[RESULT]]
111101;
112102 %result = tail call <16 x i8 > @llvm.wasm.relaxed.swizzle (<16 x i8 > %v , <16 x i8 > <i8 -99 , i8 -1 , i8 13 , i8 12 , i8 11 , i8 10 , i8 9 , i8 8 , i8 7 , i8 6 , i8 5 , i8 4 , i8 3 , i8 2 , i8 1 , i8 0 >)
0 commit comments