Skip to content

Commit f721409

Browse files
committed
[InstCombine] Clean up bitwise folds without one-use check
1 parent 8b14a46 commit f721409

File tree

3 files changed

+8
-28
lines changed

3 files changed

+8
-28
lines changed

llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3573,14 +3573,6 @@ Instruction *InstCombinerImpl::visitOr(BinaryOperator &I) {
35733573
if (match(Op1, m_c_Xor(m_c_And(m_Value(A), m_Specific(Op0)), m_Value(C))))
35743574
return BinaryOperator::CreateOr(Op0, C);
35753575

3576-
// ((B | C) & A) | B -> B | (A & C)
3577-
if (match(Op0, m_c_And(m_c_Or(m_Specific(Op1), m_Value(C)), m_Value(A))))
3578-
return BinaryOperator::CreateOr(Op1, Builder.CreateAnd(A, C));
3579-
3580-
// B | ((B | C) & A) -> B | (A & C)
3581-
if (match(Op1, m_c_And(m_c_Or(m_Specific(Op0), m_Value(C)), m_Value(A))))
3582-
return BinaryOperator::CreateOr(Op0, Builder.CreateAnd(A, C));
3583-
35843576
if (Instruction *DeMorgan = matchDeMorgansLaws(I, *this))
35853577
return DeMorgan;
35863578

@@ -3633,17 +3625,6 @@ Instruction *InstCombinerImpl::visitOr(BinaryOperator &I) {
36333625
Value *Nand = Builder.CreateNot(Builder.CreateAnd(A, B), "nand");
36343626
return BinaryOperator::CreateOr(Nand, C);
36353627
}
3636-
3637-
// A | (~A ^ B) --> ~B | A
3638-
// B | (A ^ ~B) --> ~A | B
3639-
if (Op1->hasOneUse() && match(A, m_Not(m_Specific(Op0)))) {
3640-
Value *NotB = Builder.CreateNot(B, B->getName() + ".not");
3641-
return BinaryOperator::CreateOr(NotB, Op0);
3642-
}
3643-
if (Op1->hasOneUse() && match(B, m_Not(m_Specific(Op0)))) {
3644-
Value *NotA = Builder.CreateNot(A, A->getName() + ".not");
3645-
return BinaryOperator::CreateOr(NotA, Op0);
3646-
}
36473628
}
36483629

36493630
// A | ~(A | B) -> A | ~B

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1111,8 +1111,8 @@ define i32 @or_xor_not_uses1(i32 %x, i32 %y) {
11111111
; CHECK-LABEL: @or_xor_not_uses1(
11121112
; CHECK-NEXT: [[NOT:%.*]] = xor i32 [[Y:%.*]], -1
11131113
; CHECK-NEXT: call void @use(i32 [[NOT]])
1114-
; CHECK-NEXT: [[X_NOT:%.*]] = xor i32 [[X:%.*]], -1
1115-
; CHECK-NEXT: [[OR1:%.*]] = or i32 [[X_NOT]], [[Y]]
1114+
; CHECK-NEXT: [[TMP1:%.*]] = xor i32 [[X:%.*]], -1
1115+
; CHECK-NEXT: [[OR1:%.*]] = or i32 [[TMP1]], [[Y]]
11161116
; CHECK-NEXT: ret i32 [[OR1]]
11171117
;
11181118
%not = xor i32 %y, -1

llvm/test/Transforms/InstCombine/or.ll

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -743,7 +743,7 @@ define i32 @test40d(i32 %a, i32 %b) {
743743

744744
define i32 @test45(i32 %x, i32 %y, i32 %z) {
745745
; CHECK-LABEL: @test45(
746-
; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[X:%.*]], [[Z:%.*]]
746+
; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[Z:%.*]], [[X:%.*]]
747747
; CHECK-NEXT: [[OR1:%.*]] = or i32 [[TMP1]], [[Y:%.*]]
748748
; CHECK-NEXT: ret i32 [[OR1]]
749749
;
@@ -757,7 +757,7 @@ define i32 @test45_uses1(i32 %x, i32 %y, i32 %z) {
757757
; CHECK-LABEL: @test45_uses1(
758758
; CHECK-NEXT: [[OR:%.*]] = or i32 [[Y:%.*]], [[Z:%.*]]
759759
; CHECK-NEXT: call void @use(i32 [[OR]])
760-
; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[X:%.*]], [[Z]]
760+
; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[Z]], [[X:%.*]]
761761
; CHECK-NEXT: [[OR1:%.*]] = or i32 [[TMP1]], [[Y]]
762762
; CHECK-NEXT: ret i32 [[OR1]]
763763
;
@@ -773,8 +773,7 @@ define i32 @test45_uses2(i32 %x, i32 %y, i32 %z) {
773773
; CHECK-NEXT: [[OR:%.*]] = or i32 [[Y:%.*]], [[Z:%.*]]
774774
; CHECK-NEXT: [[AND:%.*]] = and i32 [[OR]], [[X:%.*]]
775775
; CHECK-NEXT: call void @use(i32 [[AND]])
776-
; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[X]], [[Z]]
777-
; CHECK-NEXT: [[OR1:%.*]] = or i32 [[TMP1]], [[Y]]
776+
; CHECK-NEXT: [[OR1:%.*]] = or i32 [[AND]], [[Y]]
778777
; CHECK-NEXT: ret i32 [[OR1]]
779778
;
780779
%or = or i32 %y, %z
@@ -787,7 +786,7 @@ define i32 @test45_uses2(i32 %x, i32 %y, i32 %z) {
787786
define i32 @test45_commuted1(i32 %x, i32 %y, i32 %z) {
788787
; CHECK-LABEL: @test45_commuted1(
789788
; CHECK-NEXT: [[YY:%.*]] = mul i32 [[Y:%.*]], [[Y]]
790-
; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[X:%.*]], [[Z:%.*]]
789+
; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[Z:%.*]], [[X:%.*]]
791790
; CHECK-NEXT: [[OR1:%.*]] = or i32 [[YY]], [[TMP1]]
792791
; CHECK-NEXT: ret i32 [[OR1]]
793792
;
@@ -803,7 +802,7 @@ define i32 @test45_commuted2(i32 %x, i32 %y, i32 %z) {
803802
; CHECK-NEXT: [[YY:%.*]] = mul i32 [[Y:%.*]], [[Y]]
804803
; CHECK-NEXT: [[XX:%.*]] = mul i32 [[X:%.*]], [[X]]
805804
; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[XX]], [[Z:%.*]]
806-
; CHECK-NEXT: [[OR1:%.*]] = or i32 [[YY]], [[TMP1]]
805+
; CHECK-NEXT: [[OR1:%.*]] = or i32 [[TMP1]], [[YY]]
807806
; CHECK-NEXT: ret i32 [[OR1]]
808807
;
809808
%yy = mul i32 %y, %y ; thwart complexity-based ordering
@@ -819,7 +818,7 @@ define i32 @test45_commuted3(i32 %x, i32 %y, i32 %z) {
819818
; CHECK-NEXT: [[YY:%.*]] = mul i32 [[Y:%.*]], [[Y]]
820819
; CHECK-NEXT: [[ZZ:%.*]] = mul i32 [[Z:%.*]], [[Z]]
821820
; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[ZZ]], [[X:%.*]]
822-
; CHECK-NEXT: [[OR1:%.*]] = or i32 [[YY]], [[TMP1]]
821+
; CHECK-NEXT: [[OR1:%.*]] = or i32 [[TMP1]], [[YY]]
823822
; CHECK-NEXT: ret i32 [[OR1]]
824823
;
825824
%yy = mul i32 %y, %y ; thwart complexity-based ordering

0 commit comments

Comments
 (0)