[llvm] a7265f9 - [InstCombine] add tests for branch on logical and/or; NFC

Sanjay Patel via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 31 12:53:11 PDT 2022


Author: Sanjay Patel
Date: 2022-10-31T15:51:45-04:00
New Revision: a7265f910242bb9bfea4717574a38cff436e34c9

URL: https://github.com/llvm/llvm-project/commit/a7265f910242bb9bfea4717574a38cff436e34c9
DIFF: https://github.com/llvm/llvm-project/commit/a7265f910242bb9bfea4717574a38cff436e34c9.diff

LOG: [InstCombine] add tests for branch on logical and/or; NFC

Added: 
    

Modified: 
    llvm/test/Transforms/InstCombine/branch.ll
    llvm/test/Transforms/PhaseOrdering/simplifycfg-options.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstCombine/branch.ll b/llvm/test/Transforms/InstCombine/branch.ll
index 7857aa29ebccf..9636bd51ecc0d 100644
--- a/llvm/test/Transforms/InstCombine/branch.ll
+++ b/llvm/test/Transforms/InstCombine/branch.ll
@@ -112,3 +112,77 @@ merge.2:
   %merge.cond.2 = phi i1 [false, %if.true.2], [true, %if.false.2]
   ret i1 %merge.cond.2
 }
+
+; if (x && !y) ret 42; ret 3
+
+define i32 @logical_and_not(i1 %x, i1 %y) {
+; CHECK-LABEL: @logical_and_not(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[NOTY:%.*]] = xor i1 [[Y:%.*]], true
+; CHECK-NEXT:    [[AND:%.*]] = select i1 [[X:%.*]], i1 [[NOTY]], i1 false
+; CHECK-NEXT:    br i1 [[AND]], label [[T:%.*]], label [[F:%.*]]
+; CHECK:       t:
+; CHECK-NEXT:    ret i32 42
+; CHECK:       f:
+; CHECK-NEXT:    ret i32 3
+;
+entry:
+  %noty = xor i1 %y, true
+  %and = select i1 %x, i1 %noty, i1 false
+  br i1 %and, label %t, label %f
+
+t:
+  ret i32 42
+
+f:
+  ret i32 3
+}
+
+; if (x && y || !x) ret 3; ret 42
+
+define i32 @logical_and_or(i1 %x, i1 %y) {
+; CHECK-LABEL: @logical_and_or(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[NOT_X:%.*]] = xor i1 [[X:%.*]], true
+; CHECK-NEXT:    [[AND:%.*]] = select i1 [[NOT_X]], i1 true, i1 [[Y:%.*]]
+; CHECK-NEXT:    br i1 [[AND]], label [[F:%.*]], label [[T:%.*]]
+; CHECK:       t:
+; CHECK-NEXT:    ret i32 42
+; CHECK:       f:
+; CHECK-NEXT:    ret i32 3
+;
+entry:
+  %and = select i1 %x, i1 %y, i1 true
+  br i1 %and, label %f, label %t
+
+t:
+  ret i32 42
+
+f:
+  ret i32 3
+}
+
+; if (!x || y) ret 3; ret 42
+
+define i32 @logical_or_not(i1 %x, i1 %y) {
+; CHECK-LABEL: @logical_or_not(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[NOTX:%.*]] = xor i1 [[X:%.*]], true
+; CHECK-NEXT:    [[AND:%.*]] = select i1 [[NOTX]], i1 true, i1 [[Y:%.*]]
+; CHECK-NEXT:    br i1 [[AND]], label [[F:%.*]], label [[T:%.*]]
+; CHECK:       t:
+; CHECK-NEXT:    ret i32 42
+; CHECK:       f:
+; CHECK-NEXT:    ret i32 3
+;
+entry:
+  %notx = xor i1 %x, true
+  %and = select i1 %notx, i1 true, i1 %y
+  br i1 %and, label %f, label %t
+
+t:
+  ret i32 42
+
+f:
+  ret i32 3
+}

diff  --git a/llvm/test/Transforms/PhaseOrdering/simplifycfg-options.ll b/llvm/test/Transforms/PhaseOrdering/simplifycfg-options.ll
index 91fe403e06d9a..bc1177f1a704c 100644
--- a/llvm/test/Transforms/PhaseOrdering/simplifycfg-options.ll
+++ b/llvm/test/Transforms/PhaseOrdering/simplifycfg-options.ll
@@ -15,7 +15,7 @@ define i1 @PR33605(i32 %a, i32 %b, i32* %c) {
 ; CHECK-NEXT:    br i1 [[CMP]], label [[IF_END:%.*]], label [[IF_THEN:%.*]]
 ; CHECK:       if.then:
 ; CHECK-NEXT:    store i32 [[OR]], i32* [[ARRAYIDX]], align 4
-; CHECK-NEXT:    call void @foo()
+; CHECK-NEXT:    tail call void @foo()
 ; CHECK-NEXT:    br label [[IF_END]]
 ; CHECK:       if.end:
 ; CHECK-NEXT:    [[TMP1:%.*]] = xor i1 [[CMP]], true
@@ -24,7 +24,7 @@ define i1 @PR33605(i32 %a, i32 %b, i32* %c) {
 ; CHECK-NEXT:    br i1 [[CMP_1]], label [[IF_END_1:%.*]], label [[IF_THEN_1:%.*]]
 ; CHECK:       if.then.1:
 ; CHECK-NEXT:    store i32 [[OR]], i32* [[C]], align 4
-; CHECK-NEXT:    call void @foo()
+; CHECK-NEXT:    tail call void @foo()
 ; CHECK-NEXT:    br label [[IF_END_1]]
 ; CHECK:       if.end.1:
 ; CHECK-NEXT:    [[CHANGED_1_OFF0_1:%.*]] = phi i1 [ true, [[IF_THEN_1]] ], [ [[TMP1]], [[IF_END]] ]
@@ -102,3 +102,32 @@ end:
   ret double %max
 }
 
+define i1 @PR58313(i1 %lhs, i1 %rhs) {
+; CHECK-LABEL: @PR58313(
+; CHECK-NEXT:  andandend:
+; CHECK-NEXT:    [[TMP0:%.*]] = xor i1 [[RHS:%.*]], true
+; CHECK-NEXT:    [[ANDANDVAL:%.*]] = select i1 [[LHS:%.*]], i1 [[TMP0]], i1 false
+; CHECK-NEXT:    br i1 [[ANDANDVAL]], label [[OROREND:%.*]], label [[OROR:%.*]]
+; CHECK:       oror:
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i1 [[LHS]], true
+; CHECK-NEXT:    [[ANDANDVAL3:%.*]] = select i1 [[TMP1]], i1 [[RHS]], i1 false
+; CHECK-NEXT:    br label [[OROREND]]
+; CHECK:       ororend:
+; CHECK-NEXT:    [[ORORVAL:%.*]] = phi i1 [ true, [[ANDANDEND:%.*]] ], [ [[ANDANDVAL3]], [[OROR]] ]
+; CHECK-NEXT:    ret i1 [[ORORVAL]]
+;
+andandend:
+  %0 = xor i1 %rhs, true
+  %andandval = select i1 %lhs, i1 %0, i1 false
+  br i1 %andandval, label %ororend, label %oror
+
+oror:
+  %1 = xor i1 %lhs, true
+  %andandval3 = select i1 %1, i1 %rhs, i1 false
+  br label %ororend
+
+ororend:
+  %ororval = phi i1 [ true, %andandend ], [ %andandval3, %oror ]
+  ret i1 %ororval
+}
+


        


More information about the llvm-commits mailing list