kpn added a comment.

>> On targets that support static rounding mode (like RISCV) dynamic and 
>> constant rounding modes may be different and the behavior changes if default 
>> mode is replaced by dynamic.
>
> Whether a target supports static rounding modes on floating-point 
> instructions is completely irrelevant.  The user-visible behavior must be the 
> same either way.  If a target doesn't have specialized instructions, the code 
> generator can save/restore the rounding mode.  This should be transparent to 
> the user; the user can't read the rounding mode in between the save and 
> restore.  (We already do this sort of rounding mode manipulation on x86, to 
> implement float-to-int conversion on targets without SSE.)

The rounding mode argument to the constrained intrinsic is a hint; it tells the 
intrinsic what rounding mode has been set via the normal rounding mode changing 
mechanism. Constrained intrinsics don't change the rounding mode. I guess we 
could weaken that by adding "... except if absolutely required" to account for 
the float-to-int sans SSE case, but the principle applies.

Because of the requirement that the rounding mode be changed already, I don't 
see how instructions with static rounding modes are generally interesting. 
Perhaps a target will learn to recognize that a sequence of instructions can 
use the static rounding in the instructions and elide a change of rounding mode 
around the sequence? I don't know how common that would be in practice.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D126364/new/

https://reviews.llvm.org/D126364

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to