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

Bill Schmidt <wschmidt at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2016-02-29
     Ever confirmed|0                           |1

--- Comment #4 from Bill Schmidt <wschmidt at gcc dot gnu.org> ---
Looks like another case where the test case hasn't kept up with changes to the
vectorizer and the Power hardware.  In GCC 5, we have an unaligned access and
choose to peel for alignment.  In GCC 6, we recognize that we have an unaligned
access but that it is supported by hardware, and we analyze the loop without
peeling.  In GCC 5, the peeling is unprofitable (number of iterations is 7, and
we need 11 to make it profitable in light of the extra setup code).  In GCC 6,
the cost model says we only need 5 iterations to make it profitable, so the
loop is vectorized.

I think that earlier in GCC 6 we still didn't vectorize this.  It looks like we
now produce better code because vect_recog_mult_pattern kicks in where it
didn't before.

I think this probably would fail the same way on BE on a POWER8 system.  Bill
Seurer, can you confirm that the BE system you tested on was a POWER7?  The
alignment issue should be due to P8 hardware improvements, not anything
endian-related.

If that's the case, then I think we just need to adjust this test case to skip
the failing predicate when hardware alignment is supported, similar to the big
set of tests I changed last year for the same reason.

Reply via email to