================ @@ -4813,15 +4813,22 @@ Instruction *InstCombinerImpl::visitFreeze(FreezeInst &I) { // TODO: This could use getBinopAbsorber() / getBinopIdentity() to avoid // duplicating logic for binops at least. auto getUndefReplacement = [&I](Type *Ty) { - Constant *BestValue = nullptr; - Constant *NullValue = Constant::getNullValue(Ty); + Value *BestValue = nullptr; + Value *NullValue = Constant::getNullValue(Ty); for (const auto *U : I.users()) { - Constant *C = NullValue; + Value *C = NullValue; if (match(U, m_Or(m_Value(), m_Value()))) C = ConstantInt::getAllOnesValue(Ty); else if (match(U, m_Select(m_Specific(&I), m_Constant(), m_Value()))) C = ConstantInt::getTrue(Ty); - + else if (I.hasOneUse() && ---------------- dtcxzyw wrote:
If `I` has only one use, it must have only one user. I would like to hoist this logic out of the loop. ``` if (I.hasOneUse() && match(I->user_back(), m_c_Select(m_Specific(&I), m_Value(Arm)) && isGuaranteedNotToBeUndefOrPoison(Arm, &AC, &DT, &I)) return Arm; // existing code Constant *BestValue = nullptr; Constant *NullValue = Constant::getNullValue(Ty); ... ``` https://github.com/llvm/llvm-project/pull/129776 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits