[llvm-branch-commits] [llvm] InstCombine: Support basic phis in SimplifyDemandedFPClass (PR #184124)

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Mon Mar 2 05:55:52 PST 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-llvm-transforms

Author: Matt Arsenault (arsenm)

<details>
<summary>Changes</summary>

Some complex function edge case epilogs are only handled under
some control flow paths (e.g. lgamma and erfcinv).

---

Patch is 33.40 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/184124.diff


5 Files Affected:

- (modified) llvm/lib/Transforms/InstCombine/InstCombineInternal.h (+1-1) 
- (modified) llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp (+102-42) 
- (modified) llvm/lib/Transforms/InstCombine/InstructionCombining.cpp (+2-1) 
- (modified) llvm/test/Transforms/InstCombine/simplify-demanded-fpclass-phi.ll (+20-37) 
- (modified) llvm/test/Transforms/InstCombine/simplify-demanded-fpclass.ll (+3-5) 


``````````diff
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineInternal.h b/llvm/lib/Transforms/InstCombine/InstCombineInternal.h
index 053a3a2b85b36..fd9f0675a3239 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineInternal.h
+++ b/llvm/lib/Transforms/InstCombine/InstCombineInternal.h
@@ -606,7 +606,7 @@ class LLVM_LIBRARY_VISIBILITY InstCombinerImpl final
 
   bool SimplifyDemandedFPClass(Instruction *I, unsigned Op,
                                FPClassTest DemandedMask, KnownFPClass &Known,
-                               unsigned Depth = 0);
+                               const SimplifyQuery &Q, unsigned Depth = 0);
 
   bool SimplifyDemandedInstructionFPClass(Instruction &Inst);
 
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp b/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp
index 456d39ecc30cb..5550d2ccdf351 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp
@@ -2281,7 +2281,8 @@ simplifyDemandedFPClassMinMax(KnownFPClass &Known, Intrinsic::ID IID,
 static Value *
 simplifyDemandedUseFPClassFPTrunc(InstCombinerImpl &IC, Instruction &I,
                                   FastMathFlags FMF, FPClassTest DemandedMask,
-                                  KnownFPClass &Known, unsigned Depth) {
+                                  KnownFPClass &Known, const SimplifyQuery &SQ,
+                                  unsigned Depth) {
 
   FPClassTest SrcDemandedMask = DemandedMask;
   if (DemandedMask & fcNan)
@@ -2305,7 +2306,8 @@ simplifyDemandedUseFPClassFPTrunc(InstCombinerImpl &IC, Instruction &I,
     SrcDemandedMask |= fcNegNormal;
 
   KnownFPClass KnownSrc;
-  if (IC.SimplifyDemandedFPClass(&I, 0, SrcDemandedMask, KnownSrc, Depth + 1))
+  if (IC.SimplifyDemandedFPClass(&I, 0, SrcDemandedMask, KnownSrc, SQ,
+                                 Depth + 1))
     return &I;
 
   Known = KnownFPClass::fptrunc(KnownSrc);
@@ -2341,7 +2343,7 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
       KnownFPClass KnownSrc;
       if (SimplifyDemandedFPClass(cast<Instruction>(FNegSrc), 0,
                                   llvm::unknown_sign(DemandedMask), KnownSrc,
-                                  Depth + 1))
+                                  SQ, Depth + 1))
         return I;
 
       FastMathFlags FabsFMF = cast<FPMathOperator>(FNegSrc)->getFastMathFlags();
@@ -2370,7 +2372,7 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
       break;
     }
 
-    if (SimplifyDemandedFPClass(I, 0, llvm::fneg(DemandedMask), Known,
+    if (SimplifyDemandedFPClass(I, 0, llvm::fneg(DemandedMask), Known, SQ,
                                 Depth + 1))
       return I;
     Known.fneg();
@@ -2418,7 +2420,8 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
       if (DemandedMask & fcNegInf)
         SrcDemandedMask |= fcNegNormal;
 
-      if (SimplifyDemandedFPClass(I, 0, SrcDemandedMask, KnownLHS, Depth + 1))
+      if (SimplifyDemandedFPClass(I, 0, SrcDemandedMask, KnownLHS, SQ,
+                                  Depth + 1))
         return I;
 
       Known = KnownFPClass::fadd_self(KnownLHS, Mode);
@@ -2433,8 +2436,10 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
       if (DemandedMask & fcInf)
         SrcDemandedMask |= fcInf;
 
-      if (SimplifyDemandedFPClass(I, 1, SrcDemandedMask, KnownRHS, Depth + 1) ||
-          SimplifyDemandedFPClass(I, 0, SrcDemandedMask, KnownLHS, Depth + 1))
+      if (SimplifyDemandedFPClass(I, 1, SrcDemandedMask, KnownRHS, SQ,
+                                  Depth + 1) ||
+          SimplifyDemandedFPClass(I, 0, SrcDemandedMask, KnownLHS, SQ,
+                                  Depth + 1))
         return I;
 
       Type *EltTy = VTy->getScalarType();
@@ -2508,7 +2513,8 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
 
     if (X == Y &&
         isGuaranteedNotToBeUndef(X, SQ.AC, SQ.CxtI, SQ.DT, Depth + 1)) {
-      if (SimplifyDemandedFPClass(I, 0, SrcDemandedMask, KnownLHS, Depth + 1))
+      if (SimplifyDemandedFPClass(I, 0, SrcDemandedMask, KnownLHS, SQ,
+                                  Depth + 1))
         return I;
       Type *EltTy = VTy->getScalarType();
 
@@ -2538,8 +2544,9 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
       return nullptr;
     }
 
-    if (SimplifyDemandedFPClass(I, 1, SrcDemandedMask, KnownRHS, Depth + 1) ||
-        SimplifyDemandedFPClass(I, 0, SrcDemandedMask, KnownLHS, Depth + 1))
+    if (SimplifyDemandedFPClass(I, 1, SrcDemandedMask, KnownRHS, SQ,
+                                Depth + 1) ||
+        SimplifyDemandedFPClass(I, 0, SrcDemandedMask, KnownLHS, SQ, Depth + 1))
       return I;
 
     if (FMF.noInfs()) {
@@ -2721,8 +2728,9 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
     }
 
     KnownFPClass KnownLHS, KnownRHS;
-    if (SimplifyDemandedFPClass(I, 0, LHSDemandedMask, KnownLHS, Depth + 1) ||
-        SimplifyDemandedFPClass(I, 1, RHSDemandedMask, KnownRHS, Depth + 1))
+    if (SimplifyDemandedFPClass(I, 0, LHSDemandedMask, KnownLHS, SQ,
+                                Depth + 1) ||
+        SimplifyDemandedFPClass(I, 1, RHSDemandedMask, KnownRHS, SQ, Depth + 1))
       return I;
 
     // nsz [+-]0 / x -> 0
@@ -2782,7 +2790,7 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
   }
   case Instruction::FPTrunc:
     return simplifyDemandedUseFPClassFPTrunc(*this, *I, FMF, DemandedMask,
-                                             Known, Depth);
+                                             Known, SQ, Depth);
   case Instruction::FPExt: {
     FPClassTest SrcDemandedMask = DemandedMask;
     if (DemandedMask & fcNan)
@@ -2795,7 +2803,7 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
       SrcDemandedMask |= fcPosSubnormal;
 
     KnownFPClass KnownSrc;
-    if (SimplifyDemandedFPClass(I, 0, SrcDemandedMask, KnownSrc, Depth + 1))
+    if (SimplifyDemandedFPClass(I, 0, SrcDemandedMask, KnownSrc, SQ, Depth + 1))
       return I;
 
     const fltSemantics &DstTy = VTy->getScalarType()->getFltSemantics();
@@ -2815,7 +2823,7 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
     case Intrinsic::fabs: {
       KnownFPClass KnownSrc;
       if (SimplifyDemandedFPClass(I, 0, llvm::inverse_fabs(DemandedMask),
-                                  KnownSrc, Depth + 1))
+                                  KnownSrc, SQ, Depth + 1))
         return I;
 
       if (Value *Simplified = simplifyDemandedFPClassFabs(
@@ -2825,14 +2833,14 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
       break;
     }
     case Intrinsic::arithmetic_fence:
-      if (SimplifyDemandedFPClass(I, 0, DemandedMask, Known, Depth + 1))
+      if (SimplifyDemandedFPClass(I, 0, DemandedMask, Known, SQ, Depth + 1))
         return I;
       break;
     case Intrinsic::copysign: {
       // Flip on more potentially demanded classes
       const FPClassTest DemandedMaskAnySign = llvm::unknown_sign(DemandedMask);
       KnownFPClass KnownMag;
-      if (SimplifyDemandedFPClass(CI, 0, DemandedMaskAnySign, KnownMag,
+      if (SimplifyDemandedFPClass(CI, 0, DemandedMaskAnySign, KnownMag, SQ,
                                   Depth + 1))
         return I;
 
@@ -2894,9 +2902,9 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
       if (CI->getArgOperand(0) == CI->getArgOperand(1) &&
           isGuaranteedNotToBeUndef(CI->getArgOperand(0), SQ.AC, SQ.CxtI, SQ.DT,
                                    Depth + 1)) {
-        if (SimplifyDemandedFPClass(CI, 0, SrcDemandedMask, KnownSrc[0],
+        if (SimplifyDemandedFPClass(CI, 0, SrcDemandedMask, KnownSrc[0], SQ,
                                     Depth + 1) ||
-            SimplifyDemandedFPClass(CI, 2, SrcDemandedMask, KnownSrc[2],
+            SimplifyDemandedFPClass(CI, 2, SrcDemandedMask, KnownSrc[2], SQ,
                                     Depth + 1))
           return I;
 
@@ -2906,7 +2914,7 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
       } else {
         for (int OpIdx = 0; OpIdx != 3; ++OpIdx) {
           if (SimplifyDemandedFPClass(CI, OpIdx, SrcDemandedMask,
-                                      KnownSrc[OpIdx], Depth + 1))
+                                      KnownSrc[OpIdx], SQ, Depth + 1))
             return CI;
         }
 
@@ -2935,9 +2943,10 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
               : fcAllFlags;
 
       KnownFPClass KnownLHS, KnownRHS;
-      if (SimplifyDemandedFPClass(CI, 1, SrcDemandedMask, KnownRHS,
+      if (SimplifyDemandedFPClass(CI, 1, SrcDemandedMask, KnownRHS, SQ,
                                   Depth + 1) ||
-          SimplifyDemandedFPClass(CI, 0, SrcDemandedMask, KnownLHS, Depth + 1))
+          SimplifyDemandedFPClass(CI, 0, SrcDemandedMask, KnownLHS, SQ,
+                                  Depth + 1))
         return I;
 
       Value *Simplified =
@@ -3036,7 +3045,8 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
 
       // TODO: This could really make use of KnownFPClass of specific value
       // range, (i.e., close enough to 1)
-      if (SimplifyDemandedFPClass(I, 0, SrcDemandedMask, KnownSrc, Depth + 1))
+      if (SimplifyDemandedFPClass(I, 0, SrcDemandedMask, KnownSrc, SQ,
+                                  Depth + 1))
         return I;
 
       // exp(+/-0) = 1
@@ -3113,7 +3123,8 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
         DemandedSrcMask |= fcPosNormal;
 
       KnownFPClass KnownSrc;
-      if (SimplifyDemandedFPClass(I, 0, DemandedSrcMask, KnownSrc, Depth + 1))
+      if (SimplifyDemandedFPClass(I, 0, DemandedSrcMask, KnownSrc, SQ,
+                                  Depth + 1))
         return I;
 
       Known = KnownFPClass::log(KnownSrc, Mode);
@@ -3134,7 +3145,8 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
         DemandedSrcMask |= fcPosSubnormal;
 
       KnownFPClass KnownSrc;
-      if (SimplifyDemandedFPClass(I, 0, DemandedSrcMask, KnownSrc, Depth + 1))
+      if (SimplifyDemandedFPClass(I, 0, DemandedSrcMask, KnownSrc, SQ,
+                                  Depth + 1))
         return I;
 
       // Infer the source cannot be negative if the result cannot be nan.
@@ -3192,7 +3204,8 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
         SrcDemandedMask |= fcNegFinite;
 
       KnownFPClass KnownSrc;
-      if (SimplifyDemandedFPClass(CI, 0, SrcDemandedMask, KnownSrc, Depth + 1))
+      if (SimplifyDemandedFPClass(CI, 0, SrcDemandedMask, KnownSrc, SQ,
+                                  Depth + 1))
         return CI;
 
       Type *EltTy = VTy->getScalarType();
@@ -3227,7 +3240,8 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
         DemandedSrcMask |= fcPosSubnormal | fcPosNormal;
 
       KnownFPClass KnownSrc;
-      if (SimplifyDemandedFPClass(CI, 0, DemandedSrcMask, KnownSrc, Depth + 1))
+      if (SimplifyDemandedFPClass(CI, 0, DemandedSrcMask, KnownSrc, SQ,
+                                  Depth + 1))
         return I;
 
       // Note: Possibly dropping snan quiet.
@@ -3287,7 +3301,7 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
     }
     case Intrinsic::fptrunc_round:
       return simplifyDemandedUseFPClassFPTrunc(*this, *CI, FMF, DemandedMask,
-                                               Known, Depth);
+                                               Known, SQ, Depth);
     case Intrinsic::canonicalize: {
       Type *EltTy = VTy->getScalarType();
 
@@ -3324,7 +3338,8 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
         KnownFPClass KnownSrc;
 
         // Simplify upstream operations before trying to simplify this call.
-        if (SimplifyDemandedFPClass(I, 0, SrcDemandedMask, KnownSrc, Depth + 1))
+        if (SimplifyDemandedFPClass(I, 0, SrcDemandedMask, KnownSrc, SQ,
+                                    Depth + 1))
           return I;
 
         // Perform the canonicalization to see if this folded to a constant.
@@ -3366,8 +3381,8 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
   }
   case Instruction::Select: {
     KnownFPClass KnownLHS, KnownRHS;
-    if (SimplifyDemandedFPClass(I, 2, DemandedMask, KnownRHS, Depth + 1) ||
-        SimplifyDemandedFPClass(I, 1, DemandedMask, KnownLHS, Depth + 1))
+    if (SimplifyDemandedFPClass(I, 2, DemandedMask, KnownRHS, SQ, Depth + 1) ||
+        SimplifyDemandedFPClass(I, 1, DemandedMask, KnownLHS, SQ, Depth + 1))
       return I;
 
     if (KnownLHS.isKnownNever(DemandedMask))
@@ -3385,15 +3400,16 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
   }
   case Instruction::ExtractElement: {
     // TODO: Handle demanded element mask
-    if (SimplifyDemandedFPClass(I, 0, DemandedMask, Known, Depth + 1))
+    if (SimplifyDemandedFPClass(I, 0, DemandedMask, Known, SQ, Depth + 1))
       return I;
     Known.knownNot(~DemandedMask);
     break;
   }
   case Instruction::InsertElement: {
     KnownFPClass KnownInserted, KnownVec;
-    if (SimplifyDemandedFPClass(I, 1, DemandedMask, KnownInserted, Depth + 1) ||
-        SimplifyDemandedFPClass(I, 0, DemandedMask, KnownVec, Depth + 1))
+    if (SimplifyDemandedFPClass(I, 1, DemandedMask, KnownInserted, SQ,
+                                Depth + 1) ||
+        SimplifyDemandedFPClass(I, 0, DemandedMask, KnownVec, SQ, Depth + 1))
       return I;
 
     // TODO: Use demanded elements logic from computeKnownFPClass
@@ -3403,8 +3419,8 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
   }
   case Instruction::ShuffleVector: {
     KnownFPClass KnownLHS, KnownRHS;
-    if (SimplifyDemandedFPClass(I, 1, DemandedMask, KnownRHS, Depth + 1) ||
-        SimplifyDemandedFPClass(I, 0, DemandedMask, KnownLHS, Depth + 1))
+    if (SimplifyDemandedFPClass(I, 1, DemandedMask, KnownRHS, SQ, Depth + 1) ||
+        SimplifyDemandedFPClass(I, 0, DemandedMask, KnownLHS, SQ, Depth + 1))
       return I;
 
     // TODO: This is overly conservative and should consider demanded elements,
@@ -3413,6 +3429,50 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
     Known.knownNot(~DemandedMask);
     break;
   }
+  case Instruction::PHI: {
+    const unsigned PhiRecursionLimit = MaxAnalysisRecursionDepth - 2;
+    if (Depth >= PhiRecursionLimit)
+      break;
+
+    PHINode *P = cast<PHINode>(I);
+    SimplifyQuery ContextSQ = SQ.getWithoutCondContext();
+
+    bool First = true;
+    bool Changed = false;
+    for (unsigned I = 0, E = P->getNumIncomingValues(); I != E; ++I) {
+      // TODO: Better support for self recursive phi
+      if (P->getIncomingValue(I) == P)
+        continue;
+
+      BasicBlock *PredBB = P->getIncomingBlock(I);
+      const Instruction *CtxI = PredBB->getTerminator();
+
+      // Attempt to simplify all incoming edges at a time. If we simplify one
+      // incoming edge, the phi may fold away, losing information on a later
+      // visit.
+      KnownFPClass KnownSrc;
+      if (SimplifyDemandedFPClass(
+              P, P->getOperandNumForIncomingValue(I), DemandedMask, KnownSrc,
+              ContextSQ.getWithInstruction(CtxI), Depth + 1)) {
+        // Fixup the other block references to the simplified value.
+        P->setIncomingValueForBlock(PredBB, P->getIncomingValue(I));
+        Changed = true;
+      }
+
+      if (First) {
+        Known = KnownSrc;
+        First = false;
+      } else {
+        Known |= KnownSrc;
+      }
+    }
+
+    if (Changed)
+      return P;
+
+    Known.knownNot(~DemandedMask);
+    break;
+  }
   case Instruction::ExtractValue: {
     Value *ExtractSrc;
     if (match(I, m_ExtractValue<0>(m_OneUse(m_Value(ExtractSrc))))) {
@@ -3433,7 +3493,7 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
             SrcDemandedMask |= fcNegInf;
 
           KnownFPClass KnownSrc;
-          if (SimplifyDemandedFPClass(II, 0, SrcDemandedMask, KnownSrc,
+          if (SimplifyDemandedFPClass(II, 0, SrcDemandedMask, KnownSrc, SQ,
                                       Depth + 1))
             return I;
 
@@ -3610,6 +3670,7 @@ Value *InstCombinerImpl::SimplifyMultipleUseDemandedFPClass(
 bool InstCombinerImpl::SimplifyDemandedFPClass(Instruction *I, unsigned OpNo,
                                                FPClassTest DemandedMask,
                                                KnownFPClass &Known,
+                                               const SimplifyQuery &SQ,
                                                unsigned Depth) {
   Use &U = I->getOperandUse(OpNo);
   Value *V = U.get();
@@ -3626,7 +3687,7 @@ bool InstCombinerImpl::SimplifyDemandedFPClass(Instruction *I, unsigned OpNo,
   Instruction *VInst = dyn_cast<Instruction>(V);
   if (!VInst) {
     // Handle constants and arguments
-    Known = computeKnownFPClass(V, fcAllFlags, SQ.getWithInstruction(I), Depth);
+    Known = computeKnownFPClass(V, fcAllFlags, SQ, Depth);
     Known.knownNot(~DemandedMask);
 
     if (Known.KnownFPClasses == fcNone) {
@@ -3659,13 +3720,12 @@ bool InstCombinerImpl::SimplifyDemandedFPClass(Instruction *I, unsigned OpNo,
 
   if (VInst->hasOneUse()) {
     // If the instruction has one use, we can directly simplify it.
-    NewVal = SimplifyDemandedUseFPClass(VInst, DemandedMask, Known,
-                                        SQ.getWithInstruction(I), Depth);
+    NewVal = SimplifyDemandedUseFPClass(VInst, DemandedMask, Known, SQ, Depth);
   } else {
     // If there are multiple uses of this instruction, then we can simplify
     // VInst to some other value, but not modify the instruction.
-    NewVal = SimplifyMultipleUseDemandedFPClass(
-        VInst, DemandedMask, Known, SQ.getWithInstruction(I), Depth);
+    NewVal = SimplifyMultipleUseDemandedFPClass(VInst, DemandedMask, Known, SQ,
+                                                Depth);
   }
 
   if (!NewVal)
diff --git a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
index e5c750fc6b130..64558754774e1 100644
--- a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
@@ -4186,7 +4186,8 @@ Instruction *InstCombinerImpl::visitReturnInst(ReturnInst &RI) {
     return nullptr;
 
   KnownFPClass KnownClass;
-  if (SimplifyDemandedFPClass(&RI, 0, ~ReturnClass, KnownClass))
+  if (SimplifyDemandedFPClass(&RI, 0, ~ReturnClass, KnownClass,
+                              SQ.getWithInstruction(&RI)))
     return &RI;
 
   return nullptr;
diff --git a/llvm/test/Transforms/InstCombine/simplify-demanded-fpclass-phi.ll b/llvm/test/Transforms/InstCombine/simplify-demanded-fpclass-phi.ll
index a064d8b65a457..367a5db8e8ed6 100644
--- a/llvm/test/Transforms/InstCombine/simplify-demanded-fpclass-phi.ll
+++ b/llvm/test/Transforms/InstCombine/simplify-demanded-fpclass-phi.ll
@@ -9,10 +9,9 @@ define nofpclass(nan) half @ret_phi_if_ret_0(i1 %cond1, i1 %cond2, half %unknown
 ; CHECK-NEXT:  [[ENTRY:.*]]:
 ; CHECK-NEXT:    br i1 [[COND1]], label %[[IF:.*]], label %[[RET:.*]]
 ; CHECK:       [[IF]]:
-; CHECK-NEXT:    [[SELECT:%.*]] = select i1 [[COND2]], half 0xH7E00, half [[UNKNOWN]]
 ; CHECK-NEXT:    br label %[[RET]]
 ; CHECK:       [[RET]]:
-; CHECK-NEXT:    [[PHI:%.*]] = phi half [ [[SELECT]], %[[IF]] ], [ 0xH0000, %[[ENTRY]] ]
+; CHECK-NEXT:    [[PHI:%.*]] = phi half [ [[UNKNOWN]], %[[IF]] ], [ 0xH0000, %[[ENTRY]] ]
 ; CHECK-NEXT:    ret half [[PHI]]
 ;
 entry:
@@ -58,7 +57,7 @@ define nofpclass(inf norm sub zero) half @ret_phi_only_nan(i1 %cond1, i1 %cond2,
 ; CHECK-NEXT:    [[SELECT:%.*]] = select i1 [[COND2]], half 0xH7E00, half [[UNKNOWN]]
 ; CHECK-NEXT:    br label %[[RET]]
 ; CHECK:       [[RET]]:
-; CHECK-NEXT:    [[PHI:%.*]] = phi half [ [[SELECT]], %[[IF]] ], [ 0xH0000, %[[ENTRY]] ]
+; CHECK-NEXT:    [[PHI:%.*]] = phi half [ [[SELECT]], %[[IF]] ], [ poison, %[[ENTRY]] ]
 ; CHECK-NEXT:    ret half [[PHI]]
 ;
 entry:
@@ -79,10 +78,9 @@ define nofpclass(nan) half @ret_phi_if_ret_1(i1 %cond1, i1 %cond2, half %unknown
 ; CHECK-NEXT:  [[ENTRY:.*]]:
 ; CHECK-NEXT:    br i1 [[COND1]], label %[[IF:.*]], label %[[RET:.*]]
 ; CHECK:       [[IF]]:
-; CHECK-NEXT:    [[S...
[truncated]

``````````

</details>


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


More information about the llvm-branch-commits mailing list