This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]