Zdenek Dvorak wrote:
Hello,

In principle, I don't see anything forbidding Zdenek's idea.
Unfortunately, what I avoided to mention is that TARGET_MEM_REF nodes are also transformed into pointer arithmetics and the equivalent INDIRECT_REF memory access... therefore, this is not an option even only because of that.
hmm... why you do that?  Could you please describe more precisely what
are you trying to achieve?
Sure!
The short answer is that, though most GIMPLE tree codes closely match what is representable in the CIL bytecode, some do not; hence, such codes are "lowered" into equivalent expressions that directly match what is representable in the bytecode.

this seems quite close to what TARGET_MEM_REFs are designed for.  IMHO,
the best way would be to lower the memory references to TARGET_MEM_REFs
(*) just once, sometime quite late in the optimization pipeline (just after
loop optimizations, for example), so that high-level optimizers/alias
analysis see the easy to understand code, while at least the essential
cleanups are performed on the lower level code.

Hi Zdenek,
but the only kind of TARGET_MEM_REFs we would really allow would be those with a base and no symbol, no index, no step, no offset... which look to me like INDIRECT_REFs! But if it were possible to make TARGET_MEM_REF carry alias information that INDIRECT_REFs are not able to carry, then I think it would make sense to transform non-zero index ARRAY_REFs into this very simple form of TARGET_MEM_REFs plus some pointer arithmetics.

This is an excerpt of tree.def:

/* Low-level memory addressing.  Operands are SYMBOL (static or global
   variable), BASE (register), INDEX (register), STEP (integer constant),
   OFFSET (integer constant).  Corresponding address is
SYMBOL + BASE + STEP * INDEX + OFFSET. Only variations and values valid on
   the target are allowed.

   The sixth argument is the reference to the original memory access, which
   is preserved for the purposes of the RTL alias analysis.  The seventh
argument is a tag representing results of the tree level alias analysis. */

DEFTREECODE (TARGET_MEM_REF, "target_mem_ref", tcc_reference, 7)

Are you talking about the seventh argument?

Cheers,
Roberto


Zdenek

(*) or just the pointer arithmetics like you do now, if you have some
reasons for avoiding TMRs, although then you have to rerun the pass once
later to get rid of invalid forms that may be created by the optimizers.

Reply via email to