Merge pull request #11826 from oneandonlydean/carry/3699-f16-fma

fix(shader): take the fused result when an f16 fma's sum is exact
This commit is contained in:
Dean authored and GitHub committed 2026-10-28 13:52:08 +13:00
commit cccdaa2734
1 file changed
+2 -1
@@ -325,7 +325,8 @@ IrF32 TranslationContext::fmaF16RoundedToOdd(IrF32 lhs, IrF32 rhs, IrF32 addend)
IrValue& sumBits = ir.BitCastU32(sum);
IrValue& sameSign = ir.IEqual(ir.BitwiseAnd(ir.BitwiseXor(sumBits, ir.BitCastU32(error)), ir.Constant(0x80000000u)), ir.Constant(0u));
IrValue& towardZero = ir.Select(sameSign, sumBits, ir.ISub(sumBits, ir.Constant(1u)));
return IrF32(ir.BitCastF32(ir.Select(inexact, ir.BitwiseOr(towardZero, ir.Constant(1u)), sumBits)));
IrValue& fused = ir.BitCastU32(ir.Emit(IrOpcode::FPFma32, IrType::F32, {&lhs.Value(), &rhs.Value(), &addend.Value()}));
return IrF32(ir.BitCastF32(ir.Select(inexact, ir.BitwiseOr(towardZero, ir.Constant(1u)), fused)));
}
IrU32 TranslationContext::readF16Bits(const RdnaOperand& operand) {