Skip to content

Commit aaa2af1

Browse files
committed
Address review comments and add a new test
1 parent f4a7ece commit aaa2af1

File tree

2 files changed

+41
-5
lines changed

2 files changed

+41
-5
lines changed

llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4074,7 +4074,7 @@ SDValue DAGTypeLegalizer::SplitVecOp_VP_CttzElements(SDNode *N) {
40744074
SDValue VLo = DAG.getZExtOrTrunc(EVLLo, DL, ResVT);
40754075

40764076
// if VP_CTTZ_ELTS(Lo) != EVLLo => VP_CTTZ_ELTS(Lo).
4077-
// else => EVLLo + VP_CTTZ_ELTS / VP_CTTZ_ELTS_ZERO_UNDEF(Hi).
4077+
// else => EVLLo + (VP_CTTZ_ELTS(Hi) or VP_CTTZ_ELTS_ZERO_UNDEF(Hi)).
40784078
SDValue ResLo = DAG.getNode(ISD::VP_CTTZ_ELTS, DL, ResVT, Lo, MaskLo, EVLLo);
40794079
SDValue ResLoNotEVL =
40804080
DAG.getSetCC(DL, getSetCCResultType(ResVT), ResLo, VLo, ISD::SETNE);

llvm/test/CodeGen/RISCV/rvv/vp-cttz-elts.ll

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,16 +150,52 @@ define iXLen @nxv2i64_zero_poison(<vscale x 2 x i64> %src, <vscale x 2 x i1> %m,
150150
ret iXLen %r
151151
}
152152

153+
define i1 @nxv2i32_cmp_evl(<vscale x 2 x i32> %src, <vscale x 2 x i1> %m, i32 %evl) {
154+
; RV32-LABEL: nxv2i32_cmp_evl:
155+
; RV32: # %bb.0:
156+
; RV32-NEXT: vsetvli zero, a0, e32, m1, ta, ma
157+
; RV32-NEXT: vmsne.vi v8, v8, 0, v0.t
158+
; RV32-NEXT: vfirst.m a2, v8, v0.t
159+
; RV32-NEXT: mv a1, a0
160+
; RV32-NEXT: bltz a2, .LBB6_2
161+
; RV32-NEXT: # %bb.1:
162+
; RV32-NEXT: mv a1, a2
163+
; RV32-NEXT: .LBB6_2:
164+
; RV32-NEXT: xor a0, a1, a0
165+
; RV32-NEXT: seqz a0, a0
166+
; RV32-NEXT: ret
167+
;
168+
; RV64-LABEL: nxv2i32_cmp_evl:
169+
; RV64: # %bb.0:
170+
; RV64-NEXT: slli a1, a0, 32
171+
; RV64-NEXT: srli a1, a1, 32
172+
; RV64-NEXT: vsetvli zero, a1, e32, m1, ta, ma
173+
; RV64-NEXT: vmsne.vi v8, v8, 0, v0.t
174+
; RV64-NEXT: vfirst.m a2, v8, v0.t
175+
; RV64-NEXT: sext.w a0, a0
176+
; RV64-NEXT: bltz a2, .LBB6_2
177+
; RV64-NEXT: # %bb.1:
178+
; RV64-NEXT: mv a1, a2
179+
; RV64-NEXT: .LBB6_2:
180+
; RV64-NEXT: sext.w a1, a1
181+
; RV64-NEXT: xor a0, a1, a0
182+
; RV64-NEXT: seqz a0, a0
183+
; RV64-NEXT: ret
184+
%r = call i32 @llvm.vp.cttz.elts.i32.nxv2i32(<vscale x 2 x i32> %src, i1 0, <vscale x 2 x i1> %m, i32 %evl)
185+
%cmp = icmp eq i32 %r, %evl
186+
ret i1 %cmp
187+
}
188+
153189
define iXLen @fixed_v2i64(<2 x i64> %src, <2 x i1> %m, i32 %evl) {
154190
; RV32-LABEL: fixed_v2i64:
155191
; RV32: # %bb.0:
156192
; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
157193
; RV32-NEXT: vmsne.vi v8, v8, 0, v0.t
158194
; RV32-NEXT: vfirst.m a1, v8, v0.t
159-
; RV32-NEXT: bltz a1, .LBB6_2
195+
; RV32-NEXT: bltz a1, .LBB7_2
160196
; RV32-NEXT: # %bb.1:
161197
; RV32-NEXT: mv a0, a1
162-
; RV32-NEXT: .LBB6_2:
198+
; RV32-NEXT: .LBB7_2:
163199
; RV32-NEXT: ret
164200
;
165201
; RV64-LABEL: fixed_v2i64:
@@ -169,10 +205,10 @@ define iXLen @fixed_v2i64(<2 x i64> %src, <2 x i1> %m, i32 %evl) {
169205
; RV64-NEXT: vsetvli zero, a0, e64, m1, ta, ma
170206
; RV64-NEXT: vmsne.vi v8, v8, 0, v0.t
171207
; RV64-NEXT: vfirst.m a1, v8, v0.t
172-
; RV64-NEXT: bltz a1, .LBB6_2
208+
; RV64-NEXT: bltz a1, .LBB7_2
173209
; RV64-NEXT: # %bb.1:
174210
; RV64-NEXT: mv a0, a1
175-
; RV64-NEXT: .LBB6_2:
211+
; RV64-NEXT: .LBB7_2:
176212
; RV64-NEXT: ret
177213
%r = call iXLen @llvm.vp.cttz.elts.iXLen.v2i64(<2 x i64> %src, i1 0, <2 x i1> %m, i32 %evl)
178214
ret iXLen %r

0 commit comments

Comments
 (0)