You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: llvm/test/Transforms/InstSimplify/ConstProp/vector-calls.ll
+122Lines changed: 122 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -51,6 +51,32 @@ define <8 x i32> @fold_vector_interleave2() {
51
51
ret <8 x i32> %1
52
52
}
53
53
54
+
define <vscale x 8 x i32> @fold_scalable_vector_interleave2() {
55
+
; CHECK-LABEL: define <vscale x 8 x i32> @fold_scalable_vector_interleave2() {
56
+
; CHECK-NEXT: ret <vscale x 8 x i32> zeroinitializer
57
+
;
58
+
%1 = call <vscale x 8 x i32> @llvm.vector.interleave2.nxv8i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer)
59
+
ret <vscale x 8 x i32> %1
60
+
}
61
+
62
+
define <vscale x 8 x i32> @fold_scalable_vector_interleave2_splat() {
63
+
; CHECK-LABEL: define <vscale x 8 x i32> @fold_scalable_vector_interleave2_splat() {
64
+
; CHECK-NEXT: ret <vscale x 8 x i32> splat (i32 1)
65
+
;
66
+
%1 = call <vscale x 8 x i32> @llvm.vector.interleave2.nxv8i32(<vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321))
67
+
ret <vscale x 8 x i32> %1
68
+
}
69
+
70
+
; Negative test.
71
+
define <vscale x 8 x i32> @fold_scalable_vector_interleave2_mismatch_splat() {
72
+
; CHECK-LABEL: define <vscale x 8 x i32> @fold_scalable_vector_interleave2_mismatch_splat() {
73
+
; CHECK-NEXT: [[TMP1:%.*]] = call <vscale x 8 x i32> @llvm.vector.interleave2.nxv8i32(<vscale x 4 x i32> splat (i32 1), <vscale x 4 x i32> splat (i32 2))
74
+
; CHECK-NEXT: ret <vscale x 8 x i32> [[TMP1]]
75
+
;
76
+
%1 = call <vscale x 8 x i32> @llvm.vector.interleave2.nxv8i32(<vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i322))
77
+
ret <vscale x 8 x i32> %1
78
+
}
79
+
54
80
define <12 x i32> @fold_vector_interleave3() {
55
81
; CHECK-LABEL: define <12 x i32> @fold_vector_interleave3() {
@@ -59,6 +85,22 @@ define <12 x i32> @fold_vector_interleave3() {
59
85
ret <12 x i32> %1
60
86
}
61
87
88
+
define <vscale x 12 x i32> @fold_scalable_vector_interleave3() {
89
+
; CHECK-LABEL: define <vscale x 12 x i32> @fold_scalable_vector_interleave3() {
90
+
; CHECK-NEXT: ret <vscale x 12 x i32> zeroinitializer
91
+
;
92
+
%1 = call <vscale x 12 x i32> @llvm.vector.interleave3.nxv8i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer)
93
+
ret <vscale x 12 x i32> %1
94
+
}
95
+
96
+
define <vscale x 12 x i32> @fold_scalable_vector_interleave3_splat() {
97
+
; CHECK-LABEL: define <vscale x 12 x i32> @fold_scalable_vector_interleave3_splat() {
98
+
; CHECK-NEXT: ret <vscale x 12 x i32> splat (i32 1)
99
+
;
100
+
%1 = call <vscale x 12 x i32> @llvm.vector.interleave3.nxv8i32(<vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321))
101
+
ret <vscale x 12 x i32> %1
102
+
}
103
+
62
104
define <16 x i32> @fold_vector_interleave4() {
63
105
; CHECK-LABEL: define <16 x i32> @fold_vector_interleave4() {
@@ -67,6 +109,22 @@ define <16 x i32> @fold_vector_interleave4() {
67
109
ret <16 x i32> %1
68
110
}
69
111
112
+
define <vscale x 16 x i32> @fold_scalable_vector_interleave4() {
113
+
; CHECK-LABEL: define <vscale x 16 x i32> @fold_scalable_vector_interleave4() {
114
+
; CHECK-NEXT: ret <vscale x 16 x i32> zeroinitializer
115
+
;
116
+
%1 = call <vscale x 16 x i32> @llvm.vector.interleave4.nxv16i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer)
117
+
ret <vscale x 16 x i32> %1
118
+
}
119
+
120
+
define <vscale x 16 x i32> @fold_scalable_vector_interleave4_splat() {
121
+
; CHECK-LABEL: define <vscale x 16 x i32> @fold_scalable_vector_interleave4_splat() {
122
+
; CHECK-NEXT: ret <vscale x 16 x i32> splat (i32 1)
123
+
;
124
+
%1 = call <vscale x 16 x i32> @llvm.vector.interleave4.nxv16i32(<vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321))
125
+
ret <vscale x 16 x i32> %1
126
+
}
127
+
70
128
define <20 x i32> @fold_vector_interleave5() {
71
129
; CHECK-LABEL: define <20 x i32> @fold_vector_interleave5() {
@@ -75,6 +133,22 @@ define <20 x i32> @fold_vector_interleave5() {
75
133
ret <20 x i32> %1
76
134
}
77
135
136
+
define <vscale x 20 x i32> @fold_scalable_vector_interleave5() {
137
+
; CHECK-LABEL: define <vscale x 20 x i32> @fold_scalable_vector_interleave5() {
138
+
; CHECK-NEXT: ret <vscale x 20 x i32> zeroinitializer
139
+
;
140
+
%1 = call <vscale x 20 x i32> @llvm.vector.interleave5.nxv20i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer)
141
+
ret <vscale x 20 x i32> %1
142
+
}
143
+
144
+
define <vscale x 20 x i32> @fold_scalable_vector_interleave5_splat() {
145
+
; CHECK-LABEL: define <vscale x 20 x i32> @fold_scalable_vector_interleave5_splat() {
146
+
; CHECK-NEXT: ret <vscale x 20 x i32> splat (i32 1)
147
+
;
148
+
%1 = call <vscale x 20 x i32> @llvm.vector.interleave5.nxv20i32(<vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321))
149
+
ret <vscale x 20 x i32> %1
150
+
}
151
+
78
152
define <24 x i32> @fold_vector_interleave6() {
79
153
; CHECK-LABEL: define <24 x i32> @fold_vector_interleave6() {
@@ -83,6 +157,22 @@ define <24 x i32> @fold_vector_interleave6() {
83
157
ret <24 x i32> %1
84
158
}
85
159
160
+
define <vscale x 24 x i32> @fold_scalable_vector_interleave6() {
161
+
; CHECK-LABEL: define <vscale x 24 x i32> @fold_scalable_vector_interleave6() {
162
+
; CHECK-NEXT: ret <vscale x 24 x i32> zeroinitializer
163
+
;
164
+
%1 = call <vscale x 24 x i32> @llvm.vector.interleave6.nxv24i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer)
165
+
ret <vscale x 24 x i32> %1
166
+
}
167
+
168
+
define <vscale x 24 x i32> @fold_scalable_vector_interleave6_splat() {
169
+
; CHECK-LABEL: define <vscale x 24 x i32> @fold_scalable_vector_interleave6_splat() {
170
+
; CHECK-NEXT: ret <vscale x 24 x i32> splat (i32 1)
171
+
;
172
+
%1 = call <vscale x 24 x i32> @llvm.vector.interleave6.nxv24i32(<vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321))
173
+
ret <vscale x 24 x i32> %1
174
+
}
175
+
86
176
define <28 x i32> @fold_vector_interleave7() {
87
177
; CHECK-LABEL: define <28 x i32> @fold_vector_interleave7() {
@@ -91,6 +181,22 @@ define <28 x i32> @fold_vector_interleave7() {
91
181
ret <28 x i32> %1
92
182
}
93
183
184
+
define <vscale x 28 x i32> @fold_scalable_vector_interleave7() {
185
+
; CHECK-LABEL: define <vscale x 28 x i32> @fold_scalable_vector_interleave7() {
186
+
; CHECK-NEXT: ret <vscale x 28 x i32> zeroinitializer
187
+
;
188
+
%1 = call <vscale x 28 x i32> @llvm.vector.interleave7.nxv28i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer)
189
+
ret <vscale x 28 x i32> %1
190
+
}
191
+
192
+
define <vscale x 28 x i32> @fold_scalable_vector_interleave7_splat() {
193
+
; CHECK-LABEL: define <vscale x 28 x i32> @fold_scalable_vector_interleave7_splat() {
194
+
; CHECK-NEXT: ret <vscale x 28 x i32> splat (i32 1)
195
+
;
196
+
%1 = call <vscale x 28 x i32> @llvm.vector.interleave7.nxv28i32(<vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321))
197
+
ret <vscale x 28 x i32> %1
198
+
}
199
+
94
200
define <32 x i32> @fold_vector_interleave8() {
95
201
; CHECK-LABEL: define <32 x i32> @fold_vector_interleave8() {
@@ -99,6 +205,22 @@ define <32 x i32> @fold_vector_interleave8() {
99
205
ret <32 x i32> %1
100
206
}
101
207
208
+
define <vscale x 32 x i32> @fold_scalable_vector_interleave8() {
209
+
; CHECK-LABEL: define <vscale x 32 x i32> @fold_scalable_vector_interleave8() {
210
+
; CHECK-NEXT: ret <vscale x 32 x i32> zeroinitializer
211
+
;
212
+
%1 = call <vscale x 32 x i32> @llvm.vector.interleave8.nxv32i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer, <vscale x 4 x i32> zeroinitializer)
213
+
ret <vscale x 32 x i32> %1
214
+
}
215
+
216
+
define <vscale x 32 x i32> @fold_scalable_vector_interleave8_splat() {
217
+
; CHECK-LABEL: define <vscale x 32 x i32> @fold_scalable_vector_interleave8_splat() {
218
+
; CHECK-NEXT: ret <vscale x 32 x i32> splat (i32 1)
219
+
;
220
+
%1 = call <vscale x 32 x i32> @llvm.vector.interleave8.nxv32i32(<vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321), <vscale x 4 x i32> splat (i321))
221
+
ret <vscale x 32 x i32> %1
222
+
}
223
+
102
224
define { <4 x i32>, <4 x i32> } @fold_vector_deinterleave2() {
103
225
; CHECK-LABEL: define { <4 x i32>, <4 x i32> } @fold_vector_deinterleave2() {
104
226
; CHECK-NEXT: ret { <4 x i32>, <4 x i32> } { <4 x i32> <i32 1, i32 2, i32 3, i32 4>, <4 x i32> <i32 5, i32 6, i32 7, i32 8> }
0 commit comments