https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80198

--- Comment #11 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
(In reply to Jeffrey A. Law from comment #10)
> Yea.  The code that was recording NAME = NAME conditional equivalences was
> largely disabled back in August.  They'll only be recorded now if one name
> is cheaper to compute than the other.
> 
> So if the conditional equivalences are still a problem with this BZ, then we
> need to look at the costing of the SSA_NAME's defining statement.

Yes, they are still the problem.
Before r233207, dom changed:
   if (a_6(D) == b_7(D))
     goto <bb 3>;
...
   <bb 6>:
   # i_40 = PHI <i_36(3), i_18(8)>
   # DEBUG i => i_40
   _9 = (long unsigned int) i_40;
   _10 = _9 * 4;
-  _11 = a_6(D) + _10;
-  _13 = b_7(D) + _10;
-  _14 = *_13;
+  _11 = b_7(D) + _10;
+  _13 = _11;
+  _14 = *_11;
   _16 = _14 | c_15(D);
   *_11 = _16;
But that doesn't happen even with current trunk, we still end up with both a
and b in the bb dominated by a == b test.

Another part of this PR is being able to determine in the vectorizer if we can
allow identical pointers or not (in this case we can, so we could adjust the
alias check by 1).

Reply via email to