6
6
7
7
define <16 x i32 > @concat_zext_v8i16_v16i32 (<8 x i16 > %a0 , <8 x i16 > %a1 ) {
8
8
; CHECK-LABEL: @concat_zext_v8i16_v16i32(
9
- ; CHECK-NEXT: [[X0:%.*]] = zext <8 x i16> [[A0:%.*]] to <8 x i32>
10
- ; CHECK-NEXT: [[X1:%.*]] = zext <8 x i16> [[A1:%.*]] to <8 x i32>
11
- ; CHECK-NEXT: [[R:%.*]] = shufflevector <8 x i32> [[X0]], <8 x i32> [[X1]], <16 x i32> <i32 0, i32 1, 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>
9
+ ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <8 x i16> [[A0:%.*]], <8 x i16> [[A1:%.*]], <16 x i32> <i32 0, i32 1, 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>
10
+ ; CHECK-NEXT: [[R:%.*]] = zext <16 x i16> [[TMP1]] to <16 x i32>
12
11
; CHECK-NEXT: ret <16 x i32> [[R]]
13
12
;
14
13
%x0 = zext <8 x i16 > %a0 to <8 x i32 >
@@ -19,9 +18,8 @@ define <16 x i32> @concat_zext_v8i16_v16i32(<8 x i16> %a0, <8 x i16> %a1) {
19
18
20
19
define <16 x i32 > @concat_zext_nneg_v8i16_v16i32 (<8 x i16 > %a0 , <8 x i16 > %a1 ) {
21
20
; CHECK-LABEL: @concat_zext_nneg_v8i16_v16i32(
22
- ; CHECK-NEXT: [[X0:%.*]] = zext nneg <8 x i16> [[A0:%.*]] to <8 x i32>
23
- ; CHECK-NEXT: [[X1:%.*]] = zext nneg <8 x i16> [[A1:%.*]] to <8 x i32>
24
- ; CHECK-NEXT: [[R:%.*]] = shufflevector <8 x i32> [[X0]], <8 x i32> [[X1]], <16 x i32> <i32 0, i32 1, 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>
21
+ ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <8 x i16> [[A0:%.*]], <8 x i16> [[A1:%.*]], <16 x i32> <i32 0, i32 1, 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>
22
+ ; CHECK-NEXT: [[R:%.*]] = zext nneg <16 x i16> [[TMP1]] to <16 x i32>
25
23
; CHECK-NEXT: ret <16 x i32> [[R]]
26
24
;
27
25
%x0 = zext nneg <8 x i16 > %a0 to <8 x i32 >
@@ -30,13 +28,17 @@ define <16 x i32> @concat_zext_nneg_v8i16_v16i32(<8 x i16> %a0, <8 x i16> %a1) {
30
28
ret <16 x i32 > %r
31
29
}
32
30
33
- ; TODO - sext + zext nneg -> sext
34
31
define <16 x i32 > @concat_sext_zext_nneg_v8i16_v8i32 (<8 x i16 > %a0 , <8 x i16 > %a1 ) {
35
- ; CHECK-LABEL: @concat_sext_zext_nneg_v8i16_v8i32(
36
- ; CHECK-NEXT: [[X0:%.*]] = sext <8 x i16> [[A0:%.*]] to <8 x i32>
37
- ; CHECK-NEXT: [[X1:%.*]] = zext nneg <8 x i16> [[A1:%.*]] to <8 x i32>
38
- ; CHECK-NEXT: [[R:%.*]] = shufflevector <8 x i32> [[X0]], <8 x i32> [[X1]], <16 x i32> <i32 0, i32 1, 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>
39
- ; CHECK-NEXT: ret <16 x i32> [[R]]
32
+ ; SSE-LABEL: @concat_sext_zext_nneg_v8i16_v8i32(
33
+ ; SSE-NEXT: [[X0:%.*]] = sext <8 x i16> [[A0:%.*]] to <8 x i32>
34
+ ; SSE-NEXT: [[X1:%.*]] = zext nneg <8 x i16> [[A1:%.*]] to <8 x i32>
35
+ ; SSE-NEXT: [[R:%.*]] = shufflevector <8 x i32> [[X0]], <8 x i32> [[X1]], <16 x i32> <i32 0, i32 1, 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>
36
+ ; SSE-NEXT: ret <16 x i32> [[R]]
37
+ ;
38
+ ; AVX-LABEL: @concat_sext_zext_nneg_v8i16_v8i32(
39
+ ; AVX-NEXT: [[TMP1:%.*]] = shufflevector <8 x i16> [[A0:%.*]], <8 x i16> [[A1:%.*]], <16 x i32> <i32 0, i32 1, 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>
40
+ ; AVX-NEXT: [[R:%.*]] = sext <16 x i16> [[TMP1]] to <16 x i32>
41
+ ; AVX-NEXT: ret <16 x i32> [[R]]
40
42
;
41
43
%x0 = sext <8 x i16 > %a0 to <8 x i32 >
42
44
%x1 = zext nneg <8 x i16 > %a1 to <8 x i32 >
@@ -46,9 +48,8 @@ define <16 x i32> @concat_sext_zext_nneg_v8i16_v8i32(<8 x i16> %a0, <8 x i16> %a
46
48
47
49
define <16 x i32 > @concat_sext_v8i16_v16i32 (<8 x i16 > %a0 , <8 x i16 > %a1 ) {
48
50
; CHECK-LABEL: @concat_sext_v8i16_v16i32(
49
- ; CHECK-NEXT: [[X0:%.*]] = sext <8 x i16> [[A0:%.*]] to <8 x i32>
50
- ; CHECK-NEXT: [[X1:%.*]] = sext <8 x i16> [[A1:%.*]] to <8 x i32>
51
- ; CHECK-NEXT: [[R:%.*]] = shufflevector <8 x i32> [[X0]], <8 x i32> [[X1]], <16 x i32> <i32 0, i32 1, 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>
51
+ ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <8 x i16> [[A0:%.*]], <8 x i16> [[A1:%.*]], <16 x i32> <i32 0, i32 1, 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>
52
+ ; CHECK-NEXT: [[R:%.*]] = sext <16 x i16> [[TMP1]] to <16 x i32>
52
53
; CHECK-NEXT: ret <16 x i32> [[R]]
53
54
;
54
55
%x0 = sext <8 x i16 > %a0 to <8 x i32 >
@@ -59,9 +60,8 @@ define <16 x i32> @concat_sext_v8i16_v16i32(<8 x i16> %a0, <8 x i16> %a1) {
59
60
60
61
define <8 x i32 > @concat_sext_v4i1_v8i32 (<4 x i1 > %a0 , <4 x i1 > %a1 ) {
61
62
; CHECK-LABEL: @concat_sext_v4i1_v8i32(
62
- ; CHECK-NEXT: [[X0:%.*]] = sext <4 x i1> [[A0:%.*]] to <4 x i32>
63
- ; CHECK-NEXT: [[X1:%.*]] = sext <4 x i1> [[A1:%.*]] to <4 x i32>
64
- ; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x i32> [[X0]], <4 x i32> [[X1]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
63
+ ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <4 x i1> [[A0:%.*]], <4 x i1> [[A1:%.*]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
64
+ ; CHECK-NEXT: [[R:%.*]] = sext <8 x i1> [[TMP1]] to <8 x i32>
65
65
; CHECK-NEXT: ret <8 x i32> [[R]]
66
66
;
67
67
%x0 = sext <4 x i1 > %a0 to <4 x i32 >
@@ -72,9 +72,8 @@ define <8 x i32> @concat_sext_v4i1_v8i32(<4 x i1> %a0, <4 x i1> %a1) {
72
72
73
73
define <8 x i16 > @concat_trunc_v4i32_v8i16 (<4 x i32 > %a0 , <4 x i32 > %a1 ) {
74
74
; CHECK-LABEL: @concat_trunc_v4i32_v8i16(
75
- ; CHECK-NEXT: [[X0:%.*]] = trunc <4 x i32> [[A0:%.*]] to <4 x i16>
76
- ; CHECK-NEXT: [[X1:%.*]] = trunc <4 x i32> [[A1:%.*]] to <4 x i16>
77
- ; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x i16> [[X0]], <4 x i16> [[X1]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
75
+ ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <4 x i32> [[A0:%.*]], <4 x i32> [[A1:%.*]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
76
+ ; CHECK-NEXT: [[R:%.*]] = trunc <8 x i32> [[TMP1]] to <8 x i16>
78
77
; CHECK-NEXT: ret <8 x i16> [[R]]
79
78
;
80
79
%x0 = trunc <4 x i32 > %a0 to <4 x i16 >
@@ -85,9 +84,8 @@ define <8 x i16> @concat_trunc_v4i32_v8i16(<4 x i32> %a0, <4 x i32> %a1) {
85
84
86
85
define <8 x ptr > @concat_inttoptr_v4i32_v8iptr (<4 x i32 > %a0 , <4 x i32 > %a1 ) {
87
86
; CHECK-LABEL: @concat_inttoptr_v4i32_v8iptr(
88
- ; CHECK-NEXT: [[X0:%.*]] = inttoptr <4 x i32> [[A0:%.*]] to <4 x ptr>
89
- ; CHECK-NEXT: [[X1:%.*]] = inttoptr <4 x i32> [[A1:%.*]] to <4 x ptr>
90
- ; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x ptr> [[X0]], <4 x ptr> [[X1]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
87
+ ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <4 x i32> [[A0:%.*]], <4 x i32> [[A1:%.*]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
88
+ ; CHECK-NEXT: [[R:%.*]] = inttoptr <8 x i32> [[TMP1]] to <8 x ptr>
91
89
; CHECK-NEXT: ret <8 x ptr> [[R]]
92
90
;
93
91
%x0 = inttoptr <4 x i32 > %a0 to <4 x ptr >
@@ -98,9 +96,8 @@ define <8 x ptr> @concat_inttoptr_v4i32_v8iptr(<4 x i32> %a0, <4 x i32> %a1) {
98
96
99
97
define <16 x i64 > @concat_ptrtoint_v8i16_v16i32 (<8 x ptr > %a0 , <8 x ptr > %a1 ) {
100
98
; CHECK-LABEL: @concat_ptrtoint_v8i16_v16i32(
101
- ; CHECK-NEXT: [[X0:%.*]] = ptrtoint <8 x ptr> [[A0:%.*]] to <8 x i64>
102
- ; CHECK-NEXT: [[X1:%.*]] = ptrtoint <8 x ptr> [[A1:%.*]] to <8 x i64>
103
- ; CHECK-NEXT: [[R:%.*]] = shufflevector <8 x i64> [[X0]], <8 x i64> [[X1]], <16 x i32> <i32 0, i32 1, 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>
99
+ ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <8 x ptr> [[A0:%.*]], <8 x ptr> [[A1:%.*]], <16 x i32> <i32 0, i32 1, 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>
100
+ ; CHECK-NEXT: [[R:%.*]] = ptrtoint <16 x ptr> [[TMP1]] to <16 x i64>
104
101
; CHECK-NEXT: ret <16 x i64> [[R]]
105
102
;
106
103
%x0 = ptrtoint <8 x ptr > %a0 to <8 x i64 >
@@ -110,11 +107,16 @@ define <16 x i64> @concat_ptrtoint_v8i16_v16i32(<8 x ptr> %a0, <8 x ptr> %a1) {
110
107
}
111
108
112
109
define <8 x double > @concat_fpext_v4f32_v8f64 (<4 x float > %a0 , <4 x float > %a1 ) {
113
- ; CHECK-LABEL: @concat_fpext_v4f32_v8f64(
114
- ; CHECK-NEXT: [[X0:%.*]] = fpext <4 x float> [[A0:%.*]] to <4 x double>
115
- ; CHECK-NEXT: [[X1:%.*]] = fpext <4 x float> [[A1:%.*]] to <4 x double>
116
- ; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x double> [[X0]], <4 x double> [[X1]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
117
- ; CHECK-NEXT: ret <8 x double> [[R]]
110
+ ; SSE-LABEL: @concat_fpext_v4f32_v8f64(
111
+ ; SSE-NEXT: [[TMP1:%.*]] = shufflevector <4 x float> [[A0:%.*]], <4 x float> [[A1:%.*]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
112
+ ; SSE-NEXT: [[R:%.*]] = fpext <8 x float> [[TMP1]] to <8 x double>
113
+ ; SSE-NEXT: ret <8 x double> [[R]]
114
+ ;
115
+ ; AVX-LABEL: @concat_fpext_v4f32_v8f64(
116
+ ; AVX-NEXT: [[X0:%.*]] = fpext <4 x float> [[A0:%.*]] to <4 x double>
117
+ ; AVX-NEXT: [[X1:%.*]] = fpext <4 x float> [[A1:%.*]] to <4 x double>
118
+ ; AVX-NEXT: [[R:%.*]] = shufflevector <4 x double> [[X0]], <4 x double> [[X1]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
119
+ ; AVX-NEXT: ret <8 x double> [[R]]
118
120
;
119
121
%x0 = fpext <4 x float > %a0 to <4 x double >
120
122
%x1 = fpext <4 x float > %a1 to <4 x double >
@@ -139,9 +141,8 @@ define <16 x float> @concat_fptrunc_v8f64_v16f32(<8 x double> %a0, <8 x double>
139
141
140
142
define <16 x i32 > @rconcat_sext_v8i16_v16i32 (<8 x i16 > %a0 , <8 x i16 > %a1 ) {
141
143
; CHECK-LABEL: @rconcat_sext_v8i16_v16i32(
142
- ; CHECK-NEXT: [[X0:%.*]] = sext <8 x i16> [[A0:%.*]] to <8 x i32>
143
- ; CHECK-NEXT: [[X1:%.*]] = sext <8 x i16> [[A1:%.*]] to <8 x i32>
144
- ; CHECK-NEXT: [[R:%.*]] = shufflevector <8 x i32> [[X0]], <8 x i32> [[X1]], <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
144
+ ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <8 x i16> [[A0:%.*]], <8 x i16> [[A1:%.*]], <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
145
+ ; CHECK-NEXT: [[R:%.*]] = sext <16 x i16> [[TMP1]] to <16 x i32>
145
146
; CHECK-NEXT: ret <16 x i32> [[R]]
146
147
;
147
148
%x0 = sext <8 x i16 > %a0 to <8 x i32 >
@@ -154,9 +155,8 @@ define <16 x i32> @rconcat_sext_v8i16_v16i32(<8 x i16> %a0, <8 x i16> %a1) {
154
155
155
156
define <8 x double > @interleave_fpext_v4f32_v8f64 (<4 x float > %a0 , <4 x float > %a1 ) {
156
157
; CHECK-LABEL: @interleave_fpext_v4f32_v8f64(
157
- ; CHECK-NEXT: [[X0:%.*]] = fpext <4 x float> [[A0:%.*]] to <4 x double>
158
- ; CHECK-NEXT: [[X1:%.*]] = fpext <4 x float> [[A1:%.*]] to <4 x double>
159
- ; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x double> [[X0]], <4 x double> [[X1]], <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>
158
+ ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <4 x float> [[A0:%.*]], <4 x float> [[A1:%.*]], <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>
159
+ ; CHECK-NEXT: [[R:%.*]] = fpext <8 x float> [[TMP1]] to <8 x double>
160
160
; CHECK-NEXT: ret <8 x double> [[R]]
161
161
;
162
162
%x0 = fpext <4 x float > %a0 to <4 x double >
@@ -226,6 +226,3 @@ define <16 x i32> @concat_sext_zext_v8i16_v16i32(<8 x i16> %a0, <8 x i16> %a1) {
226
226
%r = shufflevector <8 x i32 > %x0 , <8 x i32 > %x1 , <16 x i32 > <i32 0 , i32 1 , 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 >
227
227
ret <16 x i32 > %r
228
228
}
229
- ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
230
- ; AVX: {{.*}}
231
- ; SSE: {{.*}}
0 commit comments