Skip to content

Commit 9423bd0

Browse files
committed
[InstCombine] Add tests for folding (select (icmp eq (and x, y), 0), (add/xor x, y), F); NFC
1 parent ff24e9a commit 9423bd0

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

llvm/test/Transforms/InstCombine/select.ll

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55

66
target datalayout = "e-p:64:64-p1:16:16-p2:32:32:32-p3:64:64:64"
77

8+
declare void @use.i1(i1)
9+
declare void @use.i32(i32)
10+
811
define i1 @test5(i1 %C) {
912
; CHECK-LABEL: @test5(
1013
; CHECK-NEXT: [[NOT_C:%.*]] = xor i1 [[C:%.*]], true
@@ -4436,6 +4439,40 @@ define i32 @src_no_trans_select_and_eq0_xor_and(i32 %x, i32 %y) {
44364439
ret i32 %cond
44374440
}
44384441

4442+
define i32 @src_no_trans_select_and_eq0_xor_and_fail_multiuse(i32 %x, i32 %y) {
4443+
; CHECK-LABEL: @src_no_trans_select_and_eq0_xor_and_fail_multiuse(
4444+
; CHECK-NEXT: [[AND:%.*]] = and i32 [[X:%.*]], [[Y:%.*]]
4445+
; CHECK-NEXT: [[AND0:%.*]] = icmp eq i32 [[AND]], 0
4446+
; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[X]], [[Y]]
4447+
; CHECK-NEXT: call void @use.i32(i32 [[XOR]])
4448+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[AND0]], i32 [[XOR]], i32 [[AND]]
4449+
; CHECK-NEXT: ret i32 [[COND]]
4450+
;
4451+
%and = and i32 %x, %y
4452+
%and0 = icmp eq i32 %and, 0
4453+
%xor = xor i32 %x, %y
4454+
call void @use.i32(i32 %xor)
4455+
%cond = select i1 %and0, i32 %xor, i32 %and
4456+
ret i32 %cond
4457+
}
4458+
4459+
define i32 @src_no_trans_select_and_eq0_add(i32 %x, i32 %y, i32 %z) {
4460+
; CHECK-LABEL: @src_no_trans_select_and_eq0_add(
4461+
; CHECK-NEXT: [[AND:%.*]] = and i32 [[X:%.*]], [[Y:%.*]]
4462+
; CHECK-NEXT: [[AND0:%.*]] = icmp ne i32 [[AND]], 0
4463+
; CHECK-NEXT: call void @use.i1(i1 [[AND0]])
4464+
; CHECK-NEXT: [[ADD:%.*]] = add i32 [[X]], [[Y]]
4465+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[AND0]], i32 [[Z:%.*]], i32 [[ADD]]
4466+
; CHECK-NEXT: ret i32 [[COND]]
4467+
;
4468+
%and = and i32 %x, %y
4469+
%and0 = icmp ne i32 %and, 0
4470+
call void @use.i1(i1 %and0)
4471+
%add = add i32 %x, %y
4472+
%cond = select i1 %and0, i32 %z, i32 %add
4473+
ret i32 %cond
4474+
}
4475+
44394476
define i32 @src_no_trans_select_or_eq0_or_and(i32 %x, i32 %y) {
44404477
; CHECK-LABEL: @src_no_trans_select_or_eq0_or_and(
44414478
; CHECK-NEXT: [[OR:%.*]] = or i32 [[X:%.*]], [[Y:%.*]]

0 commit comments

Comments
 (0)