diff mbox series

Fix profile upate after vectorizer peeling

Message ID ZMja7SlWkRfppzOV@kam.mff.cuni.cz
State New
Headers show
Series Fix profile upate after vectorizer peeling | expand

Commit Message

Jan Hubicka Aug. 1, 2023, 10:14 a.m. UTC
Hi,
This patch fixes update after constant peeling in profilogue.  We now reached 0 profile
update bugs on tramp3d vectorizaiton and also on quite few testcases, so I am enabling the
testuiste checks so we do not regress again.

Bootstrapped/regtested x86_64, comitted.

Honza

gcc/ChangeLog:

	* tree-vect-loop-manip.cc (vect_do_peeling): Fix profile update after
	constant prologue peeling.

gcc/testsuite/ChangeLog:

	* gcc.dg/vect/vect-1-big-array.c: Check profile consistency.
	* gcc.dg/vect/vect-1.c: Check profile consistency.
	* gcc.dg/vect/vect-10-big-array.c: Check profile consistency.
	* gcc.dg/vect/vect-10.c: Check profile consistency.
	* gcc.dg/vect/vect-100.c: Check profile consistency.
	* gcc.dg/vect/vect-103.c: Check profile consistency.
	* gcc.dg/vect/vect-104.c: Check profile consistency.
	* gcc.dg/vect/vect-105-big-array.c: Check profile consistency.
	* gcc.dg/vect/vect-105.c: Check profile consistency.
	* gcc.dg/vect/vect-106.c: Check profile consistency.
	* gcc.dg/vect/vect-107.c: Check profile consistency.
	* gcc.dg/vect/vect-108.c: Check profile consistency.
	* gcc.dg/vect/vect-109.c: Check profile consistency.
	* gcc.dg/vect/vect-11.c: Check profile consistency.
	* gcc.dg/vect/vect-110.c: Check profile consistency.
	* gcc.dg/vect/vect-112-big-array.c: Check profile consistency.
	* gcc.dg/vect/vect-112.c: Check profile consistency.
	* gcc.dg/vect/vect-113.c: Check profile consistency.
	* gcc.dg/vect/vect-114.c: Check profile consistency.
	* gcc.dg/vect/vect-115.c: Check profile consistency.
	* gcc.dg/vect/vect-116.c: Check profile consistency.
	* gcc.dg/vect/vect-117.c: Check profile consistency.
	* gcc.dg/vect/vect-118.c: Check profile consistency.
	* gcc.dg/vect/vect-119.c: Check profile consistency.
	* gcc.dg/vect/vect-11a.c: Check profile consistency.
	* gcc.dg/vect/vect-12.c: Check profile consistency.
	* gcc.dg/vect/vect-120.c: Check profile consistency.
	* gcc.dg/vect/vect-121.c: Check profile consistency.
	* gcc.dg/vect/vect-122.c: Check profile consistency.
	* gcc.dg/vect/vect-123.c: Check profile consistency.
	* gcc.dg/vect/vect-124.c: Check profile consistency.
	* gcc.dg/vect/vect-126.c: Check profile consistency.
	* gcc.dg/vect/vect-13.c: Check profile consistency.
	* gcc.dg/vect/vect-14.c: Check profile consistency.
	* gcc.dg/vect/vect-15-big-array.c: Check profile consistency.
	* gcc.dg/vect/vect-15.c: Check profile consistency.
	* gcc.dg/vect/vect-17.c: Check profile consistency.
	* gcc.dg/vect/vect-18.c: Check profile consistency.
	* gcc.dg/vect/vect-19.c: Check profile consistency.
	* gcc.dg/vect/vect-2-big-array.c: Check profile consistency.
	* gcc.dg/vect/vect-2.c: Check profile consistency.
	* gcc.dg/vect/vect-20.c: Check profile consistency.
	* gcc.dg/vect/vect-21.c: Check profile consistency.
	* gcc.dg/vect/vect-22.c: Check profile consistency.
	* gcc.dg/vect/vect-23.c: Check profile consistency.
	* gcc.dg/vect/vect-24.c: Check profile consistency.
	* gcc.dg/vect/vect-25.c: Check profile consistency.
	* gcc.dg/vect/vect-26.c: Check profile consistency.
	* gcc.dg/vect/vect-27.c: Check profile consistency.
	* gcc.dg/vect/vect-28.c: Check profile consistency.
	* gcc.dg/vect/vect-29.c: Check profile consistency.
	* gcc.dg/vect/vect-3.c: Check profile consistency.
	* gcc.dg/vect/vect-30.c: Check profile consistency.
	* gcc.dg/vect/vect-31-big-array.c: Check profile consistency.
	* gcc.dg/vect/vect-31.c: Check profile consistency.
	* gcc.dg/vect/vect-32-big-array.c: Check profile consistency.
	* gcc.dg/vect/vect-32-chars.c: Check profile consistency.
	* gcc.dg/vect/vect-32.c: Check profile consistency.
	* gcc.dg/vect/vect-33-big-array.c: Check profile consistency.
	* gcc.dg/vect/vect-33.c: Check profile consistency.
	* gcc.dg/vect/vect-34-big-array.c: Check profile consistency.
	* gcc.dg/vect/vect-34.c: Check profile consistency.
	* gcc.dg/vect/vect-35-big-array.c: Check profile consistency.
	* gcc.dg/vect/vect-35.c: Check profile consistency.
	* gcc.dg/vect/vect-36-big-array.c: Check profile consistency.
	* gcc.dg/vect/vect-36.c: Check profile consistency.
	* gcc.dg/vect/vect-38.c: Check profile consistency.
	* gcc.dg/vect/vect-4.c: Check profile consistency.
	* gcc.dg/vect/vect-40.c: Check profile consistency.
	* gcc.dg/vect/vect-42.c: Check profile consistency.
	* gcc.dg/vect/vect-44.c: Check profile consistency.
	* gcc.dg/vect/vect-46.c: Check profile consistency.
	* gcc.dg/vect/vect-48.c: Check profile consistency.
	* gcc.dg/vect/vect-5.c: Check profile consistency.
	* gcc.dg/vect/vect-50.c: Check profile consistency.
	* gcc.dg/vect/vect-52.c: Check profile consistency.
	* gcc.dg/vect/vect-54.c: Check profile consistency.
	* gcc.dg/vect/vect-56.c: Check profile consistency.
	* gcc.dg/vect/vect-58.c: Check profile consistency.
	* gcc.dg/vect/vect-6-big-array.c: Check profile consistency.
	* gcc.dg/vect/vect-6.c: Check profile consistency.
	* gcc.dg/vect/vect-60.c: Check profile consistency.
	* gcc.dg/vect/vect-62.c: Check profile consistency.
	* gcc.dg/vect/vect-63.c: Check profile consistency.
	* gcc.dg/vect/vect-64.c: Check profile consistency.
	* gcc.dg/vect/vect-65.c: Check profile consistency.
	* gcc.dg/vect/vect-66.c: Check profile consistency.
	* gcc.dg/vect/vect-67.c: Check profile consistency.
	* gcc.dg/vect/vect-68.c: Check profile consistency.
	* gcc.dg/vect/vect-7.c: Check profile consistency.
	* gcc.dg/vect/vect-70.c: Check profile consistency.
	* gcc.dg/vect/vect-71.c: Check profile consistency.
	* gcc.dg/vect/vect-72.c: Check profile consistency.
	* gcc.dg/vect/vect-73-big-array.c: Check profile consistency.
	* gcc.dg/vect/vect-73.c: Check profile consistency.
	* gcc.dg/vect/vect-74-big-array.c: Check profile consistency.
	* gcc.dg/vect/vect-74.c: Check profile consistency.
	* gcc.dg/vect/vect-75-big-array.c: Check profile consistency.
	* gcc.dg/vect/vect-75.c: Check profile consistency.
	* gcc.dg/vect/vect-76-big-array.c: Check profile consistency.
	* gcc.dg/vect/vect-76.c: Check profile consistency.
	* gcc.dg/vect/vect-77-alignchecks.c: Check profile consistency.
	* gcc.dg/vect/vect-77-global.c: Check profile consistency.
	* gcc.dg/vect/vect-77.c: Check profile consistency.
	* gcc.dg/vect/vect-78-alignchecks.c: Check profile consistency.
	* gcc.dg/vect/vect-78-global.c: Check profile consistency.
	* gcc.dg/vect/vect-78.c: Check profile consistency.
	* gcc.dg/vect/vect-8.c: Check profile consistency.
	* gcc.dg/vect/vect-80-big-array.c: Check profile consistency.
	* gcc.dg/vect/vect-80.c: Check profile consistency.
	* gcc.dg/vect/vect-82.c: Check profile consistency.
	* gcc.dg/vect/vect-82_64.c: Check profile consistency.
	* gcc.dg/vect/vect-83.c: Check profile consistency.
	* gcc.dg/vect/vect-83_64.c: Check profile consistency.
	* gcc.dg/vect/vect-85-big-array.c: Check profile consistency.
	* gcc.dg/vect/vect-85.c: Check profile consistency.
	* gcc.dg/vect/vect-86.c: Check profile consistency.
	* gcc.dg/vect/vect-87.c: Check profile consistency.
	* gcc.dg/vect/vect-88.c: Check profile consistency.
	* gcc.dg/vect/vect-89-big-array.c: Check profile consistency.
	* gcc.dg/vect/vect-89.c: Check profile consistency.
	* gcc.dg/vect/vect-9.c: Check profile consistency.
	* gcc.dg/vect/vect-91.c: Check profile consistency.
	* gcc.dg/vect/vect-92.c: Check profile consistency.
	* gcc.dg/vect/vect-93.c: Check profile consistency.
	* gcc.dg/vect/vect-95.c: Check profile consistency.
	* gcc.dg/vect/vect-96.c: Check profile consistency.
	* gcc.dg/vect/vect-97-big-array.c: Check profile consistency.
	* gcc.dg/vect/vect-97.c: Check profile consistency.
	* gcc.dg/vect/vect-98-big-array.c: Check profile consistency.
	* gcc.dg/vect/vect-98.c: Check profile consistency.
	* gcc.dg/vect/vect-99.c: Check profile consistency.

Comments

Richard Biener Aug. 2, 2023, 12:49 p.m. UTC | #1
On Tue, Aug 1, 2023 at 12:15 PM Jan Hubicka via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> Hi,
> This patch fixes update after constant peeling in profilogue.  We now reached 0 profile
> update bugs on tramp3d vectorizaiton and also on quite few testcases, so I am enabling the
> testuiste checks so we do not regress again.
>
> Bootstrapped/regtested x86_64, comitted.

Note most of the profile consistency checks FAIL when testing with -m32 on
x86_64-unknown-linux-gnu ...

For example vect-11.c has

;;   basic block 4, loop depth 0, count 719407024 (estimated locally,
freq 0.6700), maybe hot
;;   Invalid sum of incoming counts 708669602 (estimated locally, freq
0.6600), should be 719407024 (estimated locally, freq 0.6700)
;;    prev block 3, next block 5, flags: (NEW, REACHABLE, VISITED)
;;    pred:       3 [always (guessed)]  count:708669602 (estimated
locally, freq 0.6600) (FALSE_VALUE,EXECUTABLE)
  __asm__ __volatile__("cpuid
        " : "=a" a_44, "=b" b_45, "=c" c_46, "=d" d_47 : "0" 1, "2" 0);
  _3 = d_47 & 67108864;

so it looks like it's the check_vect () function that goes wrong
everywhere but only on i?86.
The first dump with the Invalid sum is 095t.fixup_cfg3 already.

Richard.

> Honza
>
> gcc/ChangeLog:
>
>         * tree-vect-loop-manip.cc (vect_do_peeling): Fix profile update after
>         constant prologue peeling.
>
> gcc/testsuite/ChangeLog:
>
>         * gcc.dg/vect/vect-1-big-array.c: Check profile consistency.
>         * gcc.dg/vect/vect-1.c: Check profile consistency.
>         * gcc.dg/vect/vect-10-big-array.c: Check profile consistency.
>         * gcc.dg/vect/vect-10.c: Check profile consistency.
>         * gcc.dg/vect/vect-100.c: Check profile consistency.
>         * gcc.dg/vect/vect-103.c: Check profile consistency.
>         * gcc.dg/vect/vect-104.c: Check profile consistency.
>         * gcc.dg/vect/vect-105-big-array.c: Check profile consistency.
>         * gcc.dg/vect/vect-105.c: Check profile consistency.
>         * gcc.dg/vect/vect-106.c: Check profile consistency.
>         * gcc.dg/vect/vect-107.c: Check profile consistency.
>         * gcc.dg/vect/vect-108.c: Check profile consistency.
>         * gcc.dg/vect/vect-109.c: Check profile consistency.
>         * gcc.dg/vect/vect-11.c: Check profile consistency.
>         * gcc.dg/vect/vect-110.c: Check profile consistency.
>         * gcc.dg/vect/vect-112-big-array.c: Check profile consistency.
>         * gcc.dg/vect/vect-112.c: Check profile consistency.
>         * gcc.dg/vect/vect-113.c: Check profile consistency.
>         * gcc.dg/vect/vect-114.c: Check profile consistency.
>         * gcc.dg/vect/vect-115.c: Check profile consistency.
>         * gcc.dg/vect/vect-116.c: Check profile consistency.
>         * gcc.dg/vect/vect-117.c: Check profile consistency.
>         * gcc.dg/vect/vect-118.c: Check profile consistency.
>         * gcc.dg/vect/vect-119.c: Check profile consistency.
>         * gcc.dg/vect/vect-11a.c: Check profile consistency.
>         * gcc.dg/vect/vect-12.c: Check profile consistency.
>         * gcc.dg/vect/vect-120.c: Check profile consistency.
>         * gcc.dg/vect/vect-121.c: Check profile consistency.
>         * gcc.dg/vect/vect-122.c: Check profile consistency.
>         * gcc.dg/vect/vect-123.c: Check profile consistency.
>         * gcc.dg/vect/vect-124.c: Check profile consistency.
>         * gcc.dg/vect/vect-126.c: Check profile consistency.
>         * gcc.dg/vect/vect-13.c: Check profile consistency.
>         * gcc.dg/vect/vect-14.c: Check profile consistency.
>         * gcc.dg/vect/vect-15-big-array.c: Check profile consistency.
>         * gcc.dg/vect/vect-15.c: Check profile consistency.
>         * gcc.dg/vect/vect-17.c: Check profile consistency.
>         * gcc.dg/vect/vect-18.c: Check profile consistency.
>         * gcc.dg/vect/vect-19.c: Check profile consistency.
>         * gcc.dg/vect/vect-2-big-array.c: Check profile consistency.
>         * gcc.dg/vect/vect-2.c: Check profile consistency.
>         * gcc.dg/vect/vect-20.c: Check profile consistency.
>         * gcc.dg/vect/vect-21.c: Check profile consistency.
>         * gcc.dg/vect/vect-22.c: Check profile consistency.
>         * gcc.dg/vect/vect-23.c: Check profile consistency.
>         * gcc.dg/vect/vect-24.c: Check profile consistency.
>         * gcc.dg/vect/vect-25.c: Check profile consistency.
>         * gcc.dg/vect/vect-26.c: Check profile consistency.
>         * gcc.dg/vect/vect-27.c: Check profile consistency.
>         * gcc.dg/vect/vect-28.c: Check profile consistency.
>         * gcc.dg/vect/vect-29.c: Check profile consistency.
>         * gcc.dg/vect/vect-3.c: Check profile consistency.
>         * gcc.dg/vect/vect-30.c: Check profile consistency.
>         * gcc.dg/vect/vect-31-big-array.c: Check profile consistency.
>         * gcc.dg/vect/vect-31.c: Check profile consistency.
>         * gcc.dg/vect/vect-32-big-array.c: Check profile consistency.
>         * gcc.dg/vect/vect-32-chars.c: Check profile consistency.
>         * gcc.dg/vect/vect-32.c: Check profile consistency.
>         * gcc.dg/vect/vect-33-big-array.c: Check profile consistency.
>         * gcc.dg/vect/vect-33.c: Check profile consistency.
>         * gcc.dg/vect/vect-34-big-array.c: Check profile consistency.
>         * gcc.dg/vect/vect-34.c: Check profile consistency.
>         * gcc.dg/vect/vect-35-big-array.c: Check profile consistency.
>         * gcc.dg/vect/vect-35.c: Check profile consistency.
>         * gcc.dg/vect/vect-36-big-array.c: Check profile consistency.
>         * gcc.dg/vect/vect-36.c: Check profile consistency.
>         * gcc.dg/vect/vect-38.c: Check profile consistency.
>         * gcc.dg/vect/vect-4.c: Check profile consistency.
>         * gcc.dg/vect/vect-40.c: Check profile consistency.
>         * gcc.dg/vect/vect-42.c: Check profile consistency.
>         * gcc.dg/vect/vect-44.c: Check profile consistency.
>         * gcc.dg/vect/vect-46.c: Check profile consistency.
>         * gcc.dg/vect/vect-48.c: Check profile consistency.
>         * gcc.dg/vect/vect-5.c: Check profile consistency.
>         * gcc.dg/vect/vect-50.c: Check profile consistency.
>         * gcc.dg/vect/vect-52.c: Check profile consistency.
>         * gcc.dg/vect/vect-54.c: Check profile consistency.
>         * gcc.dg/vect/vect-56.c: Check profile consistency.
>         * gcc.dg/vect/vect-58.c: Check profile consistency.
>         * gcc.dg/vect/vect-6-big-array.c: Check profile consistency.
>         * gcc.dg/vect/vect-6.c: Check profile consistency.
>         * gcc.dg/vect/vect-60.c: Check profile consistency.
>         * gcc.dg/vect/vect-62.c: Check profile consistency.
>         * gcc.dg/vect/vect-63.c: Check profile consistency.
>         * gcc.dg/vect/vect-64.c: Check profile consistency.
>         * gcc.dg/vect/vect-65.c: Check profile consistency.
>         * gcc.dg/vect/vect-66.c: Check profile consistency.
>         * gcc.dg/vect/vect-67.c: Check profile consistency.
>         * gcc.dg/vect/vect-68.c: Check profile consistency.
>         * gcc.dg/vect/vect-7.c: Check profile consistency.
>         * gcc.dg/vect/vect-70.c: Check profile consistency.
>         * gcc.dg/vect/vect-71.c: Check profile consistency.
>         * gcc.dg/vect/vect-72.c: Check profile consistency.
>         * gcc.dg/vect/vect-73-big-array.c: Check profile consistency.
>         * gcc.dg/vect/vect-73.c: Check profile consistency.
>         * gcc.dg/vect/vect-74-big-array.c: Check profile consistency.
>         * gcc.dg/vect/vect-74.c: Check profile consistency.
>         * gcc.dg/vect/vect-75-big-array.c: Check profile consistency.
>         * gcc.dg/vect/vect-75.c: Check profile consistency.
>         * gcc.dg/vect/vect-76-big-array.c: Check profile consistency.
>         * gcc.dg/vect/vect-76.c: Check profile consistency.
>         * gcc.dg/vect/vect-77-alignchecks.c: Check profile consistency.
>         * gcc.dg/vect/vect-77-global.c: Check profile consistency.
>         * gcc.dg/vect/vect-77.c: Check profile consistency.
>         * gcc.dg/vect/vect-78-alignchecks.c: Check profile consistency.
>         * gcc.dg/vect/vect-78-global.c: Check profile consistency.
>         * gcc.dg/vect/vect-78.c: Check profile consistency.
>         * gcc.dg/vect/vect-8.c: Check profile consistency.
>         * gcc.dg/vect/vect-80-big-array.c: Check profile consistency.
>         * gcc.dg/vect/vect-80.c: Check profile consistency.
>         * gcc.dg/vect/vect-82.c: Check profile consistency.
>         * gcc.dg/vect/vect-82_64.c: Check profile consistency.
>         * gcc.dg/vect/vect-83.c: Check profile consistency.
>         * gcc.dg/vect/vect-83_64.c: Check profile consistency.
>         * gcc.dg/vect/vect-85-big-array.c: Check profile consistency.
>         * gcc.dg/vect/vect-85.c: Check profile consistency.
>         * gcc.dg/vect/vect-86.c: Check profile consistency.
>         * gcc.dg/vect/vect-87.c: Check profile consistency.
>         * gcc.dg/vect/vect-88.c: Check profile consistency.
>         * gcc.dg/vect/vect-89-big-array.c: Check profile consistency.
>         * gcc.dg/vect/vect-89.c: Check profile consistency.
>         * gcc.dg/vect/vect-9.c: Check profile consistency.
>         * gcc.dg/vect/vect-91.c: Check profile consistency.
>         * gcc.dg/vect/vect-92.c: Check profile consistency.
>         * gcc.dg/vect/vect-93.c: Check profile consistency.
>         * gcc.dg/vect/vect-95.c: Check profile consistency.
>         * gcc.dg/vect/vect-96.c: Check profile consistency.
>         * gcc.dg/vect/vect-97-big-array.c: Check profile consistency.
>         * gcc.dg/vect/vect-97.c: Check profile consistency.
>         * gcc.dg/vect/vect-98-big-array.c: Check profile consistency.
>         * gcc.dg/vect/vect-98.c: Check profile consistency.
>         * gcc.dg/vect/vect-99.c: Check profile consistency.
>
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-1-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-1-big-array.c
> index 3ec32eba7a3..5ffbf1bf3aa 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-1-big-array.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-1-big-array.c
> @@ -1,4 +1,5 @@
>  /* { dg-do compile } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-require-effective-target vect_float } */
>
> @@ -88,3 +89,4 @@ foo (int n)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 6 loops" 1 "vect" { target vect_strided2 } } } */
>  /* { dg-final { scan-tree-dump-times "vectorized 5 loops" 1 "vect" { xfail vect_strided2 } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-1.c b/gcc/testsuite/gcc.dg/vect/vect-1.c
> index 2f0d19970c0..cba9ce076ab 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-1.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-1.c
> @@ -1,4 +1,5 @@
>  /* { dg-do compile } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-require-effective-target vect_float } */
>
> @@ -88,3 +89,4 @@ foo (int n)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 6 loops" 1 "vect" { target vect_strided2 } } } */
>  /* { dg-final { scan-tree-dump-times "vectorized 5 loops" 1 "vect" { xfail vect_strided2 } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-10-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-10-big-array.c
> index f266ac8617c..ac18f2bf2e9 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-10-big-array.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-10-big-array.c
> @@ -1,4 +1,5 @@
>  /* { dg-do compile } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_int } */
>
>  extern void abort (void);
> @@ -31,3 +32,4 @@ int foo ()
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { ! vect_strided2 } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-10.c b/gcc/testsuite/gcc.dg/vect/vect-10.c
> index ba66939cca3..26c16c5d6f0 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-10.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-10.c
> @@ -1,4 +1,5 @@
>  /* { dg-do compile } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_int } */
>
>  #define N 16
> @@ -23,3 +24,4 @@ int foo ()
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { ! vect_strided2 } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-100.c b/gcc/testsuite/gcc.dg/vect/vect-100.c
> index 9a4d4de0671..ccce2f4fdcc 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-100.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-100.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdlib.h>
>  #include <stdarg.h>
> @@ -77,3 +78,4 @@ int main (void)
>  /* Requires versioning.  */
>  /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 0 "vect" } } */
>
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-103.c b/gcc/testsuite/gcc.dg/vect/vect-103.c
> index d03562f7cdd..5911214dbe8 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-103.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-103.c
> @@ -1,5 +1,5 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks --param vect-epilogues-nomask=0" } */
>  /* { dg-require-effective-target vect_int } */
>
>  #include <stdlib.h>
> @@ -58,3 +58,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-104.c b/gcc/testsuite/gcc.dg/vect/vect-104.c
> index a77c98735eb..a25fdf3ed13 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-104.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-104.c
> @@ -1,5 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> -/* { dg-additional-options "--param max-completely-peel-times=1" } */
> +/* { dg-additional-options "--param max-completely-peel-times=1 -fdump-tree-optimized-details-blocks" } */
>
>  #include <stdlib.h>
>  #include <stdarg.h>
> @@ -65,3 +65,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 1 "vect" { target { ! vect_multiple_sizes } } } } */
>  /* { dg-final { scan-tree-dump "possible dependence between data-refs" "vect" { target vect_multiple_sizes } } } */
>
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-105-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-105-big-array.c
> index 433565bfd4d..921fb85bf8e 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-105-big-array.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-105-big-array.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdlib.h>
>  #include <stdarg.h>
> @@ -95,3 +96,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
>  /* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 0 "vect" } } */
>
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-105.c b/gcc/testsuite/gcc.dg/vect/vect-105.c
> index 17b6e89d8f6..30ac2f21c60 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-105.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-105.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdlib.h>
>  #include <stdarg.h>
> @@ -65,3 +66,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
>  /* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 0 "vect" } } */
>
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-106.c b/gcc/testsuite/gcc.dg/vect/vect-106.c
> index 0171cfcdfa6..685d3576a17 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-106.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-106.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdlib.h>
>  #include <stdarg.h>
> @@ -70,3 +71,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
>
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-107.c b/gcc/testsuite/gcc.dg/vect/vect-107.c
> index aaab9c00345..d3e57fecaec 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-107.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-107.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_float } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -42,3 +43,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */
>  /* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { xfail vect_strided2 } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-108.c b/gcc/testsuite/gcc.dg/vect/vect-108.c
> index 4af6326e9c3..6a562a358e9 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-108.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-108.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int_mult } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -38,3 +39,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
>
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-109.c b/gcc/testsuite/gcc.dg/vect/vect-109.c
> index fe7ea6c420f..9dc476f9de3 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-109.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-109.c
> @@ -1,5 +1,5 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>  /* { dg-skip-if "" { vect_no_align } } */
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-add-options bind_pic_locally } */
> @@ -80,3 +80,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "unsupported unaligned access" 2 "vect" { xfail vect_element_align } } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 3 "vect" { target vect_element_align xfail { ! vect_unaligned_possible } } } } */
>
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-11.c b/gcc/testsuite/gcc.dg/vect/vect-11.c
> index 044fc5edc2d..0a6d7b4cb37 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-11.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-11.c
> @@ -1,5 +1,6 @@
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-require-effective-target vect_int_mult } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -39,3 +40,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-110.c b/gcc/testsuite/gcc.dg/vect/vect-110.c
> index 47c6456107d..cf25da86d38 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-110.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-110.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_float } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -37,3 +38,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" } } */
>
>
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-112-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-112-big-array.c
> index a99a590d9ac..a673fc605d9 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-112-big-array.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-112-big-array.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -43,3 +44,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_unpack } } } */
>
>
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-112.c b/gcc/testsuite/gcc.dg/vect/vect-112.c
> index 44e2cb270c4..6b18299c06b 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-112.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-112.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -36,3 +37,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_unpack } } } */
>
>
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-113.c b/gcc/testsuite/gcc.dg/vect/vect-113.c
> index a9d45ce9fcc..e6cb727db22 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-113.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-113.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_float } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -33,3 +34,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target powerpc*-*-* i?86-*-* x86_64-*-* } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-114.c b/gcc/testsuite/gcc.dg/vect/vect-114.c
> index 557b44110a0..a67ef563094 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-114.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-114.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_float } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -40,3 +41,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! vect_perm } xfail { aarch64_sve && vect_variable_length } } } } */
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_perm } } } */
>
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-115.c b/gcc/testsuite/gcc.dg/vect/vect-115.c
> index 0502d15ed3e..1fede0a6fd5 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-115.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-115.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -74,3 +75,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
>
>
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-116.c b/gcc/testsuite/gcc.dg/vect/vect-116.c
> index d4aa069772e..2e14f7d477c 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-116.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-116.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>  /* Assuming we can vectorize char multiplication, here's an execute test.  */
>
>  #include <stdarg.h>
> @@ -30,3 +31,4 @@ int main()
>    return 0;
>  }
>
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-117.c b/gcc/testsuite/gcc.dg/vect/vect-117.c
> index 22f8e011872..b6a981e4b1b 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-117.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-117.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -59,3 +60,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 0 "vect" } } */
>
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-118.c b/gcc/testsuite/gcc.dg/vect/vect-118.c
> index 01ae828bd19..71201d1c599 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-118.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-118.c
> @@ -1,5 +1,6 @@
>  /* { dg-do compile } */
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  void f(short * __restrict__ a, short * __restrict__ b, short * __restrict__ x)
>  {
> @@ -9,3 +10,4 @@ void f(short * __restrict__ a, short * __restrict__ b, short * __restrict__ x)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-119.c b/gcc/testsuite/gcc.dg/vect/vect-119.c
> index 29a9c51cd29..028804ae217 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-119.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-119.c
> @@ -1,5 +1,5 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>  /* { dg-do compile } */
>  /* { dg-require-effective-target vect_int } */
>
> @@ -28,3 +28,4 @@ unsigned int foo (const unsigned int x[OUTER][INNER][2])
>  }
>
>  /* { dg-final { scan-tree-dump-times "Detected interleaving load of size 2" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-11a.c b/gcc/testsuite/gcc.dg/vect/vect-11a.c
> index 4f1e15e7429..c289ace6ba8 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-11a.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-11a.c
> @@ -1,5 +1,6 @@
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-require-effective-target vect_int_mult } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -62,3 +63,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-12.c b/gcc/testsuite/gcc.dg/vect/vect-12.c
> index b095170f008..132e2fb2b0a 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-12.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-12.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -41,3 +42,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-120.c b/gcc/testsuite/gcc.dg/vect/vect-120.c
> index cafc9b4092a..e7ef76c7d44 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-120.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-120.c
> @@ -2,6 +2,7 @@
>  /* { dg-require-effective-target vect_float } */
>  /* { dg-require-effective-target vect_shift } */
>  /* { dg-require-effective-target vect_floatint_cvt } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  static inline float
>  i2f(int x)
> @@ -34,3 +35,4 @@ tV()
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-121.c b/gcc/testsuite/gcc.dg/vect/vect-121.c
> index a8f25591021..d820215ca67 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-121.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-121.c
> @@ -1,5 +1,6 @@
>  /* { dg-do compile } */
>  /* { dg-require-effective-target vect_float } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  float *x;
>  float parm;
> @@ -15,3 +16,4 @@ test (int start, int end)
>  }
>
>  /* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-122.c b/gcc/testsuite/gcc.dg/vect/vect-122.c
> index 04dae679647..cdc4d7b65d0 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-122.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-122.c
> @@ -1,3 +1,4 @@
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>  #include "tree-vect.h"
>
>  #ifndef N
> @@ -56,3 +57,4 @@ main ()
>    return 0;
>  }
>
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-123.c b/gcc/testsuite/gcc.dg/vect/vect-123.c
> index 210da1e4bca..20edd7ba263 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-123.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-123.c
> @@ -1,5 +1,6 @@
>  /* { dg-do compile } */
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  int x[4092];
>  int y[1024];
> @@ -12,3 +13,4 @@ void foo (int s)
>  }
>
>  /* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-124.c b/gcc/testsuite/gcc.dg/vect/vect-124.c
> index c720648aadd..a91056dd1d6 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-124.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-124.c
> @@ -1,3 +1,4 @@
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>  #include "tree-vect.h"
>
>  #ifndef N
> @@ -27,3 +28,4 @@ main ()
>    return 0;
>  }
>
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-126.c b/gcc/testsuite/gcc.dg/vect/vect-126.c
> index f01b95e1920..02d1f1e1970 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-126.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-126.c
> @@ -1,5 +1,6 @@
>  /* PR tree-optimization/66718 */
>  /* { dg-do compile } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  int *a[1024], b[1024];
>  struct S { int u, v, w, x; };
> @@ -61,3 +62,4 @@ f6 (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 7 "vect" { target { i?86-*-* x86_64-*-* } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-13.c b/gcc/testsuite/gcc.dg/vect/vect-13.c
> index 5d902924ec2..57ca2b2908e 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-13.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-13.c
> @@ -1,5 +1,6 @@
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-add-options bind_pic_locally } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -40,3 +41,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_int_min_max } } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-14.c b/gcc/testsuite/gcc.dg/vect/vect-14.c
> index 1640220a134..36a643f5dfd 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-14.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-14.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -34,3 +35,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-15-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-15-big-array.c
> index 5313eae598b..e724645f94f 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-15-big-array.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-15-big-array.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -42,3 +43,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_perm && vect_hw_misalign } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-15.c b/gcc/testsuite/gcc.dg/vect/vect-15.c
> index 178bc4404c4..103c4b6dae8 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-15.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-15.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -36,3 +37,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_perm && vect_hw_misalign } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-17.c b/gcc/testsuite/gcc.dg/vect/vect-17.c
> index 471a82336cf..31a7795d7a3 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-17.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-17.c
> @@ -1,5 +1,6 @@
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-add-options bind_pic_locally } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -127,3 +128,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_bitwise } } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-18.c b/gcc/testsuite/gcc.dg/vect/vect-18.c
> index 28b2941e581..bda1c4f25e3 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-18.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-18.c
> @@ -1,5 +1,6 @@
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-add-options bind_pic_locally } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -126,3 +127,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_bitwise } } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-19.c b/gcc/testsuite/gcc.dg/vect/vect-19.c
> index 27c6dc835a6..cbbd99c89a3 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-19.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-19.c
> @@ -1,3 +1,4 @@
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-add-options bind_pic_locally } */
>
> @@ -126,3 +127,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_bitwise } } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-2-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-2-big-array.c
> index 162cb54b58d..839798c9ae8 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-2-big-array.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-2-big-array.c
> @@ -1,5 +1,6 @@
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-add-options bind_pic_locally } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -44,3 +45,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-2.c b/gcc/testsuite/gcc.dg/vect/vect-2.c
> index d975668cbd0..8c759a5ecd6 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-2.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-2.c
> @@ -1,5 +1,6 @@
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-add-options bind_pic_locally } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -38,3 +39,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-20.c b/gcc/testsuite/gcc.dg/vect/vect-20.c
> index 8d759f3c6a6..5b71dee6783 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-20.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-20.c
> @@ -1,5 +1,6 @@
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-add-options bind_pic_locally } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -98,3 +99,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_bitwise } } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-21.c b/gcc/testsuite/gcc.dg/vect/vect-21.c
> index ab77df6ef88..83cade50d1f 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-21.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-21.c
> @@ -1,5 +1,6 @@
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-add-options bind_pic_locally } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -127,3 +128,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { target vect_condition } } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
>
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-22.c b/gcc/testsuite/gcc.dg/vect/vect-22.c
> index 78dc1ce91de..c4d8aaa48f5 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-22.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-22.c
> @@ -1,6 +1,7 @@
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-require-effective-target vect_float } */
>  /* { dg-add-options bind_pic_locally } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -124,3 +125,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
>
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-23.c b/gcc/testsuite/gcc.dg/vect/vect-23.c
> index 69e0848c8ec..5bedc82cefb 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-23.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-23.c
> @@ -1,5 +1,6 @@
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-require-effective-target vect_condition } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -126,3 +127,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-24.c b/gcc/testsuite/gcc.dg/vect/vect-24.c
> index fa4c0620d29..c64e5cf5731 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-24.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-24.c
> @@ -1,6 +1,7 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
>  /* { dg-additional-options "--param vect-epilogues-nomask=0" } */
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -128,3 +129,4 @@ int main (void)
>     bitwise or.  */
>  /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail { ! vect_condition } } } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-25.c b/gcc/testsuite/gcc.dg/vect/vect-25.c
> index 904eea8a17b..712bf0e3f1b 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-25.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-25.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -52,3 +53,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-26.c b/gcc/testsuite/gcc.dg/vect/vect-26.c
> index 8a141f38400..3d76b223b7d 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-26.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-26.c
> @@ -1,5 +1,5 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_int } */
>
>  #include <stdarg.h>
> @@ -40,3 +40,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_element_align_preferred || { ! vect_align_stack_vars } } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-27.c b/gcc/testsuite/gcc.dg/vect/vect-27.c
> index ac86b21aceb..8e32d703906 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-27.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-27.c
> @@ -1,5 +1,5 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-add-options bind_pic_locally } */
>
> @@ -50,3 +50,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { ! vect_unaligned_possible } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-28.c b/gcc/testsuite/gcc.dg/vect/vect-28.c
> index e213df1a465..47301459e21 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-28.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-28.c
> @@ -1,5 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> -/* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
> +/* { dg-additional-options "--param vect-max-peeling-for-alignment=0 -fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -41,3 +41,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-29.c b/gcc/testsuite/gcc.dg/vect/vect-29.c
> index bbd446dfe63..0d98417cef9 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-29.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-29.c
> @@ -1,5 +1,5 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-add-options bind_pic_locally } */
>
> @@ -56,3 +56,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { ! vect_unaligned_possible } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" {target { vect_no_align && { ! vect_hw_misalign } } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-3.c b/gcc/testsuite/gcc.dg/vect/vect-3.c
> index 6fc6557cf9f..d87fddcfea8 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-3.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-3.c
> @@ -1,6 +1,7 @@
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-require-effective-target vect_float } */
>  /* { dg-add-options bind_pic_locally } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -49,3 +50,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-30.c b/gcc/testsuite/gcc.dg/vect/vect-30.c
> index 71f7a2d169f..fbc28fd7b00 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-30.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-30.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_float } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -62,3 +63,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-31-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-31-big-array.c
> index 5621eb4d4ba..3568dda7cdc 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-31-big-array.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-31-big-array.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -87,3 +88,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-31.c b/gcc/testsuite/gcc.dg/vect/vect-31.c
> index 3f7d00c1748..93eaf0596c7 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-31.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-31.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -87,3 +88,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-32-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-32-big-array.c
> index 3e1403bbe96..2d11d86f7c1 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-32-big-array.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-32-big-array.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -37,3 +38,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-32-chars.c b/gcc/testsuite/gcc.dg/vect/vect-32-chars.c
> index 0af5d2d19b4..c2e29b8fb29 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-32-chars.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-32-chars.c
> @@ -1,4 +1,5 @@
>  /* { dg-do compile } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>  /* { dg-additional-options "-mavx512bw -mavx512vl" { target { i?86-*-* x86_64-*-* } } } */
>
>  char a[32];
> @@ -14,3 +15,4 @@ void test()
>  }
>
>  /* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" { target { i?86-*-* x86_64-*-* } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-32.c b/gcc/testsuite/gcc.dg/vect/vect-32.c
> index 2684cf2e0d3..08f75e9a4d4 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-32.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-32.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -41,3 +42,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-33-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-33-big-array.c
> index c1aa399a240..ba4616e4953 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-33-big-array.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-33-big-array.c
> @@ -1,6 +1,6 @@
>  /* { dg-do compile } */
>  /* { dg-require-effective-target vect_int } */
> -/* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
> +/* { dg-additional-options "--param vect-max-peeling-for-alignment=0 -fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -40,3 +40,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-33.c b/gcc/testsuite/gcc.dg/vect/vect-33.c
> index e215052ff77..6a2acb417fa 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-33.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-33.c
> @@ -1,5 +1,6 @@
>  /* { dg-do compile } */
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -40,3 +41,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump "Vectorizing an unaligned access" "vect" { target { { { ! powerpc*-*-* } && vect_hw_misalign } && { { ! vect64 } || vect_multiple_sizes } } xfail { ! vect_unaligned_possible } } } }  */
>  /* { dg-final { scan-tree-dump "Alignment of access forced using peeling" "vect" { target { vector_alignment_reachable && { vect64 && {! vect_multiple_sizes} } } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { { {! vector_alignment_reachable} || {! vect64} } && {! vect_hw_misalign} } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-34-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-34-big-array.c
> index 0aa6d507a82..529823b9f75 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-34-big-array.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-34-big-array.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -43,3 +44,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-34.c b/gcc/testsuite/gcc.dg/vect/vect-34.c
> index 9cc590253c7..2bc63294f18 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-34.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-34.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -38,3 +39,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-35-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-35-big-array.c
> index 28a99c910fd..7cd28704a33 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-35-big-array.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-35-big-array.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -44,3 +45,4 @@ int main (void)
>
>
>  /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect"  { xfail { ia64-*-* sparc*-*-* } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-35.c b/gcc/testsuite/gcc.dg/vect/vect-35.c
> index a7ec0f16d4c..02b9b90e077 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-35.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-35.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -44,3 +45,4 @@ int main (void)
>
>
>  /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect"  { xfail { ia64-*-* sparc*-*-* } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-36-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-36-big-array.c
> index d40fcb6d992..7a835513eb4 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-36-big-array.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-36-big-array.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -44,3 +45,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-36.c b/gcc/testsuite/gcc.dg/vect/vect-36.c
> index 64bc7fe1809..8b32a03ffc3 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-36.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-36.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -44,3 +45,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-38.c b/gcc/testsuite/gcc.dg/vect/vect-38.c
> index 01d984c61b8..cd13ad881d3 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-38.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-38.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_double } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -37,3 +38,4 @@ int main (void)
>
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-4.c b/gcc/testsuite/gcc.dg/vect/vect-4.c
> index b0cc45be7de..818fdcafa6f 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-4.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-4.c
> @@ -1,5 +1,6 @@
>  /* { dg-require-effective-target vect_float } */
>  /* { dg-add-options bind_pic_locally } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -39,3 +40,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-40.c b/gcc/testsuite/gcc.dg/vect/vect-40.c
> index c74703268f9..87b92a7fcd9 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-40.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-40.c
> @@ -1,5 +1,6 @@
>  /* { dg-require-effective-target vect_float } */
>  /* { dg-add-options double_vectors } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -60,3 +61,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"} } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-42.c b/gcc/testsuite/gcc.dg/vect/vect-42.c
> index 086cbf20c0a..85c8f47aae0 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-42.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-42.c
> @@ -1,5 +1,5 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_float } */
>  /* { dg-add-options double_vectors } */
>
> @@ -71,3 +71,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { xfail { vect_no_align || { { !  vector_alignment_reachable } || vect_element_align  } } } } }  */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 3 "vect" { target vect_element_align xfail { ! { vect_unaligned_possible && vect_align_stack_vars } } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || { { ! vector_alignment_reachable } || vect_element_align } } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-44.c b/gcc/testsuite/gcc.dg/vect/vect-44.c
> index f7f1fd28665..1b19de5d365 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-44.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-44.c
> @@ -1,5 +1,5 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_float } */
>  /* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
>
> @@ -71,3 +71,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" { xfail { { vect_no_align && { ! vect_hw_misalign } } || {! vector_alignment_reachable} } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { {! vector_alignment_reachable} && {{! vect_no_align} && {! vect_hw_misalign} } } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-46.c b/gcc/testsuite/gcc.dg/vect/vect-46.c
> index 185ac1424f9..3981d2e1301 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-46.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-46.c
> @@ -1,5 +1,6 @@
>  /* { dg-require-effective-target vect_float } */
>  /* { dg-add-options double_vectors } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -62,3 +63,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-48.c b/gcc/testsuite/gcc.dg/vect/vect-48.c
> index b29fe47635a..f4d6f0c1464 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-48.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-48.c
> @@ -1,5 +1,5 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_float } */
>  /* { dg-add-options double_vectors } */
>
> @@ -61,3 +61,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { target vect_align_stack_vars xfail { ! vect_unaligned_possible } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 2 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-5.c b/gcc/testsuite/gcc.dg/vect/vect-5.c
> index 17f3b2fac9a..6b91f8aa406 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-5.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-5.c
> @@ -1,5 +1,6 @@
>  /* { dg-require-effective-target vect_float } */
>  /* { dg-add-options bind_pic_locally } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -56,3 +57,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-50.c b/gcc/testsuite/gcc.dg/vect/vect-50.c
> index f43676896af..9aec47a99da 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-50.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-50.c
> @@ -1,5 +1,5 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_float } */
>  /* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
>
> @@ -67,3 +67,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" { xfail { { vect_no_align && { ! vect_hw_misalign } } || {! vector_alignment_reachable} } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { {! vector_alignment_reachable} && { {! vect_no_align } && {! vect_hw_misalign } } } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-52.c b/gcc/testsuite/gcc.dg/vect/vect-52.c
> index c20a4be2ede..78de172f2e2 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-52.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-52.c
> @@ -1,7 +1,7 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
>  /* { dg-require-effective-target vect_float } */
>  /* { dg-add-options double_vectors } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -62,3 +62,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { target vect_align_stack_vars xfail { ! vect_unaligned_possible } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 2 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-54.c b/gcc/testsuite/gcc.dg/vect/vect-54.c
> index 2b236e48e19..d7edf6a1471 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-54.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-54.c
> @@ -1,5 +1,5 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_float } */
>  /* { dg-add-options double_vectors } */
>
> @@ -64,3 +64,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_element_align_preferred } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-56.c b/gcc/testsuite/gcc.dg/vect/vect-56.c
> index c914126ece5..7cc2381adea 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-56.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-56.c
> @@ -1,5 +1,5 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_float } */
>
>  #include <stdarg.h>
> @@ -74,3 +74,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target { vect_element_align } xfail { ! vect_unaligned_possible } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" { target { { ! vect_element_align } || vect_element_align_preferred} } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { vect_element_align && { ! vect_element_align_preferred } } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-58.c b/gcc/testsuite/gcc.dg/vect/vect-58.c
> index da4f9740e33..2be206796a9 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-58.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-58.c
> @@ -1,5 +1,5 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_float } */
>
>  #include <stdarg.h>
> @@ -62,3 +62,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_element_align_preferred } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-6-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-6-big-array.c
> index c5de86b167a..5d4ba0d51cc 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-6-big-array.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-6-big-array.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_float } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -71,3 +72,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target { { vect_aligned_arrays } && {! vect_sizes_32B_16B} } } } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target { {! vect_aligned_arrays } && {vect_sizes_32B_16B} } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-6.c b/gcc/testsuite/gcc.dg/vect/vect-6.c
> index c3e6336bb43..24305dbf0c4 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-6.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-6.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_float } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -56,3 +57,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target { { vect_aligned_arrays } && {! vect_sizes_32B_16B} } } } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target { {! vect_aligned_arrays } && {vect_sizes_32B_16B} } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-60.c b/gcc/testsuite/gcc.dg/vect/vect-60.c
> index 121c503c63a..ed7fe31cd11 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-60.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-60.c
> @@ -1,5 +1,5 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_float } */
>
>  #include <stdarg.h>
> @@ -75,3 +75,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target { vect_element_align } xfail { ! vect_unaligned_possible } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" { target { { ! vect_element_align } || vect_element_align_preferred } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { vect_element_align && { ! vect_element_align_preferred } } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-62.c b/gcc/testsuite/gcc.dg/vect/vect-62.c
> index abd3d700668..04935bef8aa 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-62.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-62.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -66,3 +67,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-63.c b/gcc/testsuite/gcc.dg/vect/vect-63.c
> index 8d002a5e3c3..58965b9c42c 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-63.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-63.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -43,3 +44,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-64.c b/gcc/testsuite/gcc.dg/vect/vect-64.c
> index 240b68f6d0d..c20cd50cdf7 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-64.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-64.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -83,3 +84,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-65.c b/gcc/testsuite/gcc.dg/vect/vect-65.c
> index 9ac8ea4f013..9b6465b74b6 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-65.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-65.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -80,3 +81,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-66.c b/gcc/testsuite/gcc.dg/vect/vect-66.c
> index ccb66bc8001..35282020820 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-66.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-66.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -93,3 +94,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 3 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-67.c b/gcc/testsuite/gcc.dg/vect/vect-67.c
> index 12183a233c2..d4820c02ec2 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-67.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-67.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -50,3 +51,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-68.c b/gcc/testsuite/gcc.dg/vect/vect-68.c
> index 3012d88494d..d42117332fe 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-68.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-68.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -86,3 +87,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-7.c b/gcc/testsuite/gcc.dg/vect/vect-7.c
> index c4556e321c6..bc3e471e01d 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-7.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-7.c
> @@ -1,5 +1,6 @@
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-add-options bind_pic_locally } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -50,3 +51,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-70.c b/gcc/testsuite/gcc.dg/vect/vect-70.c
> index 793dbfb7481..81953dd4b91 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-70.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-70.c
> @@ -1,5 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> -/* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
> +/* { dg-additional-options "--param vect-max-peeling-for-alignment=0 -fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -85,3 +85,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" {target {{! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-71.c b/gcc/testsuite/gcc.dg/vect/vect-71.c
> index 581473fa4a1..14dfa310230 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-71.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-71.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -37,3 +38,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-72.c b/gcc/testsuite/gcc.dg/vect/vect-72.c
> index 9e8e91b7ae6..d2154c2a9a6 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-72.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-72.c
> @@ -1,5 +1,5 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-add-options bind_pic_locally } */
>
> @@ -52,3 +52,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { ! vect_unaligned_possible } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-73-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-73-big-array.c
> index 1c9d1fdaf9a..92c9a29d91f 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-73-big-array.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-73-big-array.c
> @@ -1,5 +1,6 @@
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-add-options bind_pic_locally } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -46,3 +47,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-73.c b/gcc/testsuite/gcc.dg/vect/vect-73.c
> index fdb49b86362..cc9010b67ac 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-73.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-73.c
> @@ -1,5 +1,6 @@
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-add-options bind_pic_locally } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -40,3 +41,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-74-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-74-big-array.c
> index ba1ae63bd57..067405c2a85 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-74-big-array.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-74-big-array.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_float } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -61,3 +62,4 @@ int main (void)
>   dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } }
>   dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_no_align } }
>  */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-74.c b/gcc/testsuite/gcc.dg/vect/vect-74.c
> index a44f643ee96..295ebdef358 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-74.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-74.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_float } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -49,3 +50,4 @@ int main (void)
>   dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } }
>   dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_no_align } }
>  */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-75-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-75-big-array.c
> index a3fb5053037..3825dee6dc3 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-75-big-array.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-75-big-array.c
> @@ -1,5 +1,5 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_int } */
>
>  #include <stdarg.h>
> @@ -54,3 +54,4 @@ int main (void)
>  /*  { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { target { ! vect_align_stack_vars } xfail { ! vect_unaligned_possible } } } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target vect_align_stack_vars xfail { ! vect_unaligned_possible } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-75.c b/gcc/testsuite/gcc.dg/vect/vect-75.c
> index 88da97f0bb7..fc4f3217c30 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-75.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-75.c
> @@ -1,5 +1,5 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_int } */
>
>  #include <stdarg.h>
> @@ -54,3 +54,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { target { ! vect_align_stack_vars } xfail { ! vect_unaligned_possible } } } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target vect_align_stack_vars xfail { ! vect_unaligned_possible } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-76-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-76-big-array.c
> index 5825cfc4464..b3d03a7b435 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-76-big-array.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-76-big-array.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -77,3 +78,4 @@ int main (void)
>
>
>  /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-76.c b/gcc/testsuite/gcc.dg/vect/vect-76.c
> index 3f4feeff8ac..6c8b9018808 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-76.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-76.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -71,3 +72,4 @@ int main (void)
>
>
>  /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-77-alignchecks.c b/gcc/testsuite/gcc.dg/vect/vect-77-alignchecks.c
> index fb3e4992782..9b43de3baa0 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-77-alignchecks.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-77-alignchecks.c
> @@ -1,5 +1,5 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_int } */
>
>  #include <stdarg.h>
> @@ -61,3 +61,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { {! vect_no_align} && { unaligned_stack && vector_alignment_reachable } } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { { {! unaligned_stack} && { vect_no_align && { ! vect_hw_misalign } } } || {unaligned_stack && { {! vector_alignment_reachable} && {! vect_no_align } } } } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 2 "vect" { target { { unaligned_stack && { vector_alignment_reachable && vect_no_align } } || {unaligned_stack && { {! vector_alignment_reachable} && vect_no_align } } } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-77-global.c b/gcc/testsuite/gcc.dg/vect/vect-77-global.c
> index 1580d6e075b..419b55d6cf8 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-77-global.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-77-global.c
> @@ -1,5 +1,5 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-add-options bind_pic_locally } */
>
> @@ -53,3 +53,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { ! vect_unaligned_possible } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-77.c b/gcc/testsuite/gcc.dg/vect/vect-77.c
> index d402e147043..bc2c2b8a3d4 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-77.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-77.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -43,3 +44,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-78-alignchecks.c b/gcc/testsuite/gcc.dg/vect/vect-78-alignchecks.c
> index 57e8da0a909..c200c1166eb 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-78-alignchecks.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-78-alignchecks.c
> @@ -1,5 +1,5 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_int } */
>
>  #include <stdarg.h>
> @@ -62,3 +62,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { {! vect_no_align} && { unaligned_stack && vector_alignment_reachable } } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { { {! unaligned_stack} && { vect_no_align && { ! vect_hw_misalign } } } || {unaligned_stack && { {! vector_alignment_reachable} && { ! vect_no_align } } } } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 2 "vect" { target { { unaligned_stack && { vector_alignment_reachable && vect_no_align } } || {unaligned_stack && { {! vector_alignment_reachable} && vect_no_align } } } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-78-global.c b/gcc/testsuite/gcc.dg/vect/vect-78-global.c
> index ea039b389b2..4565e4f5090 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-78-global.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-78-global.c
> @@ -1,5 +1,5 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-add-options bind_pic_locally } */
>
> @@ -53,3 +53,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { ! vect_unaligned_possible } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-78.c b/gcc/testsuite/gcc.dg/vect/vect-78.c
> index faa7f2f4f76..6032a4f1f29 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-78.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-78.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -43,3 +44,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-8.c b/gcc/testsuite/gcc.dg/vect/vect-8.c
> index 44c5f53ebaf..d6b90276247 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-8.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-8.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_float } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -36,3 +37,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-80-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-80-big-array.c
> index 0baf4d2859b..245035b7493 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-80-big-array.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-80-big-array.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_float } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -64,3 +65,4 @@ int main (void)
>   dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_no_align } }
>   dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" { target vect_no_align } }
>  */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-80.c b/gcc/testsuite/gcc.dg/vect/vect-80.c
> index 45aac84a578..eb1514d51d1 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-80.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-80.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_float } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -53,3 +54,4 @@ int main (void)
>   dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_no_align } }
>   dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" { target vect_no_align } }
>  */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-82.c b/gcc/testsuite/gcc.dg/vect/vect-82.c
> index fcafb36c063..6e41a04c238 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-82.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-82.c
> @@ -1,4 +1,5 @@
>  /* { dg-skip-if "powerpc and integer vectorization only" { ! { powerpc*-*-* && vect_int } }  } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -34,3 +35,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-82_64.c b/gcc/testsuite/gcc.dg/vect/vect-82_64.c
> index 358a85a838f..f1d4574c1a9 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-82_64.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-82_64.c
> @@ -1,6 +1,6 @@
>  /* { dg-do run { target { { powerpc*-*-* && lp64 } && powerpc_altivec_ok } } } */
>  /* { dg-do compile { target { { powerpc*-*-* && ilp32 } && powerpc_altivec_ok } } } */
> -/* { dg-additional-options "-mpowerpc64 -maltivec" } */
> +/* { dg-additional-options "-mpowerpc64 -maltivec -fdump-tree-optimized-details-blocks" } */
>  /* { dg-skip-if "" { powerpc-ibm-aix* } } */
>
>  #include <stdarg.h>
> @@ -37,3 +37,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-83.c b/gcc/testsuite/gcc.dg/vect/vect-83.c
> index a300a0a08c4..d6efd0c2804 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-83.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-83.c
> @@ -1,4 +1,5 @@
>  /* { dg-skip-if "powerpc and integer vectorization only" { ! { powerpc*-*-* && vect_int } }  } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -34,3 +35,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-83_64.c b/gcc/testsuite/gcc.dg/vect/vect-83_64.c
> index a5e897e093d..8224c8c54d8 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-83_64.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-83_64.c
> @@ -1,6 +1,6 @@
>  /* { dg-do run { target { { powerpc*-*-* && lp64 } && powerpc_altivec_ok } } } */
>  /* { dg-do compile { target { { powerpc*-*-* && ilp32 } && powerpc_altivec_ok } } } */
> -/* { dg-additional-options "-mpowerpc64 -maltivec" } */
> +/* { dg-additional-options "-mpowerpc64 -maltivec -fdump-tree-optimized-details-blocks" } */
>  /* { dg-skip-if "" { powerpc-ibm-aix* } } */
>
>  #include <stdarg.h>
> @@ -37,3 +37,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-85-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-85-big-array.c
> index ade04016cc3..d4f847aee8e 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-85-big-array.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-85-big-array.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -46,3 +47,4 @@ int main (void)
>
>  /* Fails for targets that don't vectorize PLUS (e.g alpha).  */
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-85.c b/gcc/testsuite/gcc.dg/vect/vect-85.c
> index a73bae1ad41..25e8ded8142 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-85.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-85.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -46,3 +47,4 @@ int main (void)
>
>  /* Fails for targets that don't vectorize PLUS (e.g alpha).  */
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-86.c b/gcc/testsuite/gcc.dg/vect/vect-86.c
> index ff1d41df23f..8eddf4b7b90 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-86.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-86.c
> @@ -1,5 +1,6 @@
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-add-options bind_pic_locally } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -53,3 +54,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-87.c b/gcc/testsuite/gcc.dg/vect/vect-87.c
> index 17b1dcdee99..844b40c5903 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-87.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-87.c
> @@ -1,5 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> -/* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
> +/* { dg-additional-options "--param vect-max-peeling-for-alignment=0 -fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -52,3 +52,4 @@ int main (void)
>  /* Fails for targets that don't vectorize PLUS (e.g alpha).  */
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" {target { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-88.c b/gcc/testsuite/gcc.dg/vect/vect-88.c
> index b99cb4d89a4..7ae82aab61d 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-88.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-88.c
> @@ -1,5 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> -/* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
> +/* { dg-additional-options "--param vect-max-peeling-for-alignment=0 -fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -52,3 +52,4 @@ int main (void)
>  /* Fails for targets that don't vectorize PLUS (e.g alpha).  */
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" {target { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-89-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-89-big-array.c
> index 59e1aae0017..437328c53a5 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-89-big-array.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-89-big-array.c
> @@ -1,5 +1,5 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_int } */
>
>  #include <stdarg.h>
> @@ -49,3 +49,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_element_align_preferred || { ! vect_align_stack_vars } } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-89.c b/gcc/testsuite/gcc.dg/vect/vect-89.c
> index 356ab96d330..cdadeb52551 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-89.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-89.c
> @@ -1,5 +1,5 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_int } */
>
>  #include <stdarg.h>
> @@ -53,3 +53,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_element_align_preferred || { ! vect_align_stack_vars } } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-9.c b/gcc/testsuite/gcc.dg/vect/vect-9.c
> index 87600fb5df0..95701911185 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-9.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-9.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -37,3 +38,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_unpack } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-91.c b/gcc/testsuite/gcc.dg/vect/vect-91.c
> index 8983c7da870..ee54953d711 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-91.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-91.c
> @@ -1,6 +1,6 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
>  /* { dg-do compile } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
>
> @@ -69,3 +69,4 @@ main3 ()
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 3 "vect" { xfail vect_no_int_add } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 3 "vect" {target { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-92.c b/gcc/testsuite/gcc.dg/vect/vect-92.c
> index 9ceb0fbadcd..16186cd923b 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-92.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-92.c
> @@ -1,5 +1,5 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_float } */
>
>  #include <stdarg.h>
> @@ -101,3 +101,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 3 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" { xfail vect_element_align_preferred } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-93.c b/gcc/testsuite/gcc.dg/vect/vect-93.c
> index c3e12783b2c..a38f15d2202 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-93.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-93.c
> @@ -1,5 +1,5 @@
>  /* { dg-require-effective-target vect_float } */
> -/* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
> +/* { dg-additional-options "--param vect-max-peeling-for-alignment=0 -fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -87,3 +87,4 @@ int main (void)
>  /* in main: */
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
>
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-95.c b/gcc/testsuite/gcc.dg/vect/vect-95.c
> index 1e8bc1e7240..a8093ac9f21 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-95.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-95.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_float } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -63,3 +64,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { xfail { vect_no_align || vect_element_align } } } } */
>  /*  { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
>  /*  { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 4 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-96.c b/gcc/testsuite/gcc.dg/vect/vect-96.c
> index c0d6c37b21d..1f53bc51ed0 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-96.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-96.c
> @@ -1,5 +1,5 @@
>  /* Disabling epilogues until we find a better way to deal with scans.  */
> -/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
> +/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
>  /* { dg-require-effective-target vect_int } */
>  /* { dg-add-options double_vectors } */
>
> @@ -54,3 +54,4 @@ int main (void)
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target { { {! vect_no_align} && vector_alignment_reachable } && vect_align_stack_vars } xfail { ! vect_unaligned_possible } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { { vect_no_align } || { { ! vector_alignment_reachable} || vect_element_align } } } } } */
>  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { { vect_no_align && { ! vect_hw_misalign } } || { {! vector_alignment_reachable} && {! vect_element_align} } } } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-97-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-97-big-array.c
> index 977a9d57ed4..c17c08f5d66 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-97-big-array.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-97-big-array.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -67,3 +68,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-97.c b/gcc/testsuite/gcc.dg/vect/vect-97.c
> index 734ba3b6ca3..a85b0b54a31 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-97.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-97.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -62,3 +63,4 @@ int main (void)
>
>  /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
>  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-98-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-98-big-array.c
> index 61b749d4669..5cdceee9e63 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-98-big-array.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-98-big-array.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -50,3 +51,4 @@ int main (void)
>  /* Needs interleaving support.  */
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided4 } } } */
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { xfail  vect_strided4 } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-98.c b/gcc/testsuite/gcc.dg/vect/vect-98.c
> index 2055cce70b2..aacb7076078 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-98.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-98.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include <stdarg.h>
>  #include "tree-vect.h"
> @@ -42,3 +43,4 @@ int main (void)
>  /* Needs interleaving support.  */
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided4 } } } */
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { xfail  vect_strided4 } } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/vect/vect-99.c b/gcc/testsuite/gcc.dg/vect/vect-99.c
> index ae23b3afbd1..49d5e0106b4 100644
> --- a/gcc/testsuite/gcc.dg/vect/vect-99.c
> +++ b/gcc/testsuite/gcc.dg/vect/vect-99.c
> @@ -1,4 +1,5 @@
>  /* { dg-require-effective-target vect_int } */
> +/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
>
>  #include "tree-vect.h"
>
> @@ -29,3 +30,4 @@ int main (void)
>  }
>
>  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
> +/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
> diff --git a/gcc/tree-vect-loop-manip.cc b/gcc/tree-vect-loop-manip.cc
> index e53a99e7c3c..9de897d05a5 100644
> --- a/gcc/tree-vect-loop-manip.cc
> +++ b/gcc/tree-vect-loop-manip.cc
> @@ -3121,8 +3121,13 @@ vect_do_peeling (loop_vec_info loop_vinfo, tree niters, tree nitersm1,
>    tree niters_prolog;
>    int bound_prolog = 0;
>    if (prolog_peeling)
> -    niters_prolog = vect_gen_prolog_loop_niters (loop_vinfo, anchor,
> -                                                 &bound_prolog);
> +    {
> +      niters_prolog = vect_gen_prolog_loop_niters (loop_vinfo, anchor,
> +                                                   &bound_prolog);
> +      /* If algonment peeling is known, we will always execute prolog.  */
> +      if (TREE_CODE (niters_prolog) == INTEGER_CST)
> +       prob_prolog = profile_probability::always ();
> +    }
>    else
>      niters_prolog = build_int_cst (type, 0);
>
Jan Hubicka Aug. 3, 2023, 9:49 a.m. UTC | #2
> 
> Note most of the profile consistency checks FAIL when testing with -m32 on
> x86_64-unknown-linux-gnu ...
> 
> For example vect-11.c has
> 
> ;;   basic block 4, loop depth 0, count 719407024 (estimated locally,
> freq 0.6700), maybe hot
> ;;   Invalid sum of incoming counts 708669602 (estimated locally, freq
> 0.6600), should be 719407024 (estimated locally, freq 0.6700)
> ;;    prev block 3, next block 5, flags: (NEW, REACHABLE, VISITED)
> ;;    pred:       3 [always (guessed)]  count:708669602 (estimated
> locally, freq 0.6600) (FALSE_VALUE,EXECUTABLE)
>   __asm__ __volatile__("cpuid
>         " : "=a" a_44, "=b" b_45, "=c" c_46, "=d" d_47 : "0" 1, "2" 0);
>   _3 = d_47 & 67108864;
> 
> so it looks like it's the check_vect () function that goes wrong
> everywhere but only on i?86.
> The first dump with the Invalid sum is 095t.fixup_cfg3 already.

Sorry for that, looks like missing/undetected noreturn.  I will take a look.

Honza
Jan Hubicka Aug. 3, 2023, 10:13 a.m. UTC | #3
> > 
> > Note most of the profile consistency checks FAIL when testing with -m32 on
> > x86_64-unknown-linux-gnu ...
> > 
> > For example vect-11.c has
> > 
> > ;;   basic block 4, loop depth 0, count 719407024 (estimated locally,
> > freq 0.6700), maybe hot
> > ;;   Invalid sum of incoming counts 708669602 (estimated locally, freq
> > 0.6600), should be 719407024 (estimated locally, freq 0.6700)
> > ;;    prev block 3, next block 5, flags: (NEW, REACHABLE, VISITED)
> > ;;    pred:       3 [always (guessed)]  count:708669602 (estimated
> > locally, freq 0.6600) (FALSE_VALUE,EXECUTABLE)
> >   __asm__ __volatile__("cpuid
> >         " : "=a" a_44, "=b" b_45, "=c" c_46, "=d" d_47 : "0" 1, "2" 0);
> >   _3 = d_47 & 67108864;
> > 
> > so it looks like it's the check_vect () function that goes wrong
> > everywhere but only on i?86.
> > The first dump with the Invalid sum is 095t.fixup_cfg3 already.
> 
> Sorry for that, looks like missing/undetected noreturn.  I will take a look.

The mismatch at fixup_cfg3 is harmless since we repropagate frequencies
later now.  The misupdate is caused by jump threading:

vect-11.c.102t.adjust_alignment:;;   Invalid sum of incoming counts 354334800 (estimated locally, freq 0.3300), should be 233860966 (estimated locally, freq 0.2178)
vect-11.c.102t.adjust_alignment:;;   Invalid sum of incoming counts 354334800 (estimated locally, freq 0.3300), should be 474808634 (estimated locally, freq 0.4422)
vect-11.c.107t.rebuild_frequencies1
vect-11.c.116t.threadfull1:;;   Invalid sum of incoming counts 708669600 (estimated locally, freq 0.6600), should be 719407024 (estimated locally, freq 0.6700)

I know that there are problems left in profile threading update.  It was
main pass disturbing profile until gcc13 and now works for basic
testcases but not always.  I already spent quite some time trying to
figure out what is wrong with profile threading (PR103680), so at least
this is small testcase.

Jeff, an help would be appreciated here :)

I will try to debug this.  One option would be to disable branch
prediciton on vect_check for time being - it is not inlined anyway

diff --git a/gcc/testsuite/gcc.dg/vect/tree-vect.h b/gcc/testsuite/gcc.dg/vect/tree-vect.h
index c4b81441216..544be31be78 100644
--- a/gcc/testsuite/gcc.dg/vect/tree-vect.h
+++ b/gcc/testsuite/gcc.dg/vect/tree-vect.h
@@ -20,7 +20,7 @@ sig_ill_handler (int sig)
   exit(0);
 }
 
-static void __attribute__((noinline))
+static void __attribute__((noinline,optimize(0)))
 check_vect (void)
 {
   signal(SIGILL, sig_ill_handler);

Honza
Jeff Law Aug. 3, 2023, 1:53 p.m. UTC | #4
On 8/3/23 04:13, Jan Hubicka wrote:
>>>
>>> Note most of the profile consistency checks FAIL when testing with -m32 on
>>> x86_64-unknown-linux-gnu ...
>>>
>>> For example vect-11.c has
>>>
>>> ;;   basic block 4, loop depth 0, count 719407024 (estimated locally,
>>> freq 0.6700), maybe hot
>>> ;;   Invalid sum of incoming counts 708669602 (estimated locally, freq
>>> 0.6600), should be 719407024 (estimated locally, freq 0.6700)
>>> ;;    prev block 3, next block 5, flags: (NEW, REACHABLE, VISITED)
>>> ;;    pred:       3 [always (guessed)]  count:708669602 (estimated
>>> locally, freq 0.6600) (FALSE_VALUE,EXECUTABLE)
>>>    __asm__ __volatile__("cpuid
>>>          " : "=a" a_44, "=b" b_45, "=c" c_46, "=d" d_47 : "0" 1, "2" 0);
>>>    _3 = d_47 & 67108864;
>>>
>>> so it looks like it's the check_vect () function that goes wrong
>>> everywhere but only on i?86.
>>> The first dump with the Invalid sum is 095t.fixup_cfg3 already.
>>
>> Sorry for that, looks like missing/undetected noreturn.  I will take a look.
> 
> The mismatch at fixup_cfg3 is harmless since we repropagate frequencies
> later now.  The misupdate is caused by jump threading:
> 
> vect-11.c.102t.adjust_alignment:;;   Invalid sum of incoming counts 354334800 (estimated locally, freq 0.3300), should be 233860966 (estimated locally, freq 0.2178)
> vect-11.c.102t.adjust_alignment:;;   Invalid sum of incoming counts 354334800 (estimated locally, freq 0.3300), should be 474808634 (estimated locally, freq 0.4422)
> vect-11.c.107t.rebuild_frequencies1
> vect-11.c.116t.threadfull1:;;   Invalid sum of incoming counts 708669600 (estimated locally, freq 0.6600), should be 719407024 (estimated locally, freq 0.6700)
> 
> I know that there are problems left in profile threading update.  It was
> main pass disturbing profile until gcc13 and now works for basic
> testcases but not always.  I already spent quite some time trying to
> figure out what is wrong with profile threading (PR103680), so at least
> this is small testcase.
> 
> Jeff, an help would be appreciated here :)
> 
> I will try to debug this.  One option would be to disable branch
> prediciton on vect_check for time being - it is not inlined anyway
Not a lot of insight.  The backwards threader uses a totally different 
API for the CFG/SSA updates and that API I don't think has made any 
significant effort to keep the profile up-to-date.

Jeff
Jan Hubicka Aug. 3, 2023, 2:23 p.m. UTC | #5
> > Jeff, an help would be appreciated here :)
> > 
> > I will try to debug this.  One option would be to disable branch
> > prediciton on vect_check for time being - it is not inlined anyway
> Not a lot of insight.  The backwards threader uses a totally different API
> for the CFG/SSA updates and that API I don't think has made any significant
> effort to keep the profile up-to-date.

OK, at least some hints where the missing profile updat should be, would
be good. There is update_profile in tree-ssa-threadupdate and
understaning what is missing would be nice
In general it would be nice to mind profile when updating CFG :)

Honza
> 
> Jeff
Jeff Law Aug. 3, 2023, 2:29 p.m. UTC | #6
On 8/3/23 08:23, Jan Hubicka wrote:
>>> Jeff, an help would be appreciated here :)
>>>
>>> I will try to debug this.  One option would be to disable branch
>>> prediciton on vect_check for time being - it is not inlined anyway
>> Not a lot of insight.  The backwards threader uses a totally different API
>> for the CFG/SSA updates and that API I don't think has made any significant
>> effort to keep the profile up-to-date.
> 
> OK, at least some hints where the missing profile updat should be, would
> be good. There is update_profile in tree-ssa-threadupdate and
> understaning what is missing would be nice
> In general it would be nice to mind profile when updating CFG :)
THe backwards threader doesn't use much of the code in 
tree-ssa-threadupdate IIRC.  The bulk of the work for the backwards 
threader is done by copy_bbs.  I've actually suggested those two 
implementations be totally separated from each other to avoid confusion. 
  I just haven't had the time to do it (or much of anything with 
threading) myself.

When I last looked at this, the biggest problem was the class of cases 
that are handled by compute_path_counts which was used exclusively by 
the forward threader CFG updating code.  None of those cases in that big 
comment before that function are handled by the copy_bbs paths IIRC.

jeff
Aldy Hernandez Aug. 3, 2023, 3:12 p.m. UTC | #7
On 8/3/23 16:29, Jeff Law wrote:
> 
> 
> On 8/3/23 08:23, Jan Hubicka wrote:
>>>> Jeff, an help would be appreciated here :)
>>>>
>>>> I will try to debug this.  One option would be to disable branch
>>>> prediciton on vect_check for time being - it is not inlined anyway
>>> Not a lot of insight.  The backwards threader uses a totally 
>>> different API
>>> for the CFG/SSA updates and that API I don't think has made any 
>>> significant
>>> effort to keep the profile up-to-date.
>>
>> OK, at least some hints where the missing profile updat should be, would
>> be good. There is update_profile in tree-ssa-threadupdate and
>> understaning what is missing would be nice
>> In general it would be nice to mind profile when updating CFG :)
> THe backwards threader doesn't use much of the code in 
> tree-ssa-threadupdate IIRC.  The bulk of the work for the backwards 
> threader is done by copy_bbs.  I've actually suggested those two 
> implementations be totally separated from each other to avoid confusion. 
>   I just haven't had the time to do it (or much of anything with 
> threading) myself.

A couple cycles ago I separated most of code to distinguish between the 
back and forward threaders.  There is class jt_path_registry that is 
common to both, and {fwd,back}_jt_path_registry for the forward and 
backward threaders respectively.  It's not perfect, but it's a start.

Aldy
Richard Biener Aug. 4, 2023, 6:35 a.m. UTC | #8
On Thu, Aug 3, 2023 at 5:12 PM Aldy Hernandez <aldyh@redhat.com> wrote:
>
>
>
> On 8/3/23 16:29, Jeff Law wrote:
> >
> >
> > On 8/3/23 08:23, Jan Hubicka wrote:
> >>>> Jeff, an help would be appreciated here :)
> >>>>
> >>>> I will try to debug this.  One option would be to disable branch
> >>>> prediciton on vect_check for time being - it is not inlined anyway
> >>> Not a lot of insight.  The backwards threader uses a totally
> >>> different API
> >>> for the CFG/SSA updates and that API I don't think has made any
> >>> significant
> >>> effort to keep the profile up-to-date.
> >>
> >> OK, at least some hints where the missing profile updat should be, would
> >> be good. There is update_profile in tree-ssa-threadupdate and
> >> understaning what is missing would be nice
> >> In general it would be nice to mind profile when updating CFG :)
> > THe backwards threader doesn't use much of the code in
> > tree-ssa-threadupdate IIRC.  The bulk of the work for the backwards
> > threader is done by copy_bbs.  I've actually suggested those two
> > implementations be totally separated from each other to avoid confusion.
> >   I just haven't had the time to do it (or much of anything with
> > threading) myself.
>
> A couple cycles ago I separated most of code to distinguish between the
> back and forward threaders.  There is class jt_path_registry that is
> common to both, and {fwd,back}_jt_path_registry for the forward and
> backward threaders respectively.  It's not perfect, but it's a start.

Yep, it's back_jt_path_registry::update_cfg / duplicate_thread_path
that lacks the updates.

Richard.

> Aldy
>
Jan Hubicka Aug. 4, 2023, 7:06 a.m. UTC | #9
> >
> > A couple cycles ago I separated most of code to distinguish between the
> > back and forward threaders.  There is class jt_path_registry that is
> > common to both, and {fwd,back}_jt_path_registry for the forward and
> > backward threaders respectively.  It's not perfect, but it's a start.
> 
> Yep, it's back_jt_path_registry::update_cfg / duplicate_thread_path
> that lacks the updates.

duplicate_thread_path has profile update (using
profile_bb_update_for_threading and
scale_bbs_frequencies_profile_count).  It will however silently keep
profile misupdated if the cfg were originally inconsistent with the
threaded path (in which case it is intended to keep profile
inconsistent, but we should have it logged so we know it is "okay after
all").  I will add logging same as in profile_bb_update_for_threading, so
these things are easier to figure out.

What happens in the test is that we have __builtin_constant_p that
blocks early threading and we thread only after profile is constructed.
I did not check by hand if the original profile is guessed
inconsistently.

Honza
> 
> Richard.
> 
> > Aldy
> >
Jan Hubicka Aug. 4, 2023, 8:52 a.m. UTC | #10
Hi,
so I found the problem.  We duplicate multiple paths and end up with:

;; basic block 6, loop depth 0, count 365072224 (estimated locally, freq 0.3400)
;;  prev block 12, next block 7, flags: (NEW, REACHABLE, VISITED)
;;  pred:       4 [never (guessed)]  count:0 (estimated locally, freq 0.0000) (TRUE_VALUE,EXECUTABLE)
;;              10 [always]  count:365072224 (estimated locally, freq 0.3400) (FALLTHRU,EXECUTABLE)
# _18 = PHI <0(4), 0(10)>
# d_39 = PHI <d_40(D)(4), d_40(D)(10)>
if (_18 == 0)
  goto <bb 8>; [97.06%]
else
  goto <bb 7>; [2.94%]
;;  succ:       8 [97.1% (guessed)]  count:354334801 (estimated locally, freq 0.3300) (TRUE_VALUE,EXECUTABLE)
;;              7 [2.9% (guessed)]  count:10737423 (estimated locally, freq 0.0100) (FALSE_VALUE,EXECUTABLE)

Here goto bb 7 is never taken but profile is wrong.

Before threading we have chain of conditionals:

  __asm__("pushf{l|d}
        pushf{l|d}
        pop{l}  %0
        mov{l}  {%0, %1|%1, %0}
        xor{l}  {%2, %0|%0, %2}
        push{l} %0
        popf{l|d}
        pushf{l|d}
        pop{l}  %0
        popf{l|d}
        " : "=&r" __eax_19, "=&r" __ebx_20 : "i" 2097152);
  _21 = __eax_19 ^ __ebx_20;
  _22 = _21 & 2097152;
  if (_22 == 0)
    goto <bb 4>; [34.00%]
  else
    goto <bb 3>; [66.00%]
  
  <bb 3> [local count: 708669602 freq: 0.660000]:
  __asm__ __volatile__("cpuid
        " : "=a" __eax_24, "=b" __ebx_25, "=c" __ecx_26, "=d" __edx_27 : "0" 0);
  
  <bb 4> [local count: 1073741826 freq: 1.000000]:
  # _33 = PHI <0(2), __eax_24(3)> 
  _16 = _33 == 0;
  if (_33 == 0)
    goto <bb 6>; [34.00%]
  else
    goto <bb 5>; [66.00%]

  <bb 5> [local count: 708669600 freq: 0.660000]:
  __asm__ __volatile__("cpuid
        " : "=a" a_44, "=b" b_45, "=c" c_46, "=d" d_47 : "0" 1, "2" 0);

  <bb 6> [local count: 1073741824 freq: 1.000000]:
  # _18 = PHI <0(4), 1(5)>
  # d_39 = PHI <d_40(D)(4), d_47(5)>
  if (_18 == 0)
    goto <bb 8>; [33.00%]
  else
    goto <bb 7>; [67.00%]


If first _22 == 0 then also _33 == 0 and _18 == 0 but the last case has
probability 33% while the first 34%, so the profile guess is not
consistent with the threaded path.  So threading is right to end up with
profile inconsistency, but it should print reason for doing it.

One option is to disable optimization for the check.  Other option is to
get the first conditional predicted right.
Would this be OK?

gcc/ChangeLog:

	* config/i386/cpuid.h: Mark CPUs not supporting cpuid as unlikely.

diff --git a/gcc/config/i386/cpuid.h b/gcc/config/i386/cpuid.h
index 03fd6fc9478..9c768ac0b6d 100644
--- a/gcc/config/i386/cpuid.h
+++ b/gcc/config/i386/cpuid.h
@@ -295,7 +295,7 @@ __get_cpuid_max (unsigned int __ext, unsigned int *__sig)
 	   : "i" (0x00200000));
 #endif
 
-  if (!((__eax ^ __ebx) & 0x00200000))
+  if (__builtin_expect (!((__eax ^ __ebx) & 0x00200000), 0))
     return 0;
 #endif
Richard Biener Aug. 4, 2023, 9:09 a.m. UTC | #11
On Fri, Aug 4, 2023 at 10:52 AM Jan Hubicka <hubicka@ucw.cz> wrote:
>
> Hi,
> so I found the problem.  We duplicate multiple paths and end up with:
>
> ;; basic block 6, loop depth 0, count 365072224 (estimated locally, freq 0.3400)
> ;;  prev block 12, next block 7, flags: (NEW, REACHABLE, VISITED)
> ;;  pred:       4 [never (guessed)]  count:0 (estimated locally, freq 0.0000) (TRUE_VALUE,EXECUTABLE)
> ;;              10 [always]  count:365072224 (estimated locally, freq 0.3400) (FALLTHRU,EXECUTABLE)
> # _18 = PHI <0(4), 0(10)>
> # d_39 = PHI <d_40(D)(4), d_40(D)(10)>
> if (_18 == 0)
>   goto <bb 8>; [97.06%]
> else
>   goto <bb 7>; [2.94%]
> ;;  succ:       8 [97.1% (guessed)]  count:354334801 (estimated locally, freq 0.3300) (TRUE_VALUE,EXECUTABLE)
> ;;              7 [2.9% (guessed)]  count:10737423 (estimated locally, freq 0.0100) (FALSE_VALUE,EXECUTABLE)
>
> Here goto bb 7 is never taken but profile is wrong.
>
> Before threading we have chain of conditionals:
>
>   __asm__("pushf{l|d}
>         pushf{l|d}
>         pop{l}  %0
>         mov{l}  {%0, %1|%1, %0}
>         xor{l}  {%2, %0|%0, %2}
>         push{l} %0
>         popf{l|d}
>         pushf{l|d}
>         pop{l}  %0
>         popf{l|d}
>         " : "=&r" __eax_19, "=&r" __ebx_20 : "i" 2097152);
>   _21 = __eax_19 ^ __ebx_20;
>   _22 = _21 & 2097152;
>   if (_22 == 0)
>     goto <bb 4>; [34.00%]
>   else
>     goto <bb 3>; [66.00%]
>
>   <bb 3> [local count: 708669602 freq: 0.660000]:
>   __asm__ __volatile__("cpuid
>         " : "=a" __eax_24, "=b" __ebx_25, "=c" __ecx_26, "=d" __edx_27 : "0" 0);
>
>   <bb 4> [local count: 1073741826 freq: 1.000000]:
>   # _33 = PHI <0(2), __eax_24(3)>
>   _16 = _33 == 0;
>   if (_33 == 0)
>     goto <bb 6>; [34.00%]
>   else
>     goto <bb 5>; [66.00%]
>
>   <bb 5> [local count: 708669600 freq: 0.660000]:
>   __asm__ __volatile__("cpuid
>         " : "=a" a_44, "=b" b_45, "=c" c_46, "=d" d_47 : "0" 1, "2" 0);
>
>   <bb 6> [local count: 1073741824 freq: 1.000000]:
>   # _18 = PHI <0(4), 1(5)>
>   # d_39 = PHI <d_40(D)(4), d_47(5)>
>   if (_18 == 0)
>     goto <bb 8>; [33.00%]
>   else
>     goto <bb 7>; [67.00%]
>
>
> If first _22 == 0 then also _33 == 0 and _18 == 0 but the last case has
> probability 33% while the first 34%, so the profile guess is not
> consistent with the threaded path.  So threading is right to end up with
> profile inconsistency, but it should print reason for doing it.
>
> One option is to disable optimization for the check.  Other option is to
> get the first conditional predicted right.
> Would this be OK?

Yeah, that looks OK.

> gcc/ChangeLog:
>
>         * config/i386/cpuid.h: Mark CPUs not supporting cpuid as unlikely.
>
> diff --git a/gcc/config/i386/cpuid.h b/gcc/config/i386/cpuid.h
> index 03fd6fc9478..9c768ac0b6d 100644
> --- a/gcc/config/i386/cpuid.h
> +++ b/gcc/config/i386/cpuid.h
> @@ -295,7 +295,7 @@ __get_cpuid_max (unsigned int __ext, unsigned int *__sig)
>            : "i" (0x00200000));
>  #endif
>
> -  if (!((__eax ^ __ebx) & 0x00200000))
> +  if (__builtin_expect (!((__eax ^ __ebx) & 0x00200000), 0))
>      return 0;
>  #endif
>
diff mbox series

Patch

diff --git a/gcc/testsuite/gcc.dg/vect/vect-1-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-1-big-array.c
index 3ec32eba7a3..5ffbf1bf3aa 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-1-big-array.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-1-big-array.c
@@ -1,4 +1,5 @@ 
 /* { dg-do compile } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_int } */
 /* { dg-require-effective-target vect_float } */
 
@@ -88,3 +89,4 @@  foo (int n)
 
 /* { dg-final { scan-tree-dump-times "vectorized 6 loops" 1 "vect" { target vect_strided2 } } } */
 /* { dg-final { scan-tree-dump-times "vectorized 5 loops" 1 "vect" { xfail vect_strided2 } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-1.c b/gcc/testsuite/gcc.dg/vect/vect-1.c
index 2f0d19970c0..cba9ce076ab 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-1.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-1.c
@@ -1,4 +1,5 @@ 
 /* { dg-do compile } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_int } */
 /* { dg-require-effective-target vect_float } */
 
@@ -88,3 +89,4 @@  foo (int n)
 
 /* { dg-final { scan-tree-dump-times "vectorized 6 loops" 1 "vect" { target vect_strided2 } } } */
 /* { dg-final { scan-tree-dump-times "vectorized 5 loops" 1 "vect" { xfail vect_strided2 } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-10-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-10-big-array.c
index f266ac8617c..ac18f2bf2e9 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-10-big-array.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-10-big-array.c
@@ -1,4 +1,5 @@ 
 /* { dg-do compile } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_int } */
 
 extern void abort (void);
@@ -31,3 +32,4 @@  int foo ()
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { ! vect_strided2 } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-10.c b/gcc/testsuite/gcc.dg/vect/vect-10.c
index ba66939cca3..26c16c5d6f0 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-10.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-10.c
@@ -1,4 +1,5 @@ 
 /* { dg-do compile } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_int } */
 
 #define N 16
@@ -23,3 +24,4 @@  int foo ()
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { ! vect_strided2 } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-100.c b/gcc/testsuite/gcc.dg/vect/vect-100.c
index 9a4d4de0671..ccce2f4fdcc 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-100.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-100.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdlib.h>
 #include <stdarg.h>
@@ -77,3 +78,4 @@  int main (void)
 /* Requires versioning.  */
 /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 0 "vect" } } */
 
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-103.c b/gcc/testsuite/gcc.dg/vect/vect-103.c
index d03562f7cdd..5911214dbe8 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-103.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-103.c
@@ -1,5 +1,5 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks --param vect-epilogues-nomask=0" } */
 /* { dg-require-effective-target vect_int } */
 
 #include <stdlib.h>
@@ -58,3 +58,4 @@  int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-104.c b/gcc/testsuite/gcc.dg/vect/vect-104.c
index a77c98735eb..a25fdf3ed13 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-104.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-104.c
@@ -1,5 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
-/* { dg-additional-options "--param max-completely-peel-times=1" } */
+/* { dg-additional-options "--param max-completely-peel-times=1 -fdump-tree-optimized-details-blocks" } */
 
 #include <stdlib.h>
 #include <stdarg.h>
@@ -65,3 +65,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 1 "vect" { target { ! vect_multiple_sizes } } } } */
 /* { dg-final { scan-tree-dump "possible dependence between data-refs" "vect" { target vect_multiple_sizes } } } */
 
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-105-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-105-big-array.c
index 433565bfd4d..921fb85bf8e 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-105-big-array.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-105-big-array.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdlib.h>
 #include <stdarg.h>
@@ -95,3 +96,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 0 "vect" } } */
 
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-105.c b/gcc/testsuite/gcc.dg/vect/vect-105.c
index 17b6e89d8f6..30ac2f21c60 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-105.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-105.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdlib.h>
 #include <stdarg.h>
@@ -65,3 +66,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 0 "vect" } } */
 
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-106.c b/gcc/testsuite/gcc.dg/vect/vect-106.c
index 0171cfcdfa6..685d3576a17 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-106.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-106.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdlib.h>
 #include <stdarg.h>
@@ -70,3 +71,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
 
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-107.c b/gcc/testsuite/gcc.dg/vect/vect-107.c
index aaab9c00345..d3e57fecaec 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-107.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-107.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_float } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -42,3 +43,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided2 } } } */
 /* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { xfail vect_strided2 } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-108.c b/gcc/testsuite/gcc.dg/vect/vect-108.c
index 4af6326e9c3..6a562a358e9 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-108.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-108.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int_mult } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -38,3 +39,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
 
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-109.c b/gcc/testsuite/gcc.dg/vect/vect-109.c
index fe7ea6c420f..9dc476f9de3 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-109.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-109.c
@@ -1,5 +1,5 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 /* { dg-skip-if "" { vect_no_align } } */
 /* { dg-require-effective-target vect_int } */
 /* { dg-add-options bind_pic_locally } */
@@ -80,3 +80,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "unsupported unaligned access" 2 "vect" { xfail vect_element_align } } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 3 "vect" { target vect_element_align xfail { ! vect_unaligned_possible } } } } */
 
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-11.c b/gcc/testsuite/gcc.dg/vect/vect-11.c
index 044fc5edc2d..0a6d7b4cb37 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-11.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-11.c
@@ -1,5 +1,6 @@ 
 /* { dg-require-effective-target vect_int } */
 /* { dg-require-effective-target vect_int_mult } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -39,3 +40,4 @@  int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-110.c b/gcc/testsuite/gcc.dg/vect/vect-110.c
index 47c6456107d..cf25da86d38 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-110.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-110.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_float } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -37,3 +38,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" } } */
 
 
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-112-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-112-big-array.c
index a99a590d9ac..a673fc605d9 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-112-big-array.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-112-big-array.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -43,3 +44,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_unpack } } } */
 
 
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-112.c b/gcc/testsuite/gcc.dg/vect/vect-112.c
index 44e2cb270c4..6b18299c06b 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-112.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-112.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -36,3 +37,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_unpack } } } */
 
 
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-113.c b/gcc/testsuite/gcc.dg/vect/vect-113.c
index a9d45ce9fcc..e6cb727db22 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-113.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-113.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_float } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -33,3 +34,4 @@  int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target powerpc*-*-* i?86-*-* x86_64-*-* } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-114.c b/gcc/testsuite/gcc.dg/vect/vect-114.c
index 557b44110a0..a67ef563094 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-114.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-114.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_float } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -40,3 +41,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! vect_perm } xfail { aarch64_sve && vect_variable_length } } } } */
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_perm } } } */
 
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-115.c b/gcc/testsuite/gcc.dg/vect/vect-115.c
index 0502d15ed3e..1fede0a6fd5 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-115.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-115.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -74,3 +75,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
   
 
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-116.c b/gcc/testsuite/gcc.dg/vect/vect-116.c
index d4aa069772e..2e14f7d477c 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-116.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-116.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 /* Assuming we can vectorize char multiplication, here's an execute test.  */
 
 #include <stdarg.h>
@@ -30,3 +31,4 @@  int main()
   return 0;
 }
 
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-117.c b/gcc/testsuite/gcc.dg/vect/vect-117.c
index 22f8e011872..b6a981e4b1b 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-117.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-117.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -59,3 +60,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 0 "vect" } } */
 
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-118.c b/gcc/testsuite/gcc.dg/vect/vect-118.c
index 01ae828bd19..71201d1c599 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-118.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-118.c
@@ -1,5 +1,6 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 void f(short * __restrict__ a, short * __restrict__ b, short * __restrict__ x)
 {
@@ -9,3 +10,4 @@  void f(short * __restrict__ a, short * __restrict__ b, short * __restrict__ x)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-119.c b/gcc/testsuite/gcc.dg/vect/vect-119.c
index 29a9c51cd29..028804ae217 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-119.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-119.c
@@ -1,5 +1,5 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 /* { dg-do compile } */
 /* { dg-require-effective-target vect_int } */
 
@@ -28,3 +28,4 @@  unsigned int foo (const unsigned int x[OUTER][INNER][2])
 }
 
 /* { dg-final { scan-tree-dump-times "Detected interleaving load of size 2" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-11a.c b/gcc/testsuite/gcc.dg/vect/vect-11a.c
index 4f1e15e7429..c289ace6ba8 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-11a.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-11a.c
@@ -1,5 +1,6 @@ 
 /* { dg-require-effective-target vect_int } */
 /* { dg-require-effective-target vect_int_mult } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -62,3 +63,4 @@  int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-12.c b/gcc/testsuite/gcc.dg/vect/vect-12.c
index b095170f008..132e2fb2b0a 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-12.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-12.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -41,3 +42,4 @@  int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-120.c b/gcc/testsuite/gcc.dg/vect/vect-120.c
index cafc9b4092a..e7ef76c7d44 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-120.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-120.c
@@ -2,6 +2,7 @@ 
 /* { dg-require-effective-target vect_float } */
 /* { dg-require-effective-target vect_shift } */
 /* { dg-require-effective-target vect_floatint_cvt } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 static inline float
 i2f(int x)
@@ -34,3 +35,4 @@  tV()
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-121.c b/gcc/testsuite/gcc.dg/vect/vect-121.c
index a8f25591021..d820215ca67 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-121.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-121.c
@@ -1,5 +1,6 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target vect_float } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 float *x;
 float parm;
@@ -15,3 +16,4 @@  test (int start, int end)
 }
 
 /* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-122.c b/gcc/testsuite/gcc.dg/vect/vect-122.c
index 04dae679647..cdc4d7b65d0 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-122.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-122.c
@@ -1,3 +1,4 @@ 
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 #include "tree-vect.h"
 
 #ifndef N
@@ -56,3 +57,4 @@  main ()
   return 0;
 }
 
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-123.c b/gcc/testsuite/gcc.dg/vect/vect-123.c
index 210da1e4bca..20edd7ba263 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-123.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-123.c
@@ -1,5 +1,6 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 int x[4092];
 int y[1024];
@@ -12,3 +13,4 @@  void foo (int s)
 }
 
 /* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-124.c b/gcc/testsuite/gcc.dg/vect/vect-124.c
index c720648aadd..a91056dd1d6 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-124.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-124.c
@@ -1,3 +1,4 @@ 
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 #include "tree-vect.h"
 
 #ifndef N
@@ -27,3 +28,4 @@  main ()
   return 0;
 }
 
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-126.c b/gcc/testsuite/gcc.dg/vect/vect-126.c
index f01b95e1920..02d1f1e1970 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-126.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-126.c
@@ -1,5 +1,6 @@ 
 /* PR tree-optimization/66718 */
 /* { dg-do compile } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 int *a[1024], b[1024];
 struct S { int u, v, w, x; };
@@ -61,3 +62,4 @@  f6 (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 7 "vect" { target { i?86-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-13.c b/gcc/testsuite/gcc.dg/vect/vect-13.c
index 5d902924ec2..57ca2b2908e 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-13.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-13.c
@@ -1,5 +1,6 @@ 
 /* { dg-require-effective-target vect_int } */
 /* { dg-add-options bind_pic_locally } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -40,3 +41,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_int_min_max } } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-14.c b/gcc/testsuite/gcc.dg/vect/vect-14.c
index 1640220a134..36a643f5dfd 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-14.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-14.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -34,3 +35,4 @@  int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-15-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-15-big-array.c
index 5313eae598b..e724645f94f 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-15-big-array.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-15-big-array.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -42,3 +43,4 @@  int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_perm && vect_hw_misalign } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-15.c b/gcc/testsuite/gcc.dg/vect/vect-15.c
index 178bc4404c4..103c4b6dae8 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-15.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-15.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -36,3 +37,4 @@  int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_perm && vect_hw_misalign } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-17.c b/gcc/testsuite/gcc.dg/vect/vect-17.c
index 471a82336cf..31a7795d7a3 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-17.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-17.c
@@ -1,5 +1,6 @@ 
 /* { dg-require-effective-target vect_int } */
 /* { dg-add-options bind_pic_locally } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
   
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -127,3 +128,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_bitwise } } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-18.c b/gcc/testsuite/gcc.dg/vect/vect-18.c
index 28b2941e581..bda1c4f25e3 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-18.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-18.c
@@ -1,5 +1,6 @@ 
 /* { dg-require-effective-target vect_int } */
 /* { dg-add-options bind_pic_locally } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
   
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -126,3 +127,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_bitwise } } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-19.c b/gcc/testsuite/gcc.dg/vect/vect-19.c
index 27c6dc835a6..cbbd99c89a3 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-19.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-19.c
@@ -1,3 +1,4 @@ 
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_int } */
 /* { dg-add-options bind_pic_locally } */
 
@@ -126,3 +127,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_bitwise } } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-2-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-2-big-array.c
index 162cb54b58d..839798c9ae8 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-2-big-array.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-2-big-array.c
@@ -1,5 +1,6 @@ 
 /* { dg-require-effective-target vect_int } */
 /* { dg-add-options bind_pic_locally } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -44,3 +45,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-2.c b/gcc/testsuite/gcc.dg/vect/vect-2.c
index d975668cbd0..8c759a5ecd6 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-2.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-2.c
@@ -1,5 +1,6 @@ 
 /* { dg-require-effective-target vect_int } */
 /* { dg-add-options bind_pic_locally } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -38,3 +39,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-20.c b/gcc/testsuite/gcc.dg/vect/vect-20.c
index 8d759f3c6a6..5b71dee6783 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-20.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-20.c
@@ -1,5 +1,6 @@ 
 /* { dg-require-effective-target vect_int } */
 /* { dg-add-options bind_pic_locally } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
   
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -98,3 +99,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_bitwise } } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-21.c b/gcc/testsuite/gcc.dg/vect/vect-21.c
index ab77df6ef88..83cade50d1f 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-21.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-21.c
@@ -1,5 +1,6 @@ 
 /* { dg-require-effective-target vect_int } */
 /* { dg-add-options bind_pic_locally } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -127,3 +128,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { target vect_condition } } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
 
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-22.c b/gcc/testsuite/gcc.dg/vect/vect-22.c
index 78dc1ce91de..c4d8aaa48f5 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-22.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-22.c
@@ -1,6 +1,7 @@ 
 /* { dg-require-effective-target vect_int } */
 /* { dg-require-effective-target vect_float } */
 /* { dg-add-options bind_pic_locally } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -124,3 +125,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
 
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-23.c b/gcc/testsuite/gcc.dg/vect/vect-23.c
index 69e0848c8ec..5bedc82cefb 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-23.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-23.c
@@ -1,5 +1,6 @@ 
 /* { dg-require-effective-target vect_int } */
 /* { dg-require-effective-target vect_condition } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -126,3 +127,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-24.c b/gcc/testsuite/gcc.dg/vect/vect-24.c
index fa4c0620d29..c64e5cf5731 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-24.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-24.c
@@ -1,6 +1,7 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
 /* { dg-additional-options "--param vect-epilogues-nomask=0" } */
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -128,3 +129,4 @@  int main (void)
    bitwise or.  */
 /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail { ! vect_condition } } } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-25.c b/gcc/testsuite/gcc.dg/vect/vect-25.c
index 904eea8a17b..712bf0e3f1b 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-25.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-25.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -52,3 +53,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-26.c b/gcc/testsuite/gcc.dg/vect/vect-26.c
index 8a141f38400..3d76b223b7d 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-26.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-26.c
@@ -1,5 +1,5 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_int } */
 
 #include <stdarg.h>
@@ -40,3 +40,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_element_align_preferred || { ! vect_align_stack_vars } } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-27.c b/gcc/testsuite/gcc.dg/vect/vect-27.c
index ac86b21aceb..8e32d703906 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-27.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-27.c
@@ -1,5 +1,5 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_int } */
 /* { dg-add-options bind_pic_locally } */
 
@@ -50,3 +50,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { ! vect_unaligned_possible } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-28.c b/gcc/testsuite/gcc.dg/vect/vect-28.c
index e213df1a465..47301459e21 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-28.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-28.c
@@ -1,5 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
-/* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
+/* { dg-additional-options "--param vect-max-peeling-for-alignment=0 -fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -41,3 +41,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-29.c b/gcc/testsuite/gcc.dg/vect/vect-29.c
index bbd446dfe63..0d98417cef9 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-29.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-29.c
@@ -1,5 +1,5 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_int } */
 /* { dg-add-options bind_pic_locally } */
 
@@ -56,3 +56,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { ! vect_unaligned_possible } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" {target { vect_no_align && { ! vect_hw_misalign } } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-3.c b/gcc/testsuite/gcc.dg/vect/vect-3.c
index 6fc6557cf9f..d87fddcfea8 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-3.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-3.c
@@ -1,6 +1,7 @@ 
 /* { dg-require-effective-target vect_int } */
 /* { dg-require-effective-target vect_float } */
 /* { dg-add-options bind_pic_locally } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -49,3 +50,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-30.c b/gcc/testsuite/gcc.dg/vect/vect-30.c
index 71f7a2d169f..fbc28fd7b00 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-30.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-30.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_float } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -62,3 +63,4 @@  int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-31-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-31-big-array.c
index 5621eb4d4ba..3568dda7cdc 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-31-big-array.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-31-big-array.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -87,3 +88,4 @@  int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-31.c b/gcc/testsuite/gcc.dg/vect/vect-31.c
index 3f7d00c1748..93eaf0596c7 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-31.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-31.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -87,3 +88,4 @@  int main (void)
 } 
 
 /* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-32-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-32-big-array.c
index 3e1403bbe96..2d11d86f7c1 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-32-big-array.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-32-big-array.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -37,3 +38,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-32-chars.c b/gcc/testsuite/gcc.dg/vect/vect-32-chars.c
index 0af5d2d19b4..c2e29b8fb29 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-32-chars.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-32-chars.c
@@ -1,4 +1,5 @@ 
 /* { dg-do compile } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 /* { dg-additional-options "-mavx512bw -mavx512vl" { target { i?86-*-* x86_64-*-* } } } */
 
 char a[32];
@@ -14,3 +15,4 @@  void test()
 }
 
 /* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" { target { i?86-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-32.c b/gcc/testsuite/gcc.dg/vect/vect-32.c
index 2684cf2e0d3..08f75e9a4d4 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-32.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-32.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -41,3 +42,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-33-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-33-big-array.c
index c1aa399a240..ba4616e4953 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-33-big-array.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-33-big-array.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target vect_int } */
-/* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
+/* { dg-additional-options "--param vect-max-peeling-for-alignment=0 -fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -40,3 +40,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-33.c b/gcc/testsuite/gcc.dg/vect/vect-33.c
index e215052ff77..6a2acb417fa 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-33.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-33.c
@@ -1,5 +1,6 @@ 
 /* { dg-do compile } */
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -40,3 +41,4 @@  int main (void)
 /* { dg-final { scan-tree-dump "Vectorizing an unaligned access" "vect" { target { { { ! powerpc*-*-* } && vect_hw_misalign } && { { ! vect64 } || vect_multiple_sizes } } xfail { ! vect_unaligned_possible } } } }  */
 /* { dg-final { scan-tree-dump "Alignment of access forced using peeling" "vect" { target { vector_alignment_reachable && { vect64 && {! vect_multiple_sizes} } } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { { {! vector_alignment_reachable} || {! vect64} } && {! vect_hw_misalign} } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-34-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-34-big-array.c
index 0aa6d507a82..529823b9f75 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-34-big-array.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-34-big-array.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -43,3 +44,4 @@  int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-34.c b/gcc/testsuite/gcc.dg/vect/vect-34.c
index 9cc590253c7..2bc63294f18 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-34.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-34.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -38,3 +39,4 @@  int main (void)
 } 
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-35-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-35-big-array.c
index 28a99c910fd..7cd28704a33 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-35-big-array.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-35-big-array.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -44,3 +45,4 @@  int main (void)
 
 
 /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect"  { xfail { ia64-*-* sparc*-*-* } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-35.c b/gcc/testsuite/gcc.dg/vect/vect-35.c
index a7ec0f16d4c..02b9b90e077 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-35.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-35.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -44,3 +45,4 @@  int main (void)
 
 
 /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect"  { xfail { ia64-*-* sparc*-*-* } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-36-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-36-big-array.c
index d40fcb6d992..7a835513eb4 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-36-big-array.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-36-big-array.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -44,3 +45,4 @@  int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-36.c b/gcc/testsuite/gcc.dg/vect/vect-36.c
index 64bc7fe1809..8b32a03ffc3 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-36.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-36.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -44,3 +45,4 @@  int main (void)
 } 
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-38.c b/gcc/testsuite/gcc.dg/vect/vect-38.c
index 01d984c61b8..cd13ad881d3 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-38.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-38.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_double } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -37,3 +38,4 @@  int main (void)
 
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-4.c b/gcc/testsuite/gcc.dg/vect/vect-4.c
index b0cc45be7de..818fdcafa6f 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-4.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-4.c
@@ -1,5 +1,6 @@ 
 /* { dg-require-effective-target vect_float } */
 /* { dg-add-options bind_pic_locally } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -39,3 +40,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-40.c b/gcc/testsuite/gcc.dg/vect/vect-40.c
index c74703268f9..87b92a7fcd9 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-40.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-40.c
@@ -1,5 +1,6 @@ 
 /* { dg-require-effective-target vect_float } */
 /* { dg-add-options double_vectors } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -60,3 +61,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"} } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-42.c b/gcc/testsuite/gcc.dg/vect/vect-42.c
index 086cbf20c0a..85c8f47aae0 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-42.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-42.c
@@ -1,5 +1,5 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_float } */
 /* { dg-add-options double_vectors } */
 
@@ -71,3 +71,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { xfail { vect_no_align || { { !  vector_alignment_reachable } || vect_element_align  } } } } }  */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 3 "vect" { target vect_element_align xfail { ! { vect_unaligned_possible && vect_align_stack_vars } } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || { { ! vector_alignment_reachable } || vect_element_align } } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-44.c b/gcc/testsuite/gcc.dg/vect/vect-44.c
index f7f1fd28665..1b19de5d365 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-44.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-44.c
@@ -1,5 +1,5 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_float } */
 /* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
 
@@ -71,3 +71,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" { xfail { { vect_no_align && { ! vect_hw_misalign } } || {! vector_alignment_reachable} } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { {! vector_alignment_reachable} && {{! vect_no_align} && {! vect_hw_misalign} } } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-46.c b/gcc/testsuite/gcc.dg/vect/vect-46.c
index 185ac1424f9..3981d2e1301 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-46.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-46.c
@@ -1,5 +1,6 @@ 
 /* { dg-require-effective-target vect_float } */
 /* { dg-add-options double_vectors } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -62,3 +63,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-48.c b/gcc/testsuite/gcc.dg/vect/vect-48.c
index b29fe47635a..f4d6f0c1464 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-48.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-48.c
@@ -1,5 +1,5 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_float } */
 /* { dg-add-options double_vectors } */
 
@@ -61,3 +61,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { target vect_align_stack_vars xfail { ! vect_unaligned_possible } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 2 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-5.c b/gcc/testsuite/gcc.dg/vect/vect-5.c
index 17f3b2fac9a..6b91f8aa406 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-5.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-5.c
@@ -1,5 +1,6 @@ 
 /* { dg-require-effective-target vect_float } */
 /* { dg-add-options bind_pic_locally } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -56,3 +57,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-50.c b/gcc/testsuite/gcc.dg/vect/vect-50.c
index f43676896af..9aec47a99da 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-50.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-50.c
@@ -1,5 +1,5 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_float } */
 /* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
 
@@ -67,3 +67,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" { xfail { { vect_no_align && { ! vect_hw_misalign } } || {! vector_alignment_reachable} } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { {! vector_alignment_reachable} && { {! vect_no_align } && {! vect_hw_misalign } } } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-52.c b/gcc/testsuite/gcc.dg/vect/vect-52.c
index c20a4be2ede..78de172f2e2 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-52.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-52.c
@@ -1,7 +1,7 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
 /* { dg-require-effective-target vect_float } */
 /* { dg-add-options double_vectors } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -62,3 +62,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { target vect_align_stack_vars xfail { ! vect_unaligned_possible } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 2 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-54.c b/gcc/testsuite/gcc.dg/vect/vect-54.c
index 2b236e48e19..d7edf6a1471 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-54.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-54.c
@@ -1,5 +1,5 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_float } */
 /* { dg-add-options double_vectors } */
 
@@ -64,3 +64,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_element_align_preferred } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-56.c b/gcc/testsuite/gcc.dg/vect/vect-56.c
index c914126ece5..7cc2381adea 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-56.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-56.c
@@ -1,5 +1,5 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_float } */
 
 #include <stdarg.h>
@@ -74,3 +74,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target { vect_element_align } xfail { ! vect_unaligned_possible } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" { target { { ! vect_element_align } || vect_element_align_preferred} } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { vect_element_align && { ! vect_element_align_preferred } } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-58.c b/gcc/testsuite/gcc.dg/vect/vect-58.c
index da4f9740e33..2be206796a9 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-58.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-58.c
@@ -1,5 +1,5 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_float } */
 
 #include <stdarg.h>
@@ -62,3 +62,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_element_align_preferred } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-6-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-6-big-array.c
index c5de86b167a..5d4ba0d51cc 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-6-big-array.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-6-big-array.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_float } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -71,3 +72,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target { { vect_aligned_arrays } && {! vect_sizes_32B_16B} } } } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target { {! vect_aligned_arrays } && {vect_sizes_32B_16B} } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-6.c b/gcc/testsuite/gcc.dg/vect/vect-6.c
index c3e6336bb43..24305dbf0c4 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-6.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-6.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_float } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -56,3 +57,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target { { vect_aligned_arrays } && {! vect_sizes_32B_16B} } } } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target { {! vect_aligned_arrays } && {vect_sizes_32B_16B} } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-60.c b/gcc/testsuite/gcc.dg/vect/vect-60.c
index 121c503c63a..ed7fe31cd11 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-60.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-60.c
@@ -1,5 +1,5 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_float } */
 
 #include <stdarg.h>
@@ -75,3 +75,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target { vect_element_align } xfail { ! vect_unaligned_possible } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" { target { { ! vect_element_align } || vect_element_align_preferred } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { vect_element_align && { ! vect_element_align_preferred } } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-62.c b/gcc/testsuite/gcc.dg/vect/vect-62.c
index abd3d700668..04935bef8aa 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-62.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-62.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -66,3 +67,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-63.c b/gcc/testsuite/gcc.dg/vect/vect-63.c
index 8d002a5e3c3..58965b9c42c 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-63.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-63.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -43,3 +44,4 @@  int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-64.c b/gcc/testsuite/gcc.dg/vect/vect-64.c
index 240b68f6d0d..c20cd50cdf7 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-64.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-64.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -83,3 +84,4 @@  int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-65.c b/gcc/testsuite/gcc.dg/vect/vect-65.c
index 9ac8ea4f013..9b6465b74b6 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-65.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-65.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -80,3 +81,4 @@  int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-66.c b/gcc/testsuite/gcc.dg/vect/vect-66.c
index ccb66bc8001..35282020820 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-66.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-66.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -93,3 +94,4 @@  int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 3 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-67.c b/gcc/testsuite/gcc.dg/vect/vect-67.c
index 12183a233c2..d4820c02ec2 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-67.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-67.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -50,3 +51,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-68.c b/gcc/testsuite/gcc.dg/vect/vect-68.c
index 3012d88494d..d42117332fe 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-68.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-68.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -86,3 +87,4 @@  int main (void)
 } 
 
 /* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-7.c b/gcc/testsuite/gcc.dg/vect/vect-7.c
index c4556e321c6..bc3e471e01d 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-7.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-7.c
@@ -1,5 +1,6 @@ 
 /* { dg-require-effective-target vect_int } */
 /* { dg-add-options bind_pic_locally } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -50,3 +51,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-70.c b/gcc/testsuite/gcc.dg/vect/vect-70.c
index 793dbfb7481..81953dd4b91 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-70.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-70.c
@@ -1,5 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
-/* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
+/* { dg-additional-options "--param vect-max-peeling-for-alignment=0 -fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -85,3 +85,4 @@  int main (void)
           
 /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" {target {{! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-71.c b/gcc/testsuite/gcc.dg/vect/vect-71.c
index 581473fa4a1..14dfa310230 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-71.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-71.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -37,3 +38,4 @@  int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-72.c b/gcc/testsuite/gcc.dg/vect/vect-72.c
index 9e8e91b7ae6..d2154c2a9a6 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-72.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-72.c
@@ -1,5 +1,5 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_int } */
 /* { dg-add-options bind_pic_locally } */
 
@@ -52,3 +52,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { ! vect_unaligned_possible } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-73-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-73-big-array.c
index 1c9d1fdaf9a..92c9a29d91f 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-73-big-array.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-73-big-array.c
@@ -1,5 +1,6 @@ 
 /* { dg-require-effective-target vect_int } */
 /* { dg-add-options bind_pic_locally } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -46,3 +47,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-73.c b/gcc/testsuite/gcc.dg/vect/vect-73.c
index fdb49b86362..cc9010b67ac 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-73.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-73.c
@@ -1,5 +1,6 @@ 
 /* { dg-require-effective-target vect_int } */
 /* { dg-add-options bind_pic_locally } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -40,3 +41,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-74-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-74-big-array.c
index ba1ae63bd57..067405c2a85 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-74-big-array.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-74-big-array.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_float } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -61,3 +62,4 @@  int main (void)
  dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } }
  dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_no_align } }
 */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-74.c b/gcc/testsuite/gcc.dg/vect/vect-74.c
index a44f643ee96..295ebdef358 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-74.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-74.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_float } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -49,3 +50,4 @@  int main (void)
  dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } } 
  dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_no_align } }  
 */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-75-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-75-big-array.c
index a3fb5053037..3825dee6dc3 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-75-big-array.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-75-big-array.c
@@ -1,5 +1,5 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_int } */
 
 #include <stdarg.h>
@@ -54,3 +54,4 @@  int main (void)
 /*  { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { target { ! vect_align_stack_vars } xfail { ! vect_unaligned_possible } } } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target vect_align_stack_vars xfail { ! vect_unaligned_possible } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-75.c b/gcc/testsuite/gcc.dg/vect/vect-75.c
index 88da97f0bb7..fc4f3217c30 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-75.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-75.c
@@ -1,5 +1,5 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_int } */
 
 #include <stdarg.h>
@@ -54,3 +54,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { target { ! vect_align_stack_vars } xfail { ! vect_unaligned_possible } } } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target vect_align_stack_vars xfail { ! vect_unaligned_possible } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-76-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-76-big-array.c
index 5825cfc4464..b3d03a7b435 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-76-big-array.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-76-big-array.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -77,3 +78,4 @@  int main (void)
 
 
 /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-76.c b/gcc/testsuite/gcc.dg/vect/vect-76.c
index 3f4feeff8ac..6c8b9018808 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-76.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-76.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -71,3 +72,4 @@  int main (void)
 
 
 /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-77-alignchecks.c b/gcc/testsuite/gcc.dg/vect/vect-77-alignchecks.c
index fb3e4992782..9b43de3baa0 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-77-alignchecks.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-77-alignchecks.c
@@ -1,5 +1,5 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_int } */
 
 #include <stdarg.h>
@@ -61,3 +61,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { {! vect_no_align} && { unaligned_stack && vector_alignment_reachable } } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { { {! unaligned_stack} && { vect_no_align && { ! vect_hw_misalign } } } || {unaligned_stack && { {! vector_alignment_reachable} && {! vect_no_align } } } } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 2 "vect" { target { { unaligned_stack && { vector_alignment_reachable && vect_no_align } } || {unaligned_stack && { {! vector_alignment_reachable} && vect_no_align } } } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-77-global.c b/gcc/testsuite/gcc.dg/vect/vect-77-global.c
index 1580d6e075b..419b55d6cf8 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-77-global.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-77-global.c
@@ -1,5 +1,5 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_int } */
 /* { dg-add-options bind_pic_locally } */
 
@@ -53,3 +53,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { ! vect_unaligned_possible } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-77.c b/gcc/testsuite/gcc.dg/vect/vect-77.c
index d402e147043..bc2c2b8a3d4 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-77.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-77.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -43,3 +44,4 @@  int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-78-alignchecks.c b/gcc/testsuite/gcc.dg/vect/vect-78-alignchecks.c
index 57e8da0a909..c200c1166eb 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-78-alignchecks.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-78-alignchecks.c
@@ -1,5 +1,5 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_int } */
 
 #include <stdarg.h>
@@ -62,3 +62,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { {! vect_no_align} && { unaligned_stack && vector_alignment_reachable } } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { { {! unaligned_stack} && { vect_no_align && { ! vect_hw_misalign } } } || {unaligned_stack && { {! vector_alignment_reachable} && { ! vect_no_align } } } } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 2 "vect" { target { { unaligned_stack && { vector_alignment_reachable && vect_no_align } } || {unaligned_stack && { {! vector_alignment_reachable} && vect_no_align } } } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-78-global.c b/gcc/testsuite/gcc.dg/vect/vect-78-global.c
index ea039b389b2..4565e4f5090 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-78-global.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-78-global.c
@@ -1,5 +1,5 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_int } */
 /* { dg-add-options bind_pic_locally } */
 
@@ -53,3 +53,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { ! vect_unaligned_possible } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-78.c b/gcc/testsuite/gcc.dg/vect/vect-78.c
index faa7f2f4f76..6032a4f1f29 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-78.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-78.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -43,3 +44,4 @@  int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-8.c b/gcc/testsuite/gcc.dg/vect/vect-8.c
index 44c5f53ebaf..d6b90276247 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-8.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-8.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_float } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -36,3 +37,4 @@  int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-80-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-80-big-array.c
index 0baf4d2859b..245035b7493 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-80-big-array.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-80-big-array.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_float } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -64,3 +65,4 @@  int main (void)
  dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_no_align } }
  dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" { target vect_no_align } }
 */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-80.c b/gcc/testsuite/gcc.dg/vect/vect-80.c
index 45aac84a578..eb1514d51d1 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-80.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-80.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_float } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -53,3 +54,4 @@  int main (void)
  dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_no_align } } 
  dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" { target vect_no_align } } 
 */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-82.c b/gcc/testsuite/gcc.dg/vect/vect-82.c
index fcafb36c063..6e41a04c238 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-82.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-82.c
@@ -1,4 +1,5 @@ 
 /* { dg-skip-if "powerpc and integer vectorization only" { ! { powerpc*-*-* && vect_int } }  } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -34,3 +35,4 @@  int main (void)
 } 
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-82_64.c b/gcc/testsuite/gcc.dg/vect/vect-82_64.c
index 358a85a838f..f1d4574c1a9 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-82_64.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-82_64.c
@@ -1,6 +1,6 @@ 
 /* { dg-do run { target { { powerpc*-*-* && lp64 } && powerpc_altivec_ok } } } */
 /* { dg-do compile { target { { powerpc*-*-* && ilp32 } && powerpc_altivec_ok } } } */
-/* { dg-additional-options "-mpowerpc64 -maltivec" } */
+/* { dg-additional-options "-mpowerpc64 -maltivec -fdump-tree-optimized-details-blocks" } */
 /* { dg-skip-if "" { powerpc-ibm-aix* } } */
 
 #include <stdarg.h>
@@ -37,3 +37,4 @@  int main (void)
 } 
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-83.c b/gcc/testsuite/gcc.dg/vect/vect-83.c
index a300a0a08c4..d6efd0c2804 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-83.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-83.c
@@ -1,4 +1,5 @@ 
 /* { dg-skip-if "powerpc and integer vectorization only" { ! { powerpc*-*-* && vect_int } }  } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -34,3 +35,4 @@  int main (void)
 } 
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-83_64.c b/gcc/testsuite/gcc.dg/vect/vect-83_64.c
index a5e897e093d..8224c8c54d8 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-83_64.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-83_64.c
@@ -1,6 +1,6 @@ 
 /* { dg-do run { target { { powerpc*-*-* && lp64 } && powerpc_altivec_ok } } } */
 /* { dg-do compile { target { { powerpc*-*-* && ilp32 } && powerpc_altivec_ok } } } */
-/* { dg-additional-options "-mpowerpc64 -maltivec" } */
+/* { dg-additional-options "-mpowerpc64 -maltivec -fdump-tree-optimized-details-blocks" } */
 /* { dg-skip-if "" { powerpc-ibm-aix* } } */
 
 #include <stdarg.h>
@@ -37,3 +37,4 @@  int main (void)
 } 
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-85-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-85-big-array.c
index ade04016cc3..d4f847aee8e 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-85-big-array.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-85-big-array.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -46,3 +47,4 @@  int main (void)
 
 /* Fails for targets that don't vectorize PLUS (e.g alpha).  */
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-85.c b/gcc/testsuite/gcc.dg/vect/vect-85.c
index a73bae1ad41..25e8ded8142 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-85.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-85.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -46,3 +47,4 @@  int main (void)
 
 /* Fails for targets that don't vectorize PLUS (e.g alpha).  */
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-86.c b/gcc/testsuite/gcc.dg/vect/vect-86.c
index ff1d41df23f..8eddf4b7b90 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-86.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-86.c
@@ -1,5 +1,6 @@ 
 /* { dg-require-effective-target vect_int } */
 /* { dg-add-options bind_pic_locally } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -53,3 +54,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-87.c b/gcc/testsuite/gcc.dg/vect/vect-87.c
index 17b1dcdee99..844b40c5903 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-87.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-87.c
@@ -1,5 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
-/* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
+/* { dg-additional-options "--param vect-max-peeling-for-alignment=0 -fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -52,3 +52,4 @@  int main (void)
 /* Fails for targets that don't vectorize PLUS (e.g alpha).  */
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" {target { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-88.c b/gcc/testsuite/gcc.dg/vect/vect-88.c
index b99cb4d89a4..7ae82aab61d 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-88.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-88.c
@@ -1,5 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
-/* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
+/* { dg-additional-options "--param vect-max-peeling-for-alignment=0 -fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -52,3 +52,4 @@  int main (void)
 /* Fails for targets that don't vectorize PLUS (e.g alpha).  */
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" {target { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-89-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-89-big-array.c
index 59e1aae0017..437328c53a5 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-89-big-array.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-89-big-array.c
@@ -1,5 +1,5 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_int } */
 
 #include <stdarg.h>
@@ -49,3 +49,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_element_align_preferred || { ! vect_align_stack_vars } } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-89.c b/gcc/testsuite/gcc.dg/vect/vect-89.c
index 356ab96d330..cdadeb52551 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-89.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-89.c
@@ -1,5 +1,5 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_int } */
 
 #include <stdarg.h>
@@ -53,3 +53,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_element_align_preferred || { ! vect_align_stack_vars } } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-9.c b/gcc/testsuite/gcc.dg/vect/vect-9.c
index 87600fb5df0..95701911185 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-9.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-9.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -37,3 +38,4 @@  int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_unpack } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-91.c b/gcc/testsuite/gcc.dg/vect/vect-91.c
index 8983c7da870..ee54953d711 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-91.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-91.c
@@ -1,6 +1,6 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
 /* { dg-do compile } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_int } */
 /* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
 
@@ -69,3 +69,4 @@  main3 ()
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 3 "vect" { xfail vect_no_int_add } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 3 "vect" {target { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-92.c b/gcc/testsuite/gcc.dg/vect/vect-92.c
index 9ceb0fbadcd..16186cd923b 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-92.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-92.c
@@ -1,5 +1,5 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_float } */
 
 #include <stdarg.h>
@@ -101,3 +101,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 3 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" { xfail vect_element_align_preferred } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-93.c b/gcc/testsuite/gcc.dg/vect/vect-93.c
index c3e12783b2c..a38f15d2202 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-93.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-93.c
@@ -1,5 +1,5 @@ 
 /* { dg-require-effective-target vect_float } */
-/* { dg-additional-options "--param vect-max-peeling-for-alignment=0" } */
+/* { dg-additional-options "--param vect-max-peeling-for-alignment=0 -fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -87,3 +87,4 @@  int main (void)
 /* in main: */
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
 
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-95.c b/gcc/testsuite/gcc.dg/vect/vect-95.c
index 1e8bc1e7240..a8093ac9f21 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-95.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-95.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_float } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -63,3 +64,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { xfail { vect_no_align || vect_element_align } } } } */
 /*  { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
 /*  { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 4 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-96.c b/gcc/testsuite/gcc.dg/vect/vect-96.c
index c0d6c37b21d..1f53bc51ed0 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-96.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-96.c
@@ -1,5 +1,5 @@ 
 /* Disabling epilogues until we find a better way to deal with scans.  */
-/* { dg-additional-options "--param vect-epilogues-nomask=0" } */
+/* { dg-additional-options "--param vect-epilogues-nomask=0 -fdump-tree-optimized-details-blocks" } */
 /* { dg-require-effective-target vect_int } */
 /* { dg-add-options double_vectors } */
 
@@ -54,3 +54,4 @@  int main (void)
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target { { {! vect_no_align} && vector_alignment_reachable } && vect_align_stack_vars } xfail { ! vect_unaligned_possible } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { { vect_no_align } || { { ! vector_alignment_reachable} || vect_element_align } } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { { vect_no_align && { ! vect_hw_misalign } } || { {! vector_alignment_reachable} && {! vect_element_align} } } } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-97-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-97-big-array.c
index 977a9d57ed4..c17c08f5d66 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-97-big-array.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-97-big-array.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -67,3 +68,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-97.c b/gcc/testsuite/gcc.dg/vect/vect-97.c
index 734ba3b6ca3..a85b0b54a31 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-97.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-97.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -62,3 +63,4 @@  int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-98-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-98-big-array.c
index 61b749d4669..5cdceee9e63 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-98-big-array.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-98-big-array.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -50,3 +51,4 @@  int main (void)
 /* Needs interleaving support.  */
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided4 } } } */
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { xfail  vect_strided4 } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-98.c b/gcc/testsuite/gcc.dg/vect/vect-98.c
index 2055cce70b2..aacb7076078 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-98.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-98.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include <stdarg.h>
 #include "tree-vect.h"
@@ -42,3 +43,4 @@  int main (void)
 /* Needs interleaving support.  */
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided4 } } } */
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { xfail  vect_strided4 } } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-99.c b/gcc/testsuite/gcc.dg/vect/vect-99.c
index ae23b3afbd1..49d5e0106b4 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-99.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-99.c
@@ -1,4 +1,5 @@ 
 /* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-fdump-tree-optimized-details-blocks" } */
 
 #include "tree-vect.h"
 
@@ -29,3 +30,4 @@  int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
diff --git a/gcc/tree-vect-loop-manip.cc b/gcc/tree-vect-loop-manip.cc
index e53a99e7c3c..9de897d05a5 100644
--- a/gcc/tree-vect-loop-manip.cc
+++ b/gcc/tree-vect-loop-manip.cc
@@ -3121,8 +3121,13 @@  vect_do_peeling (loop_vec_info loop_vinfo, tree niters, tree nitersm1,
   tree niters_prolog;
   int bound_prolog = 0;
   if (prolog_peeling)
-    niters_prolog = vect_gen_prolog_loop_niters (loop_vinfo, anchor,
-						  &bound_prolog);
+    {
+      niters_prolog = vect_gen_prolog_loop_niters (loop_vinfo, anchor,
+						    &bound_prolog);
+      /* If algonment peeling is known, we will always execute prolog.  */
+      if (TREE_CODE (niters_prolog) == INTEGER_CST)
+	prob_prolog = profile_probability::always ();
+    }
   else
     niters_prolog = build_int_cst (type, 0);