[llvm] AMDGPU: Add tonearest and towardzero roundings for intrinsic llvm.fptrunc.round (PR #104486)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Sat Aug 17 00:22:41 PDT 2024
================
@@ -6671,6 +6655,30 @@ SDValue SITargetLowering::getFPExtOrFPRound(SelectionDAG &DAG,
DAG.getTargetConstant(0, DL, MVT::i32));
}
+SDValue SITargetLowering::lowerFPTRUNC_ROUND(SDValue Op,
+ SelectionDAG &DAG) const {
+ if (Op.getOperand(0)->getValueType(0) != MVT::f32)
+ return SDValue();
+
+ // Only support towardzero, tonearest, upward and downward.
+ int RoundMode = Op.getConstantOperandVal(1);
+ if (RoundMode != (int)RoundingMode::TowardZero &&
+ RoundMode != (int)RoundingMode::NearestTiesToEven &&
+ RoundMode != (int)RoundingMode::TowardPositive &&
+ RoundMode != (int)RoundingMode::TowardNegative)
+ return SDValue();
+
+ // "round.towardzero" -> TowardZero 0 -> FP_ROUND_ROUND_TO_ZERO 3
+ // "round.tonearest" -> NearestTiesToEven 1 -> FP_ROUND_ROUND_TO_NEAREST 0
+ // "round.upward" -> TowardPositive 2 -> FP_ROUND_ROUND_TO_INF 1
+ // "round.downward -> TowardNegative 3 -> FP_ROUND_ROUND_TO_NEGINF 2
+ unsigned HW_Mode = (RoundMode + 3) % 4;
+ SDLoc DL(Op);
+ unsigned Opc = AMDGPUISD::FPTRUNC_ROUND;
----------------
arsenm wrote:
can lose the Opc variable (or just move this all to a pattern)
https://github.com/llvm/llvm-project/pull/104486
More information about the llvm-commits
mailing list