Revert "[EarlyCSE] Equivalent SELECTs should hash equally"
authorMichael Liao <michael.hliao@gmail.com>
Fri, 11 Sep 2020 02:37:35 +0000 (22:37 -0400)
committerMichael Liao <michael.hliao@gmail.com>
Fri, 11 Sep 2020 02:37:35 +0000 (22:37 -0400)
This reverts commit c9826829d74e637163fdb0351870b8204e62d6e6 as it
breaks regression tests.

llvm/lib/Transforms/Scalar/EarlyCSE.cpp
llvm/test/Transforms/EarlyCSE/commute.ll

index f0d3f90..b655204 100644 (file)
@@ -191,19 +191,6 @@ static bool matchSelectWithOptionalNotCond(Value *V, Value *&Cond, Value *&A,
     Pred = ICmpInst::getSwappedPredicate(Pred);
   }
 
-  // Check for inverted variants of min/max by swapping operands.
-  switch (Pred) {
-  case CmpInst::ICMP_ULE:
-  case CmpInst::ICMP_UGE:
-  case CmpInst::ICMP_SLE:
-  case CmpInst::ICMP_SGE:
-    Pred = CmpInst::getInversePredicate(Pred);
-    std::swap(A, B);
-    break;
-  default:
-    break;
-  }
-
   switch (Pred) {
   case CmpInst::ICMP_UGT: Flavor = SPF_UMAX; break;
   case CmpInst::ICMP_ULT: Flavor = SPF_UMIN; break;
index f5868a5..57c5a85 100644 (file)
@@ -684,25 +684,6 @@ define i32 @select_not_invert_pred_cond_wrong_select_op(i8 %x, i8 %y, i32 %t, i3
   ret i32 %r
 }
 
-; This test is a reproducer for a bug involving inverted min/max selects
-; hashing differently but comparing as equal.  It exhibits such a pair of
-; values, and we run this test with -earlycse-debug-hash which would catch
-; the disagreement and fail if it regressed.
-define i32 @inverted_max(i32 %i) {
-; CHECK-LABEL: @inverted_max(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp sle i32 0, [[I:%.*]]
-; CHECK-NEXT:    [[M1:%.*]] = select i1 [[CMP]], i32 [[I]], i32 0
-; CHECK-NEXT:    [[CMPINV:%.*]] = icmp sgt i32 0, [[I:%.*]]
-; CHECK-NEXT:    [[M2:%.*]] = select i1 [[CMPINV]], i32 0, i32 [[I]]
-; CHECK-NEXT:    [[R:%.*]] = add i32 [[M1]], [[M2]]
-; CHECK-NEXT:    ret i32 [[R]]
-  %cmp = icmp sle i32 0, %i
-  %m1 = select i1 %cmp, i32 %i, i32 0
-  %cmpinv = icmp sgt i32 0, %i
-  %m2 = select i1 %cmpinv, i32 0, i32 %i
-  %r = add i32 %m1, %m2
-  ret i32 %r
-}
 
 ; This test is a reproducer for a bug involving inverted min/max selects
 ; hashing differently but comparing as equal.  It exhibits such a pair of