[PATCH, rs6000, testsuite] Fix PR65484

Segher Boessenkool segher@kernel.crashing.org
Thu Jan 26 22:36:00 GMT 2017


On Thu, Jan 26, 2017 at 03:14:47PM -0600, Bill Schmidt wrote:
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65484 identifies an
> issue whether g++.dg/vect/pr36648.cc fails on older POWER hardware.
> This is due to a decision made in November 2010 to include the
> flag -mno-allow-movmisalign in check_vect_support_and_set_flags,
> which governs the vectorizer tests in that directory.  This flag
> sometimes inhibits vectorization when to vectorize the code
> requires that misaligned loads and stores be used.  This flag is
> not added to the command line for POWER8 hardware and later.
> 
> pr36648.cc is an example of the kind of vectorization that
> requires misaligned memory accesses, so it is vectorized on 
> POWER8 and later hardware, but not on POWER7 or earlier with
> the default testsuite flags.  This patch modifies the dg-final
> checks in pr36648.cc to be consistent with this behavior.  I've
> added commentary to explain what might otherwise seem to be a
> somewhat arcane choice of tests.
> 
> Tested on trunk and GCC 6 for POWER8 LE and POWER7 BE systems.
> Is this ok for trunk?

> 2017-01-26  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
> 
> 	PR target/65484
> 	* g++.dg/vect/pr36648.cc: Modify to reflect that the loop is not
> 	vectorized on POWER unless hardware misaligned loads are
> 	available.

> --- gcc/testsuite/g++.dg/vect/pr36648.cc	(revision 244811)
> +++ gcc/testsuite/g++.dg/vect/pr36648.cc	(working copy)
> @@ -19,7 +19,12 @@ Foo foo;
>  
>  int main() { }
>  
> -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { !  vect_no_align } } } } */
> -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target { ! vect_no_align } } } } */
> +/* On older powerpc hardware (POWER7 and earlier), the default flag
> +   -mno-allow-movmisalign prevents vectorization.  On POWER8 and later,
> +   when vect_hw_misalign is true, vectorization occurs.  For other
> +   targets, ! vect_no_align is a sufficient test.  */
>  
> +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { { { !  vect_no_align } && { ! powerpc*-*-* } } || { powerpc*-*-* && vect_hw_misalign } } } } } */
> +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target { { { ! vect_no_align } && { ! powerpc*-*-* } } || { powerpc*-*-* && vect_hw_misalign } } } } } */
>  

What does this do if no_align and powerpc and vect_hw_misalign?  Or can that
not happen?


Segher



More information about the Gcc-patches mailing list