This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
has_volatile_ops and early optimization w/o alias information
- From: Richard Guenther <rguenther at suse dot de>
- To: Jan Hubicka <jh at suse dot cz>
- Cc: gcc at gcc dot gnu dot org
- Date: Mon, 3 Sep 2007 16:41:22 +0200 (CEST)
- Subject: has_volatile_ops and early optimization w/o alias information
We set has_volatile_ops on all(?) memory references during early
optimization because we don't have alias information. But we
do it inconsistently for loads. For example I see
D.2574_23 = *D.2573_22;
(no volatile) and
D.2565_28 ={v} tab[D.2560_27].__delta;
(volatile). Because for indirect references we also check
/* Aliasing information is missing; mark statement as
volatile so we won't optimize it out too actively. */
else if (!gimple_aliases_computed_p (cfun)
&& (flags & opf_def))
s_ann->has_volatile_ops = true;
so only add has_volatile_ops if we would create a DEF. Now the
other place is in the generic add_virtual_operand like
if (aliases == NULL)
{
if (!gimple_aliases_computed_p (cfun))
s_ann->has_volatile_ops = true;
and so also marks load. Which one is safe? I suppose it is safe
to DCE loads even without alias information? So I'd add the check
for a DEF also in the generic add_virtual_operand code.
Thanks for clarification.
Richard.