[LLVMdev] round() vs. rint()/nearbyint() with fast-math

Hal Finkel hfinkel at anl.gov
Wed Jun 19 10:56:29 PDT 2013


Hello,

Sometime over the last few months, I implemented in the PowerPC backend a fast-math-only optimization which lowers ISD::FRINT/FNEARBYINT in terms of the frin instruction (when supported). As one of my users has pointed out to me, frin actually implements the semantics of round() [it ties away from zero] instead of implementing nearbyint() [which ties to even]. This user has additionally pointed out that LLVM on x86 does not lower round() in the same way that it lowers rint() in fast-math mode.

LLVM does not currently have special lowering handling for round(), and I'll propose a patch to add that, but the larger question is this: should fast-math change the tie-breaking behavior of rint/nearbyint/round, etc. and, if so, should we make a specific effort to have all backends provide the same guarantee (or lack of a guarantee) in this regard?

Thanks again,
Hal

-- 
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory



More information about the llvm-dev mailing list