[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