On Mon, 7 Mar 2005, Richard Kenner wrote:

> What I thought we agreed on was *only* that if a language has rules about
> what *must* be a constant, we should not be depending on fold to be part
> of the enforcement for those rules.

A language has rules about what must be a constant.  It has rules about 
what must not be a constant.  It has, as in the current discussions, rules 
about what must or must not be an lvalue.  It has rules about what 
operations on constants are or are not undefined (in C99, left shift of 
negative integers is undefined behavior; we don't use this for 
optimization and I doubt there would be significant value in doing so but 
I think this does mean we need to treat expressions such as -1 << 0 as 
overflowing and not being pedantically constant).

We may want to do some folding at gimplification time, as it's the last 
point at which we can readily rearrange the order of evaluation of 
subexpressions in cases where that helps and the language permits; for 
such rearrangement to be possible afterwards we'd need to use sequence 
point rules to generate aliasing information.  (E.g., in the expression 
++*p + ++*q we can assume that p and q don't alias.)  We also want to do 
some folding at later stages on SSA trees to take advantage of information 
found by SSA optimizations.  But folding during parsing and semantic 
analysis, beyond that required by the language standard, is hobbled by 
such matters as needing to preserve language-specific lvalue-nature - for 
example, needing to keep a COND_EXPR in a form which the C++ front end 
understands as a lvalue if the original COND_EXPR was one.  If instead all 
parsing and semantic analysis, and transformation of e.g. COND_EXPR used 
as lvalue into valid GENERIC, are carried out before folding, fold doesn't 
need to concern itself with preserving language-specific properties of the 
trees.

-- 
Joseph S. Myers               http://www.srcf.ucam.org/~jsm28/gcc/
    [EMAIL PROTECTED] (personal mail)
    [EMAIL PROTECTED] (CodeSourcery mail)
    [EMAIL PROTECTED] (Bugzilla assignments and CCs)

Reply via email to