================ @@ -4903,16 +4903,40 @@ bool AMDGPULegalizerInfo::legalizeFDIV16(MachineInstr &MI, LLT S16 = LLT::scalar(16); LLT S32 = LLT::scalar(32); + // a32.u = opx(V_CVT_F32_F16, a.u); // CVT to F32 + // b32.u = opx(V_CVT_F32_F16, b.u); // CVT to F32 + // r32.u = opx(V_RCP_F32, b32.u); // rcp = 1 / d + // q32.u = opx(V_MUL_F32, a32.u, r32.u); // q = n * rcp + // e32.u = opx(V_MAD_F32, (b32.u^_neg32), q32.u, a32.u); // err = -d * q + n + // q32.u = opx(V_MAD_F32, e32.u, r32.u, q32.u); // q = n * rcp + // e32.u = opx(V_MAD_F32, (b32.u^_neg32), q32.u, a32.u); // err = -d * q + n + // tmp.u = opx(V_MUL_F32, e32.u, r32.u); + // tmp.u = opx(V_AND_B32, tmp.u, 0xff800000) + // q32.u = opx(V_ADD_F32, tmp.u, q32.u); + // q16.u = opx(V_CVT_F16_F32, q32.u); + // q16.u = opx(V_DIV_FIXUP_F16, q16.u, b.u, a.u); // q = touchup(q, d, n) + auto LHSExt = B.buildFPExt(S32, LHS, Flags); auto RHSExt = B.buildFPExt(S32, RHS, Flags); - - auto RCP = B.buildIntrinsic(Intrinsic::amdgcn_rcp, {S32}) + auto NegRHSExt = B.buildFNeg(S32, RHSExt); + auto Rcp = B.buildIntrinsic(Intrinsic::amdgcn_rcp, {S32}) .addUse(RHSExt.getReg(0)) .setMIFlags(Flags); - - auto QUOT = B.buildFMul(S32, LHSExt, RCP, Flags); - auto RDst = B.buildFPTrunc(S16, QUOT, Flags); - + auto Quot = B.buildFMul(S32, LHSExt, Rcp); ---------------- arsenm wrote:
Lost flags after this point https://github.com/llvm/llvm-project/pull/109295 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits