@@ -234,3 +234,29 @@ define <1 x i64> @cmnez_d(<1 x i64> %A) nounwind {
234234 %mask = sext <1 x i1 > %tst to <1 x i64 >
235235 ret <1 x i64 > %mask
236236}
237+
238+ ; Check for the elimination of spurious type extensions
239+ define <16 x i1 > @abdu_cmp (<16 x i8 > %a , <16 x i8 > %b , <16 x i8 > %g ) {
240+ ; CHECK-LABEL: abdu_cmp:
241+ ; CHECK: uabd.16b v0, v0, v1
242+ ; CHECK-NEXT: cmhi.16b v0, v2, v0
243+ ; CHECK-NEXT: ret
244+ %za = zext <16 x i8 > %a to <16 x i32 >
245+ %zb = zext <16 x i8 > %b to <16 x i32 >
246+ %zg = zext <16 x i8 > %g to <16 x i32 >
247+ %mx = call <16 x i32 > @llvm.umax.v16i32 (<16 x i32 > %za , <16 x i32 > %zb )
248+ %mn = call <16 x i32 > @llvm.umin.v16i32 (<16 x i32 > %za , <16 x i32 > %zb )
249+ %abdu = sub <16 x i32 > %mx , %mn
250+ %cond = icmp ult <16 x i32 > %abdu , %zg
251+ ret <16 x i1 > %cond
252+ }
253+
254+ define <16 x i1 > @sext_cmp (<16 x i8 > %a , <16 x i8 > %b ) {
255+ ; CHECK-LABEL: sext_cmp:
256+ ; CHECK: cmgt.16b v0, v0, v1
257+ ; CHECK-NEXT: ret
258+ %za = sext <16 x i8 > %a to <16 x i32 >
259+ %zb = sext <16 x i8 > %b to <16 x i32 >
260+ %cond = icmp slt <16 x i32 > %za , %zb
261+ ret <16 x i1 > %cond
262+ }
0 commit comments