[llvm] [InstCombine] Opt phi(freeze(undef), C) -> phi(C, C) (PR #161181)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 1 00:23:03 PDT 2025
================
@@ -5179,9 +5180,35 @@ Instruction *InstCombinerImpl::visitFreeze(FreezeInst &I) {
// TODO: This could use getBinopAbsorber() / getBinopIdentity() to avoid
// duplicating logic for binops at least.
auto getUndefReplacement = [&](Type *Ty) {
- Value *BestValue = nullptr;
+ auto pickCommonConstantFromPHI = [](PHINode &PN) -> Value * {
+ // phi(freeze(undef), C, C). Choose C for freeze so the PHI can be
+ // removed.
+ Constant *BestValue = nullptr;
+ Constant *C = nullptr;
+ for (Value *V : PN.incoming_values()) {
+ if (match(V, m_Freeze(m_Undef())))
+ continue;
+
+ if (!isa<Constant>(V))
+ return nullptr;
+
+ if (!isGuaranteedNotToBeUndefOrPoison(V))
+ return nullptr;
+
+ C = cast<Constant>(V);
+
+ if (BestValue && BestValue != C)
+ return nullptr;
+
+ BestValue = C;
+ }
+ return BestValue;
+ };
+
Value *NullValue = Constant::getNullValue(Ty);
- for (const auto *U : I.users()) {
+
+ Value *BestValue = nullptr;
----------------
mikael-nilsson-arm wrote:
Seems like I have added space between NullValue and BestValue, will undo it.
https://github.com/llvm/llvm-project/pull/161181
More information about the llvm-commits
mailing list