[flang-commits] [flang] [mlir] [mlir][math] Replace roundeven call by nearbyint call when target does not have C23 features (PR #88687)
Corentin Ferry via flang-commits
flang-commits at lists.llvm.org
Tue Apr 16 04:45:02 PDT 2024
================
@@ -185,8 +186,15 @@ void mlir::populateMathToLibmConversionPatterns(RewritePatternSet &patterns) {
populatePatternsForOp<math::Log10Op>(patterns, ctx, "log10f", "log10");
populatePatternsForOp<math::Log1pOp>(patterns, ctx, "log1pf", "log1p");
populatePatternsForOp<math::PowFOp>(patterns, ctx, "powf", "pow");
- populatePatternsForOp<math::RoundEvenOp>(patterns, ctx, "roundevenf",
- "roundeven");
+ if (options.allowC23Features)
+ populatePatternsForOp<math::RoundEvenOp>(patterns, ctx, "roundevenf",
+ "roundeven");
+ else if (options.roundingModeIsDefault)
+ populatePatternsForOp<math::RoundEvenOp>(patterns, ctx, "nearbyintf",
+ "nearbyint");
+ // Roundeven: using nearbyint (pre-C23) for roundeven requires the
----------------
cferry-AMD wrote:
Thanks for your insight. I unfortunately cannot do option (1); option (3) would result in having two very similar operations in math. Option (2) is feasible.
Currently, MathToLibm is tied to specific versions of libm that feature the `roundeven` function; to me, it would make sense to be able to specify which standard / version of libm is targeted so that only compatible calls are issued. There would need to be more use cases to this than just mine to warrant such a big change though.
https://github.com/llvm/llvm-project/pull/88687
More information about the flang-commits
mailing list