Author: Alexander Kornienko Date: 2025-01-23T15:40:05+01:00 New Revision: 8573475d5cc1c40679a86d6992a42e5c564a1f23
URL: https://github.com/llvm/llvm-project/commit/8573475d5cc1c40679a86d6992a42e5c564a1f23 DIFF: https://github.com/llvm/llvm-project/commit/8573475d5cc1c40679a86d6992a42e5c564a1f23.diff LOG: Revert "[InstCombine] Teach foldSelectOpOp about samesign (#122723)" This reverts commit 48757e02ba2c1651c268351d062f80923baceda4. Added: Modified: llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp llvm/test/Transforms/InstCombine/select-cmp.ll Removed: ################################################################################ diff --git a/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp b/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp index d5d9a829c3068a..f66a976ccb47fe 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp @@ -428,10 +428,10 @@ Instruction *InstCombinerImpl::foldSelectOpOp(SelectInst &SI, Instruction *TI, CmpPredicate TPred, FPred; if (match(TI, m_ICmp(TPred, m_Value(), m_Value())) && match(FI, m_ICmp(FPred, m_Value(), m_Value()))) { - bool Swapped = ICmpInst::isRelational(FPred) && - CmpPredicate::getMatching( - TPred, ICmpInst::getSwappedCmpPredicate(FPred)); - if (CmpPredicate::getMatching(TPred, FPred) || Swapped) { + // FIXME: Use CmpPredicate::getMatching here. + CmpInst::Predicate T = TPred, F = FPred; + if (T == F || T == ICmpInst::getSwappedCmpPredicate(F)) { + bool Swapped = T != F; if (Value *MatchOp = getCommonOp(TI, FI, ICmpInst::isEquality(TPred), Swapped)) { Value *NewSel = Builder.CreateSelect(Cond, OtherOpT, OtherOpF, diff --git a/llvm/test/Transforms/InstCombine/select-cmp.ll b/llvm/test/Transforms/InstCombine/select-cmp.ll index 7e5d5821d9f6a7..f7505bd85f89eb 100644 --- a/llvm/test/Transforms/InstCombine/select-cmp.ll +++ b/llvm/test/Transforms/InstCombine/select-cmp.ll @@ -23,18 +23,6 @@ define i1 @icmp_ne_common_op00(i1 %c, i6 %x, i6 %y, i6 %z) { ret i1 %r } -define i1 @icmp_ne_samesign_common(i1 %c, i6 %x, i6 %y, i6 %z) { -; CHECK-LABEL: @icmp_ne_samesign_common( -; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]] -; CHECK-NEXT: [[R:%.*]] = icmp ne i6 [[X:%.*]], [[R_V]] -; CHECK-NEXT: ret i1 [[R]] -; - %cmp1 = icmp samesign ne i6 %x, %y - %cmp2 = icmp ne i6 %x, %z - %r = select i1 %c, i1 %cmp1, i1 %cmp2 - ret i1 %r -} - define i1 @icmp_ne_common_op01(i1 %c, i3 %x, i3 %y, i3 %z) { ; CHECK-LABEL: @icmp_ne_common_op01( ; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i3 [[Y:%.*]], i3 [[Z:%.*]] @@ -83,18 +71,6 @@ define i1 @icmp_eq_common_op00(i1 %c, i5 %x, i5 %y, i5 %z) { ret i1 %r } -define i1 @icmp_eq_samesign_common(i1 %c, i5 %x, i5 %y, i5 %z) { -; CHECK-LABEL: @icmp_eq_samesign_common( -; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i5 [[Y:%.*]], i5 [[Z:%.*]] -; CHECK-NEXT: [[R:%.*]] = icmp eq i5 [[X:%.*]], [[R_V]] -; CHECK-NEXT: ret i1 [[R]] -; - %cmp1 = icmp eq i5 %x, %y - %cmp2 = icmp samesign eq i5 %x, %z - %r = select i1 %c, i1 %cmp1, i1 %cmp2 - ret i1 %r -} - define <5 x i1> @icmp_eq_common_op01(<5 x i1> %c, <5 x i7> %x, <5 x i7> %y, <5 x i7> %z) { ; CHECK-LABEL: @icmp_eq_common_op01( ; CHECK-NEXT: [[R_V:%.*]] = select <5 x i1> [[C:%.*]], <5 x i7> [[Y:%.*]], <5 x i7> [[Z:%.*]] @@ -158,18 +134,6 @@ define i1 @icmp_slt_common(i1 %c, i6 %x, i6 %y, i6 %z) { ret i1 %r } -define i1 @icmp_slt_samesign_common(i1 %c, i6 %x, i6 %y, i6 %z) { -; CHECK-LABEL: @icmp_slt_samesign_common( -; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]] -; CHECK-NEXT: [[R:%.*]] = icmp ult i6 [[X:%.*]], [[R_V]] -; CHECK-NEXT: ret i1 [[R]] -; - %cmp1 = icmp samesign ult i6 %x, %y - %cmp2 = icmp slt i6 %x, %z - %r = select i1 %c, i1 %cmp1, i1 %cmp2 - ret i1 %r -} - define i1 @icmp_sgt_common(i1 %c, i6 %x, i6 %y, i6 %z) { ; CHECK-LABEL: @icmp_sgt_common( ; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]] @@ -182,18 +146,6 @@ define i1 @icmp_sgt_common(i1 %c, i6 %x, i6 %y, i6 %z) { ret i1 %r } -define i1 @icmp_sgt_samesign_common(i1 %c, i6 %x, i6 %y, i6 %z) { -; CHECK-LABEL: @icmp_sgt_samesign_common( -; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]] -; CHECK-NEXT: [[R:%.*]] = icmp ugt i6 [[X:%.*]], [[R_V]] -; CHECK-NEXT: ret i1 [[R]] -; - %cmp1 = icmp samesign ugt i6 %x, %y - %cmp2 = icmp sgt i6 %x, %z - %r = select i1 %c, i1 %cmp1, i1 %cmp2 - ret i1 %r -} - define i1 @icmp_sle_common(i1 %c, i6 %x, i6 %y, i6 %z) { ; CHECK-LABEL: @icmp_sle_common( ; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]] @@ -206,18 +158,6 @@ define i1 @icmp_sle_common(i1 %c, i6 %x, i6 %y, i6 %z) { ret i1 %r } -define i1 @icmp_sle_samesign_common(i1 %c, i6 %x, i6 %y, i6 %z) { -; CHECK-LABEL: @icmp_sle_samesign_common( -; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]] -; CHECK-NEXT: [[R:%.*]] = icmp sge i6 [[X:%.*]], [[R_V]] -; CHECK-NEXT: ret i1 [[R]] -; - %cmp1 = icmp sle i6 %y, %x - %cmp2 = icmp samesign ule i6 %z, %x - %r = select i1 %c, i1 %cmp1, i1 %cmp2 - ret i1 %r -} - define i1 @icmp_sge_common(i1 %c, i6 %x, i6 %y, i6 %z) { ; CHECK-LABEL: @icmp_sge_common( ; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]] @@ -230,18 +170,6 @@ define i1 @icmp_sge_common(i1 %c, i6 %x, i6 %y, i6 %z) { ret i1 %r } -define i1 @icmp_sge_samesign_common(i1 %c, i6 %x, i6 %y, i6 %z) { -; CHECK-LABEL: @icmp_sge_samesign_common( -; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]] -; CHECK-NEXT: [[R:%.*]] = icmp sle i6 [[X:%.*]], [[R_V]] -; CHECK-NEXT: ret i1 [[R]] -; - %cmp1 = icmp sge i6 %y, %x - %cmp2 = icmp samesign uge i6 %z, %x - %r = select i1 %c, i1 %cmp1, i1 %cmp2 - ret i1 %r -} - define i1 @icmp_slt_sgt_common(i1 %c, i6 %x, i6 %y, i6 %z) { ; CHECK-LABEL: @icmp_slt_sgt_common( ; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]] @@ -254,18 +182,6 @@ define i1 @icmp_slt_sgt_common(i1 %c, i6 %x, i6 %y, i6 %z) { ret i1 %r } -define i1 @icmp_slt_sgt_samesign_common(i1 %c, i6 %x, i6 %y, i6 %z) { -; CHECK-LABEL: @icmp_slt_sgt_samesign_common( -; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]] -; CHECK-NEXT: [[R:%.*]] = icmp ult i6 [[X:%.*]], [[R_V]] -; CHECK-NEXT: ret i1 [[R]] -; - %cmp1 = icmp samesign ult i6 %x, %y - %cmp2 = icmp sgt i6 %z, %x - %r = select i1 %c, i1 %cmp1, i1 %cmp2 - ret i1 %r -} - define i1 @icmp_sle_sge_common(i1 %c, i6 %x, i6 %y, i6 %z) { ; CHECK-LABEL: @icmp_sle_sge_common( ; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]] @@ -278,18 +194,6 @@ define i1 @icmp_sle_sge_common(i1 %c, i6 %x, i6 %y, i6 %z) { ret i1 %r } -define i1 @icmp_sle_sge_samesign_common(i1 %c, i6 %x, i6 %y, i6 %z) { -; CHECK-LABEL: @icmp_sle_sge_samesign_common( -; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]] -; CHECK-NEXT: [[R:%.*]] = icmp sge i6 [[X:%.*]], [[R_V]] -; CHECK-NEXT: ret i1 [[R]] -; - %cmp1 = icmp sle i6 %y, %x - %cmp2 = icmp samesign uge i6 %x, %z - %r = select i1 %c, i1 %cmp1, i1 %cmp2 - ret i1 %r -} - define i1 @icmp_ult_common(i1 %c, i6 %x, i6 %y, i6 %z) { ; CHECK-LABEL: @icmp_ult_common( ; CHECK-NEXT: [[R_V:%.*]] = select i1 [[C:%.*]], i6 [[Y:%.*]], i6 [[Z:%.*]] _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits