@@ -4584,10 +4584,9 @@ define i1 @redundant_sign_bit_count_ugt_31_30(i32 %x) {
4584
4584
4585
4585
define i1 @zext_bool_and_eq0 (i1 %x , i8 %y ) {
4586
4586
; CHECK-LABEL: @zext_bool_and_eq0(
4587
- ; CHECK-NEXT: [[TMP1:%.*]] = and i8 [[Y:%.*]], 1
4588
- ; CHECK-NEXT: [[TMP2:%.*]] = icmp ne i8 [[TMP1]], 0
4589
- ; CHECK-NEXT: [[TMP3:%.*]] = and i1 [[TMP2]], [[X:%.*]]
4590
- ; CHECK-NEXT: [[R:%.*]] = xor i1 [[TMP3]], true
4587
+ ; CHECK-NEXT: [[ZX:%.*]] = zext i1 [[X:%.*]] to i8
4588
+ ; CHECK-NEXT: [[A:%.*]] = and i8 [[ZX]], [[Y:%.*]]
4589
+ ; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[A]], 0
4591
4590
; CHECK-NEXT: ret i1 [[R]]
4592
4591
;
4593
4592
%zx = zext i1 %x to i8
@@ -4598,9 +4597,9 @@ define i1 @zext_bool_and_eq0(i1 %x, i8 %y) {
4598
4597
4599
4598
define <2 x i1 > @zext_bool_and_eq0_commute (<2 x i1 > %x , <2 x i8 > %p ) {
4600
4599
; CHECK-LABEL: @zext_bool_and_eq0_commute(
4601
- ; CHECK-NEXT: [[TMP1 :%.*]] = trunc <2 x i8 > [[P :%.*]] to <2 x i1 >
4602
- ; CHECK-NEXT: [[TMP2 :%.*]] = and <2 x i1 > [[TMP1 ]], [[X :%.*]]
4603
- ; CHECK-NEXT: [[R:%.*]] = xor <2 x i1 > [[TMP2 ]], <i1 true, i1 true>
4600
+ ; CHECK-NEXT: [[ZX :%.*]] = zext <2 x i1 > [[X :%.*]] to <2 x i8 >
4601
+ ; CHECK-NEXT: [[A :%.*]] = and <2 x i8 > [[ZX ]], [[P :%.*]]
4602
+ ; CHECK-NEXT: [[R:%.*]] = icmp eq <2 x i8 > [[A ]], zeroinitializer
4604
4603
; CHECK-NEXT: ret <2 x i1> [[R]]
4605
4604
;
4606
4605
%y = mul <2 x i8 > %p , %p ; thwart complexity-based canonicalization
@@ -4612,9 +4611,9 @@ define <2 x i1> @zext_bool_and_eq0_commute(<2 x i1> %x, <2 x i8> %p) {
4612
4611
4613
4612
define i1 @zext_bool_and_ne0 (i1 %x , i8 %y ) {
4614
4613
; CHECK-LABEL: @zext_bool_and_ne0(
4615
- ; CHECK-NEXT: [[TMP1 :%.*]] = and i8 [[Y :%.*]], 1
4616
- ; CHECK-NEXT: [[TMP2 :%.*]] = icmp ne i8 [[TMP1 ]], 0
4617
- ; CHECK-NEXT: [[R:%.*]] = and i1 [[TMP2 ]], [[X:%.*]]
4614
+ ; CHECK-NEXT: [[ZX :%.*]] = zext i1 [[X :%.*]] to i8
4615
+ ; CHECK-NEXT: [[A :%.*]] = and i8 [[ZX ]], [[Y:%.*]]
4616
+ ; CHECK-NEXT: [[R:%.*]] = icmp ne i8 [[A ]], 0
4618
4617
; CHECK-NEXT: ret i1 [[R]]
4619
4618
;
4620
4619
%zx = zext i1 %x to i8
@@ -4664,8 +4663,6 @@ define i1 @zext_bool_or_eq0(i1 %x, i8 %y) {
4664
4663
ret i1 %r
4665
4664
}
4666
4665
4667
- ; negative test - extra use
4668
-
4669
4666
define i1 @zext_bool_and_eq0_use (i1 %x , i64 %y ) {
4670
4667
; CHECK-LABEL: @zext_bool_and_eq0_use(
4671
4668
; CHECK-NEXT: [[ZX:%.*]] = zext i1 [[X:%.*]] to i64
@@ -4681,8 +4678,6 @@ define i1 @zext_bool_and_eq0_use(i1 %x, i64 %y) {
4681
4678
ret i1 %r
4682
4679
}
4683
4680
4684
- ; negative test - extra use
4685
-
4686
4681
define i1 @zext_bool_and_ne0_use (i1 %x , i64 %y ) {
4687
4682
; CHECK-LABEL: @zext_bool_and_ne0_use(
4688
4683
; CHECK-NEXT: [[ZX:%.*]] = zext i1 [[X:%.*]] to i64
@@ -4698,8 +4693,6 @@ define i1 @zext_bool_and_ne0_use(i1 %x, i64 %y) {
4698
4693
ret i1 %r
4699
4694
}
4700
4695
4701
- ; negative test - must zext from i1
4702
-
4703
4696
define i1 @zext_notbool_and_ne0 (i2 %x , i8 %y ) {
4704
4697
; CHECK-LABEL: @zext_notbool_and_ne0(
4705
4698
; CHECK-NEXT: [[ZX:%.*]] = zext i2 [[X:%.*]] to i8
0 commit comments