[clang] [clang] Set correct FPOptions if attribute 'optnone' presents (PR #85605)

John McCall via cfe-commits cfe-commits at lists.llvm.org
Mon Mar 18 11:45:22 PDT 2024


rjmccall wrote:

> > Hmm. Is there some sort of optimization in IRGen that we need to suppress here, or is it something in LLVM code gen? Presumably normal LLVM optimization passes all just skip `optnone` functions.
> 
> The issue #62098 demonstrates such case.

Okay.  So if I understand correctly, this substitution of libcalls is a frontend optimization, and the bug is arguing that it ought to be suppressed by `optnone`.

> Anyway, It is not good to have bogus attributes in AST.

I think it's a fair question whether this is a bogus attribute.  `optnone` is a very strange attribute; it's a directive to the compiler with no clear semantics. There are "optimizations" that I don't think we expect `optnone` to suppress — we wouldn't want `optnone` to turn off NRVO in C++, for example.  `optnone` seems to be about getting a straightforward, literal translation of the code.  If the frontend can do a transformation during IR emission, though, it's generally a highly reliable transformation and can basically be thought of as part of the semantics.

>From the bug, it sounds more like the user wants some way to disable fast-math for a specific function, and apparently we don't have one.  That seems like a reasonable feature request.  Because we don't have that feature, they're flailing around trying essentially every pragma and attribute that we *do* have and arguing that at least one of them ought to have that impact, but it's not at all clear to me that they should.  And presumably they don't actually want to disable all optimization of their function anyway; they just want to turn off fast math.

> > Mostly I'm wondering how far we're expected to go with `optnone`.
> 
> It impedes implementation of pragma FENV_ROUND. The pragma requires setting FP options inside CompoundStmt and it interacts with the fictious attributes. This is the reason of this patch.

That doesn't make sense as a reason for this patch; `#pragma FENV_ROUND` can obviously occur in non-`optnone` functions.

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


More information about the cfe-commits mailing list