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
Recommit "[SelectionDAG][RISCV] Add very basic PromoteIntegerResult/Op support for VP_SIGN/ZERO_EXTEND."
I have fixed an existing DAGCombiner bug that caused the previous assertion failure.
See 7163539.
Original message
We don't have VP_ANY_EXTEND or VP_SIGN_EXTEND_INREG yet so I've
deviated a little from the non-VP lowering.
My goal was to fix the crashes that occurs on these test cases without this patch.
Reviewed By: fakepaper56
Differential Revision: https://reviews.llvm.org/D152854
Copy file name to clipboardExpand all lines: llvm/test/CodeGen/RISCV/rvv/fixed-vectors-sext-vp.ll
+53Lines changed: 53 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -201,3 +201,56 @@ define <32 x i64> @vsext_v32i64_v32i32_unmasked(<32 x i32> %va, i32 zeroext %evl
201
201
%v = call <32 x i64> @llvm.vp.sext.v32i64.v32i32(<32 x i32> %va, <32 x i1> shufflevector (<32 x i1> insertelement (<32 x i1> undef, i1true, i320), <32 x i1> undef, <32 x i32> zeroinitializer), i32%evl)
202
202
ret <32 x i64> %v
203
203
}
204
+
205
+
declare <4 x i16> @llvm.vp.sext.v4i16.v4i7(<4 x i7>, <4 x i1>, i32)
206
+
207
+
define <4 x i16> @vsext_v4i16_v4i7(<4 x i7> %va, <4 x i1> %m, i32zeroext%evl) {
208
+
; CHECK-LABEL: vsext_v4i16_v4i7:
209
+
; CHECK: # %bb.0:
210
+
; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
211
+
; CHECK-NEXT: vzext.vf2 v9, v8, v0.t
212
+
; CHECK-NEXT: vsll.vi v8, v9, 9, v0.t
213
+
; CHECK-NEXT: vsra.vi v8, v8, 9, v0.t
214
+
; CHECK-NEXT: ret
215
+
%v = call <4 x i16> @llvm.vp.sext.v4i16.v4i7(<4 x i7> %va, <4 x i1> %m, i32%evl)
216
+
ret <4 x i16> %v
217
+
}
218
+
219
+
declare <4 x i8> @llvm.vp.sext.v4i8.v4i7(<4 x i7>, <4 x i1>, i32)
220
+
221
+
define <4 x i8> @vsext_v4i8_v4i7(<4 x i7> %va, <4 x i1> %m, i32zeroext%evl) {
222
+
; CHECK-LABEL: vsext_v4i8_v4i7:
223
+
; CHECK: # %bb.0:
224
+
; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
225
+
; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
226
+
; CHECK-NEXT: vsra.vi v8, v8, 1, v0.t
227
+
; CHECK-NEXT: ret
228
+
%v = call <4 x i8> @llvm.vp.sext.v4i8.v4i7(<4 x i7> %va, <4 x i1> %m, i32%evl)
229
+
ret <4 x i8> %v
230
+
}
231
+
232
+
declare <4 x i15> @llvm.vp.sext.v4i15.v4i8(<4 x i8>, <4 x i1>, i32)
233
+
234
+
define <4 x i15> @vsext_v4i15_v4i8(<4 x i8> %va, <4 x i1> %m, i32zeroext%evl) {
235
+
; CHECK-LABEL: vsext_v4i15_v4i8:
236
+
; CHECK: # %bb.0:
237
+
; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
238
+
; CHECK-NEXT: vsext.vf2 v9, v8, v0.t
239
+
; CHECK-NEXT: vmv1r.v v8, v9
240
+
; CHECK-NEXT: ret
241
+
%v = call <4 x i15> @llvm.vp.sext.v4i15.v4i8(<4 x i8> %va, <4 x i1> %m, i32%evl)
242
+
ret <4 x i15> %v
243
+
}
244
+
245
+
declare <4 x i15> @llvm.vp.sext.v4i15.v4i9(<4 x i9>, <4 x i1>, i32)
246
+
247
+
define <4 x i15> @vsext_v4i15_v4i9(<4 x i9> %va, <4 x i1> %m, i32zeroext%evl) {
248
+
; CHECK-LABEL: vsext_v4i15_v4i9:
249
+
; CHECK: # %bb.0:
250
+
; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
251
+
; CHECK-NEXT: vsll.vi v8, v8, 7, v0.t
252
+
; CHECK-NEXT: vsra.vi v8, v8, 7, v0.t
253
+
; CHECK-NEXT: ret
254
+
%v = call <4 x i15> @llvm.vp.sext.v4i15.v4i9(<4 x i9> %va, <4 x i1> %m, i32%evl)
Copy file name to clipboardExpand all lines: llvm/test/CodeGen/RISCV/rvv/fixed-vectors-zext-vp.ll
+53Lines changed: 53 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -201,3 +201,56 @@ define <32 x i64> @vzext_v32i64_v32i32_unmasked(<32 x i32> %va, i32 zeroext %evl
201
201
%v = call <32 x i64> @llvm.vp.zext.v32i64.v32i32(<32 x i32> %va, <32 x i1> shufflevector (<32 x i1> insertelement (<32 x i1> undef, i1true, i320), <32 x i1> undef, <32 x i32> zeroinitializer), i32%evl)
202
202
ret <32 x i64> %v
203
203
}
204
+
205
+
declare <4 x i16> @llvm.vp.zext.v4i16.v4i7(<4 x i7>, <4 x i1>, i32)
206
+
207
+
define <4 x i16> @vzext_v4i16_v4i7(<4 x i7> %va, <4 x i1> %m, i32zeroext%evl) {
208
+
; CHECK-LABEL: vzext_v4i16_v4i7:
209
+
; CHECK: # %bb.0:
210
+
; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
211
+
; CHECK-NEXT: vzext.vf2 v9, v8, v0.t
212
+
; CHECK-NEXT: li a0, 127
213
+
; CHECK-NEXT: vand.vx v8, v9, a0, v0.t
214
+
; CHECK-NEXT: ret
215
+
%v = call <4 x i16> @llvm.vp.zext.v4i16.v4i7(<4 x i7> %va, <4 x i1> %m, i32%evl)
216
+
ret <4 x i16> %v
217
+
}
218
+
219
+
declare <4 x i8> @llvm.vp.zext.v4i8.v4i7(<4 x i7>, <4 x i1>, i32)
220
+
221
+
define <4 x i8> @vzext_v4i8_v4i7(<4 x i7> %va, <4 x i1> %m, i32zeroext%evl) {
222
+
; CHECK-LABEL: vzext_v4i8_v4i7:
223
+
; CHECK: # %bb.0:
224
+
; CHECK-NEXT: li a1, 127
225
+
; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
226
+
; CHECK-NEXT: vand.vx v8, v8, a1, v0.t
227
+
; CHECK-NEXT: ret
228
+
%v = call <4 x i8> @llvm.vp.zext.v4i8.v4i7(<4 x i7> %va, <4 x i1> %m, i32%evl)
229
+
ret <4 x i8> %v
230
+
}
231
+
232
+
declare <4 x i15> @llvm.vp.zext.v4i15.v4i8(<4 x i8>, <4 x i1>, i32)
233
+
234
+
define <4 x i15> @vzext_v4i15_v4i8(<4 x i8> %va, <4 x i1> %m, i32zeroext%evl) {
235
+
; CHECK-LABEL: vzext_v4i15_v4i8:
236
+
; CHECK: # %bb.0:
237
+
; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
238
+
; CHECK-NEXT: vzext.vf2 v9, v8, v0.t
239
+
; CHECK-NEXT: vmv1r.v v8, v9
240
+
; CHECK-NEXT: ret
241
+
%v = call <4 x i15> @llvm.vp.zext.v4i15.v4i8(<4 x i8> %va, <4 x i1> %m, i32%evl)
242
+
ret <4 x i15> %v
243
+
}
244
+
245
+
declare <4 x i15> @llvm.vp.zext.v4i15.v4i9(<4 x i9>, <4 x i1>, i32)
246
+
247
+
define <4 x i15> @vzext_v4i15_v4i9(<4 x i9> %va, <4 x i1> %m, i32zeroext%evl) {
248
+
; CHECK-LABEL: vzext_v4i15_v4i9:
249
+
; CHECK: # %bb.0:
250
+
; CHECK-NEXT: li a1, 511
251
+
; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
252
+
; CHECK-NEXT: vand.vx v8, v8, a1, v0.t
253
+
; CHECK-NEXT: ret
254
+
%v = call <4 x i15> @llvm.vp.zext.v4i15.v4i9(<4 x i9> %va, <4 x i1> %m, i32%evl)
0 commit comments