[llvm] [clang] [clang-tools-extra] DAG: Implement promotion for strict_fp_round (PR #74332)

Craig Topper via cfe-commits cfe-commits at lists.llvm.org
Thu Jan 4 19:59:20 PST 2024


================
@@ -2621,6 +2642,29 @@ SDValue DAGTypeLegalizer::PromoteFloatRes_FP_ROUND(SDNode *N) {
   return DAG.getNode(GetPromotionOpcode(VT, NVT), DL, NVT, Round);
 }
 
+// Explicit operation to reduce precision.  Reduce the value to half precision
+// and promote it back to the legal type.
+SDValue DAGTypeLegalizer::PromoteFloatRes_STRICT_FP_ROUND(SDNode *N) {
----------------
topperc wrote:

There are two promotion legalizers, Promote and SoftPromoteHalf. X86 and RISC-V use SoftPromoteHalf. Other targets use Promote. Promote doesn't convert back to fp16 in the right places in my opinion. If I recall correctly Promote doesn't convert to fp16 between two promoted fadds for example so it keeps extra precision.

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


More information about the cfe-commits mailing list