[llvm] e39bbe9 - [ConstraintElimination] Add test cases from PR49819.

Florian Hahn via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 3 03:09:31 PST 2022


Author: Florian Hahn
Date: 2022-02-03T11:09:10Z
New Revision: e39bbe9a8355b7dc610fac7a55dec0c63ff22e32

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

LOG: [ConstraintElimination] Add test cases from PR49819.

Added: 
    

Modified: 
    llvm/test/Transforms/ConstraintElimination/dom.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/ConstraintElimination/dom.ll b/llvm/test/Transforms/ConstraintElimination/dom.ll
index 965286df5d646..1b161eb5c1ee1 100644
--- a/llvm/test/Transforms/ConstraintElimination/dom.ll
+++ b/llvm/test/Transforms/ConstraintElimination/dom.ll
@@ -530,3 +530,79 @@ exit.1:
   %t.1 = icmp ule i8 %y, 100
   ret i1 %t.1
 }
+
+; Test case from PR49819.
+define i1 @both_branch_to_same_block(i4 %x) {
+; CHECK-LABEL: @both_branch_to_same_block(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[C_1:%.*]] = icmp ne i4 [[X:%.*]], 0
+; CHECK-NEXT:    br i1 [[C_1]], label [[EXIT:%.*]], label [[EXIT]]
+; CHECK:       exit:
+; CHECK-NEXT:    [[C_2:%.*]] = icmp ne i4 [[X]], 0
+; CHECK-NEXT:    [[C_3:%.*]] = icmp eq i4 [[X]], 0
+; CHECK-NEXT:    [[RES:%.*]] = xor i1 true, true
+; CHECK-NEXT:    ret i1 [[RES]]
+;
+entry:
+  %c.1 = icmp ne i4 %x, 0
+  br i1 %c.1, label %exit, label %exit
+
+exit:
+  %c.2 = icmp ne i4 %x, 0
+  %c.3 = icmp eq i4 %x, 0
+  %res = xor i1 %c.2, %c.3
+  ret i1 %res
+}
+
+define i1 @both_branch_to_same_block_and(i4 %x, i4 %y) {
+; CHECK-LABEL: @both_branch_to_same_block_and(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[C_1:%.*]] = icmp ne i4 [[X:%.*]], 0
+; CHECK-NEXT:    [[C_2:%.*]] = icmp ne i4 [[Y:%.*]], -6
+; CHECK-NEXT:    [[AND:%.*]] = and i1 [[C_1]], [[C_2]]
+; CHECK-NEXT:    br i1 [[AND]], label [[EXIT:%.*]], label [[EXIT]]
+; CHECK:       exit:
+; CHECK-NEXT:    [[C_3:%.*]] = icmp ne i4 [[X]], 0
+; CHECK-NEXT:    [[C_4:%.*]] = icmp eq i4 [[X]], 0
+; CHECK-NEXT:    [[RES:%.*]] = xor i1 true, false
+; CHECK-NEXT:    ret i1 [[RES]]
+;
+entry:
+  %c.1 = icmp ne i4 %x, 0
+  %c.2 = icmp ne i4 %y, 10
+  %and = and i1 %c.1, %c.2
+  br i1 %and, label %exit, label %exit
+
+exit:
+  %c.3 = icmp ne i4 %x, 0
+  %c.4 = icmp eq i4 %x, 0
+  %res = xor i1 %c.3, %c.4
+  ret i1 %res
+}
+
+
+define i1 @both_branch_to_same_block_or(i4 %x, i4 %y) {
+; CHECK-LABEL: @both_branch_to_same_block_or(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[C_1:%.*]] = icmp ne i4 [[X:%.*]], 0
+; CHECK-NEXT:    [[C_2:%.*]] = icmp ne i4 [[Y:%.*]], -6
+; CHECK-NEXT:    [[OR:%.*]] = or i1 [[C_1]], [[C_2]]
+; CHECK-NEXT:    br i1 [[OR]], label [[EXIT:%.*]], label [[EXIT]]
+; CHECK:       exit:
+; CHECK-NEXT:    [[C_3:%.*]] = icmp ne i4 [[X]], 0
+; CHECK-NEXT:    [[C_4:%.*]] = icmp eq i4 [[X]], 0
+; CHECK-NEXT:    [[RES:%.*]] = xor i1 false, true
+; CHECK-NEXT:    ret i1 [[RES]]
+;
+entry:
+  %c.1 = icmp ne i4 %x, 0
+  %c.2 = icmp ne i4 %y, 10
+  %or = or i1 %c.1, %c.2
+  br i1 %or, label %exit, label %exit
+
+exit:
+  %c.3 = icmp ne i4 %x, 0
+  %c.4 = icmp eq i4 %x, 0
+  %res = xor i1 %c.3, %c.4
+  ret i1 %res
+}


        


More information about the llvm-commits mailing list