> Currently I'm testing the patch below, which simply invalidates the
> load/store. Now I need some help from someone, who is more familiar with
> this code, whether this is the correct approach.
I don't see any other solution than invalidating the MEM.
> Index: gcc/gcse.c
> ===================================================================
> --- gcc/gcse.c (revision 116085)
> +++ gcc/gcse.c (working copy)
> @@ -5319,6 +5319,16 @@
> else
> ptr->invalid = 1;
> }
> + else if (GET_CODE (dest) == ZERO_EXTRACT)
> + {
> + dest = XEXP (dest, 0);
> + if (MEM_P (dest) && simple_mem (dest))
> + {
> + ptr = ldst_entry (dest);
> + ptr->invalid = 1;
> + }
> +
> + }
> }
> else
> invalidate_any_buried_refs (PATTERN (insn));
Why not simply mimicing the "load" case and calling invalidate_any_buried_refs
on DEST, with a comment mentioning the (ZERO_EXTRACT (MEM)) corner case?
--
Eric Botcazou