Set RTX_UNCHANGING is readonly_field_p when clearing

Geoff Keating geoffk@geoffk.org
Mon Apr 21 21:09:00 GMT 2003


kenner@vlsi1.ultra.nyu.edu (Richard Kenner) writes:

>     The docs currently say:
> 
>     `RTX_UNCHANGING_P (X)'
>          Nonzero in a `reg', `mem', or `concat' if the memory is set at
>          most once, anywhere.  This does not mean that it is function
>          invariant.  Stored in the `unchanging' field and printed as `/u'.
> 
>     Could you correct them?
> 
> Well it's not clear what to "correct" it to.  What is stated is indeed
> the intent of the flag.  The term "set" there is purposely ambiguous

I don't find the word "set" in any way ambiguous, so I think the
documentation failed if that was its intent.

> because there are a lot of annoying "fringe" cases here in which it's
> difficult to find a uniform solution.

Could you document these "fringe" cases?

> The whole problem here is in defining what we mean by "initializing" a
> constant object.  We've been back and forth on this a number of times and
> have never really found a good solution.

Can you document what the compiler currently does?  I'm not asking for
a redesign, I just want the docs to match the code.  If that means
that instead of one paragraph we need 10 then that's OK.

If you really can't work out what the compiler currently does, we can
remove this paragraph and write something like "Used in a `reg',
`mem', or `concat'; no-one really understands what this flag does.",
but that's a last resort.

> As has been said before, we really should eliminate all the mem flags and
> replace them with alias information.  However, I'm not at all certain that
> this would do more than just *moving* the above question to another place.

In this matter, at least, the alias information is well-defined; the
alias set for the structure is a superset of the alias sets of its
individual members.

-- 
- Geoffrey Keating <geoffk@geoffk.org>



More information about the Gcc-patches mailing list