Skip to content

Commit 8f9dcce

Browse files
committed
[InstCombine] Add tests for folding (icmp eq/ne (xor x, C0), C1); NFC
1 parent 7e7c29b commit 8f9dcce

File tree

1 file changed

+41
-1
lines changed

1 file changed

+41
-1
lines changed

llvm/test/Transforms/InstCombine/icmp-equality-xor.ll

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ define i1 @cmpeq_xor_cst1_commuted(i32 %a, i32 %b) {
8888
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP1]], 10
8989
; CHECK-NEXT: ret i1 [[CMP]]
9090
;
91-
%b2 = mul i32 %b, %b ; thwart complexity-based canonicalization
91+
%b2 = mul i32 %b, %b ; thwart complexity-based canonicalization
9292
%c = xor i32 %a, 10
9393
%cmp = icmp eq i32 %b2, %c
9494
ret i1 %cmp
@@ -145,3 +145,43 @@ entry:
145145
%cmp = icmp ne <2 x i8> %xor, <i8 9, i8 79>
146146
ret <2 x i1> %cmp
147147
}
148+
149+
declare void @use.i8(i8)
150+
define i1 @fold_xorC_eq0_multiuse(i8 %x, i8 %y) {
151+
; CHECK-LABEL: @fold_xorC_eq0_multiuse(
152+
; CHECK-NEXT: [[XX:%.*]] = xor i8 [[X:%.*]], [[Y:%.*]]
153+
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[XX]], 0
154+
; CHECK-NEXT: call void @use.i8(i8 [[XX]])
155+
; CHECK-NEXT: ret i1 [[R]]
156+
;
157+
%xx = xor i8 %x, %y
158+
%r = icmp eq i8 %xx, 0
159+
call void @use.i8(i8 %xx)
160+
ret i1 %r
161+
}
162+
163+
define i1 @fold_xorC_eq1_multiuse_fail(i8 %x, i8 %y) {
164+
; CHECK-LABEL: @fold_xorC_eq1_multiuse_fail(
165+
; CHECK-NEXT: [[XX:%.*]] = xor i8 [[X:%.*]], [[Y:%.*]]
166+
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[XX]], 1
167+
; CHECK-NEXT: call void @use.i8(i8 [[XX]])
168+
; CHECK-NEXT: ret i1 [[R]]
169+
;
170+
%xx = xor i8 %x, %y
171+
%r = icmp eq i8 %xx, 1
172+
call void @use.i8(i8 %xx)
173+
ret i1 %r
174+
}
175+
176+
define i1 @fold_xorC_neC_multiuse(i8 %x) {
177+
; CHECK-LABEL: @fold_xorC_neC_multiuse(
178+
; CHECK-NEXT: [[XX:%.*]] = xor i8 [[X:%.*]], 45
179+
; CHECK-NEXT: [[R:%.*]] = icmp ne i8 [[XX]], 67
180+
; CHECK-NEXT: call void @use.i8(i8 [[XX]])
181+
; CHECK-NEXT: ret i1 [[R]]
182+
;
183+
%xx = xor i8 %x, 45
184+
%r = icmp ne i8 %xx, 67
185+
call void @use.i8(i8 %xx)
186+
ret i1 %r
187+
}

0 commit comments

Comments
 (0)