1
- ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
1
+ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
2
2
; RUN: opt < %s -passes=vector-combine -S -mtriple=x86_64-- -mattr=sse2 | FileCheck %s --check-prefixes=CHECK,SSE
3
3
; RUN: opt < %s -passes=vector-combine -S -mtriple=x86_64-- -mattr=avx2 | FileCheck %s --check-prefixes=CHECK,AVX
4
4
5
5
; standard vector concatenations
6
6
7
7
define <16 x i32 > @concat_zext_v8i16_v16i32 (<8 x i16 > %a0 , <8 x i16 > %a1 ) {
8
- ; CHECK-LABEL: @concat_zext_v8i16_v16i32(
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>
8
+ ; CHECK-LABEL: define <16 x i32> @concat_zext_v8i16_v16i32(
9
+ ; CHECK-SAME: <8 x i16> [[A0:%.*]], <8 x i16> [[A1:%.*]]) #[[ATTR0:[0-9]+]] {
10
+ ; 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
11
; CHECK-NEXT: [[R:%.*]] = zext <16 x i16> [[TMP1]] to <16 x i32>
11
12
; CHECK-NEXT: ret <16 x i32> [[R]]
12
13
;
@@ -17,8 +18,9 @@ define <16 x i32> @concat_zext_v8i16_v16i32(<8 x i16> %a0, <8 x i16> %a1) {
17
18
}
18
19
19
20
define <16 x i32 > @concat_zext_nneg_v8i16_v16i32 (<8 x i16 > %a0 , <8 x i16 > %a1 ) {
20
- ; CHECK-LABEL: @concat_zext_nneg_v8i16_v16i32(
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>
21
+ ; CHECK-LABEL: define <16 x i32> @concat_zext_nneg_v8i16_v16i32(
22
+ ; CHECK-SAME: <8 x i16> [[A0:%.*]], <8 x i16> [[A1:%.*]]) #[[ATTR0]] {
23
+ ; 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
24
; CHECK-NEXT: [[R:%.*]] = zext nneg <16 x i16> [[TMP1]] to <16 x i32>
23
25
; CHECK-NEXT: ret <16 x i32> [[R]]
24
26
;
@@ -29,14 +31,16 @@ define <16 x i32> @concat_zext_nneg_v8i16_v16i32(<8 x i16> %a0, <8 x i16> %a1) {
29
31
}
30
32
31
33
define <16 x i32 > @concat_sext_zext_nneg_v8i16_v8i32 (<8 x i16 > %a0 , <8 x i16 > %a1 ) {
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>
34
+ ; SSE-LABEL: define <16 x i32> @concat_sext_zext_nneg_v8i16_v8i32(
35
+ ; SSE-SAME: <8 x i16> [[A0:%.*]], <8 x i16> [[A1:%.*]]) #[[ATTR0]] {
36
+ ; SSE-NEXT: [[X0:%.*]] = sext <8 x i16> [[A0]] to <8 x i32>
37
+ ; SSE-NEXT: [[X1:%.*]] = zext nneg <8 x i16> [[A1]] to <8 x i32>
35
38
; 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
39
; SSE-NEXT: ret <16 x i32> [[R]]
37
40
;
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>
41
+ ; AVX-LABEL: define <16 x i32> @concat_sext_zext_nneg_v8i16_v8i32(
42
+ ; AVX-SAME: <8 x i16> [[A0:%.*]], <8 x i16> [[A1:%.*]]) #[[ATTR0]] {
43
+ ; 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
44
; AVX-NEXT: [[R:%.*]] = sext <16 x i16> [[TMP1]] to <16 x i32>
41
45
; AVX-NEXT: ret <16 x i32> [[R]]
42
46
;
@@ -47,8 +51,9 @@ define <16 x i32> @concat_sext_zext_nneg_v8i16_v8i32(<8 x i16> %a0, <8 x i16> %a
47
51
}
48
52
49
53
define <16 x i32 > @concat_sext_v8i16_v16i32 (<8 x i16 > %a0 , <8 x i16 > %a1 ) {
50
- ; CHECK-LABEL: @concat_sext_v8i16_v16i32(
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>
54
+ ; CHECK-LABEL: define <16 x i32> @concat_sext_v8i16_v16i32(
55
+ ; CHECK-SAME: <8 x i16> [[A0:%.*]], <8 x i16> [[A1:%.*]]) #[[ATTR0]] {
56
+ ; 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
57
; CHECK-NEXT: [[R:%.*]] = sext <16 x i16> [[TMP1]] to <16 x i32>
53
58
; CHECK-NEXT: ret <16 x i32> [[R]]
54
59
;
@@ -59,8 +64,9 @@ define <16 x i32> @concat_sext_v8i16_v16i32(<8 x i16> %a0, <8 x i16> %a1) {
59
64
}
60
65
61
66
define <8 x i32 > @concat_sext_v4i1_v8i32 (<4 x i1 > %a0 , <4 x i1 > %a1 ) {
62
- ; CHECK-LABEL: @concat_sext_v4i1_v8i32(
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>
67
+ ; CHECK-LABEL: define <8 x i32> @concat_sext_v4i1_v8i32(
68
+ ; CHECK-SAME: <4 x i1> [[A0:%.*]], <4 x i1> [[A1:%.*]]) #[[ATTR0]] {
69
+ ; 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
70
; CHECK-NEXT: [[R:%.*]] = sext <8 x i1> [[TMP1]] to <8 x i32>
65
71
; CHECK-NEXT: ret <8 x i32> [[R]]
66
72
;
@@ -71,8 +77,9 @@ define <8 x i32> @concat_sext_v4i1_v8i32(<4 x i1> %a0, <4 x i1> %a1) {
71
77
}
72
78
73
79
define <8 x i16 > @concat_trunc_v4i32_v8i16 (<4 x i32 > %a0 , <4 x i32 > %a1 ) {
74
- ; CHECK-LABEL: @concat_trunc_v4i32_v8i16(
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>
80
+ ; CHECK-LABEL: define <8 x i16> @concat_trunc_v4i32_v8i16(
81
+ ; CHECK-SAME: <4 x i32> [[A0:%.*]], <4 x i32> [[A1:%.*]]) #[[ATTR0]] {
82
+ ; 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
83
; CHECK-NEXT: [[R:%.*]] = trunc <8 x i32> [[TMP1]] to <8 x i16>
77
84
; CHECK-NEXT: ret <8 x i16> [[R]]
78
85
;
@@ -83,8 +90,9 @@ define <8 x i16> @concat_trunc_v4i32_v8i16(<4 x i32> %a0, <4 x i32> %a1) {
83
90
}
84
91
85
92
define <8 x ptr > @concat_inttoptr_v4i32_v8iptr (<4 x i32 > %a0 , <4 x i32 > %a1 ) {
86
- ; CHECK-LABEL: @concat_inttoptr_v4i32_v8iptr(
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>
93
+ ; CHECK-LABEL: define <8 x ptr> @concat_inttoptr_v4i32_v8iptr(
94
+ ; CHECK-SAME: <4 x i32> [[A0:%.*]], <4 x i32> [[A1:%.*]]) #[[ATTR0]] {
95
+ ; 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
96
; CHECK-NEXT: [[R:%.*]] = inttoptr <8 x i32> [[TMP1]] to <8 x ptr>
89
97
; CHECK-NEXT: ret <8 x ptr> [[R]]
90
98
;
@@ -95,8 +103,9 @@ define <8 x ptr> @concat_inttoptr_v4i32_v8iptr(<4 x i32> %a0, <4 x i32> %a1) {
95
103
}
96
104
97
105
define <16 x i64 > @concat_ptrtoint_v8i16_v16i32 (<8 x ptr > %a0 , <8 x ptr > %a1 ) {
98
- ; CHECK-LABEL: @concat_ptrtoint_v8i16_v16i32(
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>
106
+ ; CHECK-LABEL: define <16 x i64> @concat_ptrtoint_v8i16_v16i32(
107
+ ; CHECK-SAME: <8 x ptr> [[A0:%.*]], <8 x ptr> [[A1:%.*]]) #[[ATTR0]] {
108
+ ; 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
109
; CHECK-NEXT: [[R:%.*]] = ptrtoint <16 x ptr> [[TMP1]] to <16 x i64>
101
110
; CHECK-NEXT: ret <16 x i64> [[R]]
102
111
;
@@ -107,14 +116,16 @@ define <16 x i64> @concat_ptrtoint_v8i16_v16i32(<8 x ptr> %a0, <8 x ptr> %a1) {
107
116
}
108
117
109
118
define <8 x double > @concat_fpext_v4f32_v8f64 (<4 x float > %a0 , <4 x float > %a1 ) {
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>
119
+ ; SSE-LABEL: define <8 x double> @concat_fpext_v4f32_v8f64(
120
+ ; SSE-SAME: <4 x float> [[A0:%.*]], <4 x float> [[A1:%.*]]) #[[ATTR0]] {
121
+ ; 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
122
; SSE-NEXT: [[R:%.*]] = fpext <8 x float> [[TMP1]] to <8 x double>
113
123
; SSE-NEXT: ret <8 x double> [[R]]
114
124
;
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>
125
+ ; AVX-LABEL: define <8 x double> @concat_fpext_v4f32_v8f64(
126
+ ; AVX-SAME: <4 x float> [[A0:%.*]], <4 x float> [[A1:%.*]]) #[[ATTR0]] {
127
+ ; AVX-NEXT: [[X0:%.*]] = fpext <4 x float> [[A0]] to <4 x double>
128
+ ; AVX-NEXT: [[X1:%.*]] = fpext <4 x float> [[A1]] to <4 x double>
118
129
; 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
130
; AVX-NEXT: ret <8 x double> [[R]]
120
131
;
@@ -125,9 +136,10 @@ define <8 x double> @concat_fpext_v4f32_v8f64(<4 x float> %a0, <4 x float> %a1)
125
136
}
126
137
127
138
define <16 x float > @concat_fptrunc_v8f64_v16f32 (<8 x double > %a0 , <8 x double > %a1 ) {
128
- ; CHECK-LABEL: @concat_fptrunc_v8f64_v16f32(
129
- ; CHECK-NEXT: [[X0:%.*]] = fptrunc <8 x double> [[A0:%.*]] to <8 x float>
130
- ; CHECK-NEXT: [[X1:%.*]] = fptrunc <8 x double> [[A1:%.*]] to <8 x float>
139
+ ; CHECK-LABEL: define <16 x float> @concat_fptrunc_v8f64_v16f32(
140
+ ; CHECK-SAME: <8 x double> [[A0:%.*]], <8 x double> [[A1:%.*]]) #[[ATTR0]] {
141
+ ; CHECK-NEXT: [[X0:%.*]] = fptrunc <8 x double> [[A0]] to <8 x float>
142
+ ; CHECK-NEXT: [[X1:%.*]] = fptrunc <8 x double> [[A1]] to <8 x float>
131
143
; CHECK-NEXT: [[R:%.*]] = shufflevector <8 x float> [[X0]], <8 x float> [[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>
132
144
; CHECK-NEXT: ret <16 x float> [[R]]
133
145
;
@@ -140,8 +152,9 @@ define <16 x float> @concat_fptrunc_v8f64_v16f32(<8 x double> %a0, <8 x double>
140
152
; commuted vector concatenation
141
153
142
154
define <16 x i32 > @rconcat_sext_v8i16_v16i32 (<8 x i16 > %a0 , <8 x i16 > %a1 ) {
143
- ; CHECK-LABEL: @rconcat_sext_v8i16_v16i32(
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>
155
+ ; CHECK-LABEL: define <16 x i32> @rconcat_sext_v8i16_v16i32(
156
+ ; CHECK-SAME: <8 x i16> [[A0:%.*]], <8 x i16> [[A1:%.*]]) #[[ATTR0]] {
157
+ ; 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
158
; CHECK-NEXT: [[R:%.*]] = sext <16 x i16> [[TMP1]] to <16 x i32>
146
159
; CHECK-NEXT: ret <16 x i32> [[R]]
147
160
;
@@ -154,8 +167,9 @@ define <16 x i32> @rconcat_sext_v8i16_v16i32(<8 x i16> %a0, <8 x i16> %a1) {
154
167
; interleaved shuffle
155
168
156
169
define <8 x double > @interleave_fpext_v4f32_v8f64 (<4 x float > %a0 , <4 x float > %a1 ) {
157
- ; CHECK-LABEL: @interleave_fpext_v4f32_v8f64(
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>
170
+ ; CHECK-LABEL: define <8 x double> @interleave_fpext_v4f32_v8f64(
171
+ ; CHECK-SAME: <4 x float> [[A0:%.*]], <4 x float> [[A1:%.*]]) #[[ATTR0]] {
172
+ ; 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
173
; CHECK-NEXT: [[R:%.*]] = fpext <8 x float> [[TMP1]] to <8 x double>
160
174
; CHECK-NEXT: ret <8 x double> [[R]]
161
175
;
@@ -168,8 +182,9 @@ define <8 x double> @interleave_fpext_v4f32_v8f64(<4 x float> %a0, <4 x float> %
168
182
; bitcasts (same element count)
169
183
170
184
define <8 x float > @concat_bitcast_v4i32_v8f32 (<4 x i32 > %a0 , <4 x i32 > %a1 ) {
171
- ; CHECK-LABEL: @concat_bitcast_v4i32_v8f32(
172
- ; 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>
185
+ ; CHECK-LABEL: define <8 x float> @concat_bitcast_v4i32_v8f32(
186
+ ; CHECK-SAME: <4 x i32> [[A0:%.*]], <4 x i32> [[A1:%.*]]) #[[ATTR0]] {
187
+ ; 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>
173
188
; CHECK-NEXT: [[R:%.*]] = bitcast <8 x i32> [[TMP1]] to <8 x float>
174
189
; CHECK-NEXT: ret <8 x float> [[R]]
175
190
;
@@ -182,8 +197,9 @@ define <8 x float> @concat_bitcast_v4i32_v8f32(<4 x i32> %a0, <4 x i32> %a1) {
182
197
; bitcasts (lower element count)
183
198
184
199
define <4 x double > @concat_bitcast_v8i16_v4f64 (<8 x i16 > %a0 , <8 x i16 > %a1 ) {
185
- ; CHECK-LABEL: @concat_bitcast_v8i16_v4f64(
186
- ; 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>
200
+ ; CHECK-LABEL: define <4 x double> @concat_bitcast_v8i16_v4f64(
201
+ ; CHECK-SAME: <8 x i16> [[A0:%.*]], <8 x i16> [[A1:%.*]]) #[[ATTR0]] {
202
+ ; 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>
187
203
; CHECK-NEXT: [[R:%.*]] = bitcast <16 x i16> [[TMP1]] to <4 x double>
188
204
; CHECK-NEXT: ret <4 x double> [[R]]
189
205
;
@@ -196,8 +212,9 @@ define <4 x double> @concat_bitcast_v8i16_v4f64(<8 x i16> %a0, <8 x i16> %a1) {
196
212
; bitcasts (higher element count)
197
213
198
214
define <16 x i16 > @concat_bitcast_v4i32_v16i16 (<4 x i32 > %a0 , <4 x i32 > %a1 ) {
199
- ; CHECK-LABEL: @concat_bitcast_v4i32_v16i16(
200
- ; 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>
215
+ ; CHECK-LABEL: define <16 x i16> @concat_bitcast_v4i32_v16i16(
216
+ ; CHECK-SAME: <4 x i32> [[A0:%.*]], <4 x i32> [[A1:%.*]]) #[[ATTR0]] {
217
+ ; 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>
201
218
; CHECK-NEXT: [[R:%.*]] = bitcast <8 x i32> [[TMP1]] to <16 x i16>
202
219
; CHECK-NEXT: ret <16 x i16> [[R]]
203
220
;
@@ -210,11 +227,12 @@ define <16 x i16> @concat_bitcast_v4i32_v16i16(<4 x i32> %a0, <4 x i32> %a1) {
210
227
; negative - multiuse
211
228
212
229
define <8 x i16 > @concat_trunc_v4i32_v8i16_multiuse (<4 x i32 > %a0 , <4 x i32 > %a1 , ptr %a2 ) {
213
- ; CHECK-LABEL: @concat_trunc_v4i32_v8i16_multiuse(
214
- ; CHECK-NEXT: [[X0:%.*]] = trunc <4 x i32> [[A0:%.*]] to <4 x i16>
215
- ; CHECK-NEXT: [[X1:%.*]] = trunc <4 x i32> [[A1:%.*]] to <4 x i16>
230
+ ; CHECK-LABEL: define <8 x i16> @concat_trunc_v4i32_v8i16_multiuse(
231
+ ; CHECK-SAME: <4 x i32> [[A0:%.*]], <4 x i32> [[A1:%.*]], ptr [[A2:%.*]]) #[[ATTR0]] {
232
+ ; CHECK-NEXT: [[X0:%.*]] = trunc <4 x i32> [[A0]] to <4 x i16>
233
+ ; CHECK-NEXT: [[X1:%.*]] = trunc <4 x i32> [[A1]] to <4 x i16>
216
234
; 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>
217
- ; CHECK-NEXT: store <4 x i16> [[X0]], ptr [[A2:%.* ]], align 8
235
+ ; CHECK-NEXT: store <4 x i16> [[X0]], ptr [[A2]], align 8
218
236
; CHECK-NEXT: ret <8 x i16> [[R]]
219
237
;
220
238
%x0 = trunc <4 x i32 > %a0 to <4 x i16 >
@@ -227,9 +245,10 @@ define <8 x i16> @concat_trunc_v4i32_v8i16_multiuse(<4 x i32> %a0, <4 x i32> %a1
227
245
; negative - bitcasts (unscalable higher element count)
228
246
229
247
define <16 x i16 > @revpair_bitcast_v4i32_v16i16 (<4 x i32 > %a0 , <4 x i32 > %a1 ) {
230
- ; CHECK-LABEL: @revpair_bitcast_v4i32_v16i16(
231
- ; CHECK-NEXT: [[X0:%.*]] = bitcast <4 x i32> [[A0:%.*]] to <8 x i16>
232
- ; CHECK-NEXT: [[X1:%.*]] = bitcast <4 x i32> [[A1:%.*]] to <8 x i16>
248
+ ; CHECK-LABEL: define <16 x i16> @revpair_bitcast_v4i32_v16i16(
249
+ ; CHECK-SAME: <4 x i32> [[A0:%.*]], <4 x i32> [[A1:%.*]]) #[[ATTR0]] {
250
+ ; CHECK-NEXT: [[X0:%.*]] = bitcast <4 x i32> [[A0]] to <8 x i16>
251
+ ; CHECK-NEXT: [[X1:%.*]] = bitcast <4 x i32> [[A1]] to <8 x i16>
233
252
; CHECK-NEXT: [[R:%.*]] = shufflevector <8 x i16> [[X0]], <8 x i16> [[X1]], <16 x i32> <i32 1, i32 0, i32 3, i32 3, i32 5, i32 4, i32 7, i32 6, i32 9, i32 8, i32 11, i32 10, i32 13, i32 12, i32 15, i32 14>
234
253
; CHECK-NEXT: ret <16 x i16> [[R]]
235
254
;
@@ -242,9 +261,10 @@ define <16 x i16> @revpair_bitcast_v4i32_v16i16(<4 x i32> %a0, <4 x i32> %a1) {
242
261
; negative - bitcasts (unscalable element counts)
243
262
244
263
define <4 x i32 > @shuffle_bitcast_v32i40_v4i32 (<32 x i40 > %a0 , <32 x i40 > %a1 ) {
245
- ; CHECK-LABEL: @shuffle_bitcast_v32i40_v4i32(
246
- ; CHECK-NEXT: [[X0:%.*]] = bitcast <32 x i40> [[A0:%.*]] to <40 x i32>
247
- ; CHECK-NEXT: [[X1:%.*]] = bitcast <32 x i40> [[A1:%.*]] to <40 x i32>
264
+ ; CHECK-LABEL: define <4 x i32> @shuffle_bitcast_v32i40_v4i32(
265
+ ; CHECK-SAME: <32 x i40> [[A0:%.*]], <32 x i40> [[A1:%.*]]) #[[ATTR0]] {
266
+ ; CHECK-NEXT: [[X0:%.*]] = bitcast <32 x i40> [[A0]] to <40 x i32>
267
+ ; CHECK-NEXT: [[X1:%.*]] = bitcast <32 x i40> [[A1]] to <40 x i32>
248
268
; CHECK-NEXT: [[R:%.*]] = shufflevector <40 x i32> [[X0]], <40 x i32> [[X1]], <4 x i32> <i32 0, i32 42, i32 poison, i32 poison>
249
269
; CHECK-NEXT: ret <4 x i32> [[R]]
250
270
;
@@ -257,9 +277,10 @@ define <4 x i32> @shuffle_bitcast_v32i40_v4i32(<32 x i40> %a0, <32 x i40> %a1) {
257
277
; negative - src type mismatch
258
278
259
279
define <8 x i32 > @concat_sext_v4i8_v4i16_v8i32 (<4 x i8 > %a0 , <4 x i16 > %a1 ) {
260
- ; CHECK-LABEL: @concat_sext_v4i8_v4i16_v8i32(
261
- ; CHECK-NEXT: [[X0:%.*]] = sext <4 x i8> [[A0:%.*]] to <4 x i32>
262
- ; CHECK-NEXT: [[X1:%.*]] = sext <4 x i16> [[A1:%.*]] to <4 x i32>
280
+ ; CHECK-LABEL: define <8 x i32> @concat_sext_v4i8_v4i16_v8i32(
281
+ ; CHECK-SAME: <4 x i8> [[A0:%.*]], <4 x i16> [[A1:%.*]]) #[[ATTR0]] {
282
+ ; CHECK-NEXT: [[X0:%.*]] = sext <4 x i8> [[A0]] to <4 x i32>
283
+ ; CHECK-NEXT: [[X1:%.*]] = sext <4 x i16> [[A1]] to <4 x i32>
263
284
; 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>
264
285
; CHECK-NEXT: ret <8 x i32> [[R]]
265
286
;
@@ -272,9 +293,10 @@ define <8 x i32> @concat_sext_v4i8_v4i16_v8i32(<4 x i8> %a0, <4 x i16> %a1) {
272
293
; negative - castop mismatch
273
294
274
295
define <16 x i32 > @concat_sext_zext_v8i16_v16i32 (<8 x i16 > %a0 , <8 x i16 > %a1 ) {
275
- ; CHECK-LABEL: @concat_sext_zext_v8i16_v16i32(
276
- ; CHECK-NEXT: [[X0:%.*]] = sext <8 x i16> [[A0:%.*]] to <8 x i32>
277
- ; CHECK-NEXT: [[X1:%.*]] = zext <8 x i16> [[A1:%.*]] to <8 x i32>
296
+ ; CHECK-LABEL: define <16 x i32> @concat_sext_zext_v8i16_v16i32(
297
+ ; CHECK-SAME: <8 x i16> [[A0:%.*]], <8 x i16> [[A1:%.*]]) #[[ATTR0]] {
298
+ ; CHECK-NEXT: [[X0:%.*]] = sext <8 x i16> [[A0]] to <8 x i32>
299
+ ; CHECK-NEXT: [[X1:%.*]] = zext <8 x i16> [[A1]] to <8 x i32>
278
300
; 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>
279
301
; CHECK-NEXT: ret <16 x i32> [[R]]
280
302
;
0 commit comments