Author: Tres Popp Date: 2021-01-19T10:31:48+01:00 New Revision: a003f26539cf4db744655e76c41f4c4a8913f116
URL: https://github.com/llvm/llvm-project/commit/a003f26539cf4db744655e76c41f4c4a8913f116 DIFF: https://github.com/llvm/llvm-project/commit/a003f26539cf4db744655e76c41f4c4a8913f116.diff LOG: [llvm] Prevent infinite loop in InstCombine of select statements This fixes an issue where the RHS and LHS the comparison operation creating the predicate were swapped back and forth forever. Differential Revision: https://reviews.llvm.org/D94934 Added: Modified: llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp Removed: ################################################################################ diff --git a/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp b/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp index 9360adc2d3ad..9870abb3b6cb 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp @@ -1123,7 +1123,7 @@ Instruction *InstCombinerImpl::foldSelectValueEquivalence(SelectInst &Sel, // else. Only do this if CmpRHS is a constant, as profitability is not // clear for other cases. // FIXME: The replacement could be performed recursively. - if (isa<Constant>(CmpRHS) && !isa<ConstantExpr>(CmpRHS)) + if (match(CmpRHS, m_ImmConstant()) && !match(CmpLHS, m_ImmConstant())) if (auto *I = dyn_cast<Instruction>(TrueVal)) if (I->hasOneUse()) for (Use &U : I->operands()) _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits