Skip to content

Commit 9427fce

Browse files
committed
[ValueTracking] Add tests for cmpExcludesZero for non-splat vecs; NFC
1 parent 2ae3a71 commit 9427fce

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

llvm/test/Analysis/ValueTracking/known-non-zero.ll

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1160,3 +1160,65 @@ define i1 @sdiv_known_non_zero_fail(i8 %x, i8 %y) {
11601160
%nz = icmp ne i8 %xy, 0
11611161
ret i1 %nz
11621162
}
1163+
1164+
define <2 x i1> @cmp_excludes_zero_with_nonsplat_vec(<2 x i8> %a, <2 x i8> %b) {
1165+
; CHECK-LABEL: @cmp_excludes_zero_with_nonsplat_vec(
1166+
; CHECK-NEXT: [[C:%.*]] = icmp sge <2 x i8> [[A:%.*]], <i8 1, i8 4>
1167+
; CHECK-NEXT: [[S:%.*]] = select <2 x i1> [[C]], <2 x i8> [[A]], <2 x i8> <i8 4, i8 5>
1168+
; CHECK-NEXT: [[AND:%.*]] = or <2 x i8> [[S]], [[B:%.*]]
1169+
; CHECK-NEXT: [[R:%.*]] = icmp eq <2 x i8> [[AND]], zeroinitializer
1170+
; CHECK-NEXT: ret <2 x i1> [[R]]
1171+
;
1172+
%c = icmp sge <2 x i8> %a, <i8 1, i8 4>
1173+
%s = select <2 x i1> %c, <2 x i8> %a, <2 x i8> <i8 4, i8 5>
1174+
%and = or <2 x i8> %s, %b
1175+
%r = icmp eq <2 x i8> %and, zeroinitializer
1176+
ret <2 x i1> %r
1177+
}
1178+
1179+
define <2 x i1> @cmp_excludes_zero_with_nonsplat_vec_wundef(<2 x i8> %a, <2 x i8> %b) {
1180+
; CHECK-LABEL: @cmp_excludes_zero_with_nonsplat_vec_wundef(
1181+
; CHECK-NEXT: [[C:%.*]] = icmp sge <2 x i8> [[A:%.*]], <i8 1, i8 undef>
1182+
; CHECK-NEXT: [[S:%.*]] = select <2 x i1> [[C]], <2 x i8> [[A]], <2 x i8> <i8 4, i8 5>
1183+
; CHECK-NEXT: [[AND:%.*]] = or <2 x i8> [[S]], [[B:%.*]]
1184+
; CHECK-NEXT: [[R:%.*]] = icmp eq <2 x i8> [[AND]], zeroinitializer
1185+
; CHECK-NEXT: ret <2 x i1> [[R]]
1186+
;
1187+
%c = icmp sge <2 x i8> %a, <i8 1, i8 undef>
1188+
%s = select <2 x i1> %c, <2 x i8> %a, <2 x i8> <i8 4, i8 5>
1189+
%and = or <2 x i8> %s, %b
1190+
%r = icmp eq <2 x i8> %and, zeroinitializer
1191+
ret <2 x i1> %r
1192+
}
1193+
1194+
define <2 x i1> @cmp_excludes_zero_with_nonsplat_vec_wpoison(<2 x i8> %a, <2 x i8> %b) {
1195+
; CHECK-LABEL: @cmp_excludes_zero_with_nonsplat_vec_wpoison(
1196+
; CHECK-NEXT: [[C:%.*]] = icmp sge <2 x i8> [[A:%.*]], <i8 1, i8 poison>
1197+
; CHECK-NEXT: [[S:%.*]] = select <2 x i1> [[C]], <2 x i8> [[A]], <2 x i8> <i8 4, i8 5>
1198+
; CHECK-NEXT: [[AND:%.*]] = or <2 x i8> [[S]], [[B:%.*]]
1199+
; CHECK-NEXT: [[R:%.*]] = icmp eq <2 x i8> [[AND]], zeroinitializer
1200+
; CHECK-NEXT: ret <2 x i1> [[R]]
1201+
;
1202+
%c = icmp sge <2 x i8> %a, <i8 1, i8 poison>
1203+
%s = select <2 x i1> %c, <2 x i8> %a, <2 x i8> <i8 4, i8 5>
1204+
%and = or <2 x i8> %s, %b
1205+
%r = icmp eq <2 x i8> %and, zeroinitializer
1206+
ret <2 x i1> %r
1207+
}
1208+
1209+
1210+
define <2 x i1> @cmp_excludes_zero_with_nonsplat_vec_fail(<2 x i8> %a, <2 x i8> %b) {
1211+
; CHECK-LABEL: @cmp_excludes_zero_with_nonsplat_vec_fail(
1212+
; CHECK-NEXT: [[C:%.*]] = icmp sge <2 x i8> [[A:%.*]], <i8 0, i8 4>
1213+
; CHECK-NEXT: [[S:%.*]] = select <2 x i1> [[C]], <2 x i8> [[A]], <2 x i8> <i8 4, i8 5>
1214+
; CHECK-NEXT: [[AND:%.*]] = or <2 x i8> [[S]], [[B:%.*]]
1215+
; CHECK-NEXT: [[R:%.*]] = icmp eq <2 x i8> [[AND]], zeroinitializer
1216+
; CHECK-NEXT: ret <2 x i1> [[R]]
1217+
;
1218+
%c = icmp sge <2 x i8> %a, <i8 0, i8 4>
1219+
%s = select <2 x i1> %c, <2 x i8> %a, <2 x i8> <i8 4, i8 5>
1220+
%and = or <2 x i8> %s, %b
1221+
%r = icmp eq <2 x i8> %and, zeroinitializer
1222+
ret <2 x i1> %r
1223+
}
1224+

0 commit comments

Comments
 (0)