[llvm] [InstCombine] Opt phi(freeze(undef), C) -> phi(C, C) (PR #161181)

via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 29 11:09:50 PDT 2025


================
@@ -5179,8 +5179,51 @@ 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;
+
+        C = cast<Constant>(V);
----------------
mikael-nilsson-arm wrote:

Added a test for this case and updated the code.

https://github.com/llvm/llvm-project/pull/161181


More information about the llvm-commits mailing list