@@ -150,16 +150,52 @@ define iXLen @nxv2i64_zero_poison(<vscale x 2 x i64> %src, <vscale x 2 x i1> %m,
150
150
ret iXLen %r
151
151
}
152
152
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
+
153
189
define iXLen @fixed_v2i64 (<2 x i64 > %src , <2 x i1 > %m , i32 %evl ) {
154
190
; RV32-LABEL: fixed_v2i64:
155
191
; RV32: # %bb.0:
156
192
; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
157
193
; RV32-NEXT: vmsne.vi v8, v8, 0, v0.t
158
194
; RV32-NEXT: vfirst.m a1, v8, v0.t
159
- ; RV32-NEXT: bltz a1, .LBB6_2
195
+ ; RV32-NEXT: bltz a1, .LBB7_2
160
196
; RV32-NEXT: # %bb.1:
161
197
; RV32-NEXT: mv a0, a1
162
- ; RV32-NEXT: .LBB6_2 :
198
+ ; RV32-NEXT: .LBB7_2 :
163
199
; RV32-NEXT: ret
164
200
;
165
201
; RV64-LABEL: fixed_v2i64:
@@ -169,10 +205,10 @@ define iXLen @fixed_v2i64(<2 x i64> %src, <2 x i1> %m, i32 %evl) {
169
205
; RV64-NEXT: vsetvli zero, a0, e64, m1, ta, ma
170
206
; RV64-NEXT: vmsne.vi v8, v8, 0, v0.t
171
207
; RV64-NEXT: vfirst.m a1, v8, v0.t
172
- ; RV64-NEXT: bltz a1, .LBB6_2
208
+ ; RV64-NEXT: bltz a1, .LBB7_2
173
209
; RV64-NEXT: # %bb.1:
174
210
; RV64-NEXT: mv a0, a1
175
- ; RV64-NEXT: .LBB6_2 :
211
+ ; RV64-NEXT: .LBB7_2 :
176
212
; RV64-NEXT: ret
177
213
%r = call iXLen @llvm.vp.cttz.elts.iXLen.v2i64 (<2 x i64 > %src , i1 0 , <2 x i1 > %m , i32 %evl )
178
214
ret iXLen %r
0 commit comments