Skip to content

Commit 966d3ae

Browse files
committed
[InstSimplify] Add pre-commit tests for PR75692. NFC.
1 parent cab156c commit 966d3ae

File tree

2 files changed

+78
-0
lines changed

2 files changed

+78
-0
lines changed

llvm/test/Transforms/InstCombine/and-xor-merge.ll

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,42 @@ define i32 @PR38781(i32 %a, i32 %b) {
4040
%and = and i32 %b.lobit.not, %a.lobit.not
4141
ret i32 %and
4242
}
43+
44+
; (a ^ 4) & (a ^ ~4) -> 0
45+
define i32 @PR75692_1(i32 %x) {
46+
; CHECK-LABEL: @PR75692_1
47+
; CHECK-NEXT: ret i32 0
48+
;
49+
%t2 = xor i32 %x, 4
50+
%t3 = xor i32 %x, -5
51+
%t4 = and i32 %t2, %t3
52+
ret i32 %t4
53+
}
54+
55+
; (a ^ 4) & (a ^ 3) is not zero
56+
define i32 @PR75692_2(i32 %x) {
57+
; CHECK-LABEL: @PR75692_2
58+
; CHECK-NEXT: %t2 = xor i32 %x, 4
59+
; CHECK-NEXT: %t3 = xor i32 %x, -4
60+
; CHECK-NEXT: %t4 = and i32 %t2, %t3
61+
; CHECK-NEXT: ret i32 %t4
62+
;
63+
%t2 = xor i32 %x, 4
64+
%t3 = xor i32 %x, -4
65+
%t4 = and i32 %t2, %t3
66+
ret i32 %t4
67+
}
68+
69+
; (a ^ 4) & (b ^ ~4) is not zero, since a != b is possible
70+
define i32 @PR75692_3(i32 %x, i32 %y) {
71+
; CHECK-LABEL: @PR75692_3
72+
; CHECK-NEXT: %t2 = xor i32 %x, 4
73+
; CHECK-NEXT: %t3 = xor i32 %y, -5
74+
; CHECK-NEXT: %t4 = and i32 %t2, %t3
75+
; CHECK-NEXT: ret i32 %t4
76+
;
77+
%t2 = xor i32 %x, 4
78+
%t3 = xor i32 %y, -5
79+
%t4 = and i32 %t2, %t3
80+
ret i32 %t4
81+
}

llvm/test/Transforms/InstCombine/or-xor.ll

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1055,3 +1055,42 @@ define i8 @or_nand_xor_common_op_commute3_use3(i8 %x, i8 %y, i8 %z) {
10551055
%r = or i8 %xor, %nand
10561056
ret i8 %r
10571057
}
1058+
1059+
; (a ^ 4) & (a ^ ~4) -> -1
1060+
define i32 @PR75692_1(i32 %x) {
1061+
; CHECK-LABEL: @PR75692_1(
1062+
; CHECK-NEXT: ret i32 -1
1063+
;
1064+
%t2 = xor i32 %x, 4
1065+
%t3 = xor i32 %x, -5
1066+
%t4 = or i32 %t2, %t3
1067+
ret i32 %t4
1068+
}
1069+
1070+
; (a ^ 4) & (a ^ 3) is not -1
1071+
define i32 @PR75692_2(i32 %x) {
1072+
; CHECK-LABEL: @PR75692_2
1073+
; CHECK-NEXT: %t2 = xor i32 %x, 4
1074+
; CHECK-NEXT: %t3 = xor i32 %x, -4
1075+
; CHECK-NEXT: %t4 = or i32 %t2, %t3
1076+
; CHECK-NEXT: ret i32 %t4
1077+
;
1078+
%t2 = xor i32 %x, 4
1079+
%t3 = xor i32 %x, -4
1080+
%t4 = or i32 %t2, %t3
1081+
ret i32 %t4
1082+
}
1083+
1084+
; (a ^ 4) & (b ^ ~4) is not -1, since a != b is possible
1085+
define i32 @PR75692_3(i32 %x, i32 %y) {
1086+
; CHECK-LABEL: @PR75692_3
1087+
; CHECK-NEXT: %t2 = xor i32 %x, 4
1088+
; CHECK-NEXT: %t3 = xor i32 %y, -5
1089+
; CHECK-NEXT: %t4 = or i32 %t2, %t3
1090+
; CHECK-NEXT: ret i32 %t4
1091+
;
1092+
%t2 = xor i32 %x, 4
1093+
%t3 = xor i32 %y, -5
1094+
%t4 = or i32 %t2, %t3
1095+
ret i32 %t4
1096+
}

0 commit comments

Comments
 (0)