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


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

Re: [PATCH, 8/8] Do simple omp lowering for no address taken var


On 17-11-14 11:13, Richard Biener wrote:
On Sat, 15 Nov 2014, Tom de Vries wrote:

>On 15-11-14 13:14, Tom de Vries wrote:
> >Hi,
> >
> >I'm submitting a patch series with initial support for the oacc kernels
> >directive.
> >
> >The patch series uses pass_parallelize_loops to implement parallelization of
> >loops in the oacc kernels region.
> >
> >The patch series consists of these 8 patches:
> >...
> >      1  Expand oacc kernels after pass_build_ealias
> >      2  Add pass_oacc_kernels
> >      3  Add pass_ch_oacc_kernels to pass_oacc_kernels
> >      4  Add pass_tree_loop_{init,done} to pass_oacc_kernels
> >      5  Add pass_loop_im to pass_oacc_kernels
> >      6  Add pass_ccp to pass_oacc_kernels
> >      7  Add pass_parloops_oacc_kernels to pass_oacc_kernels
> >      8  Do simple omp lowering for no address taken var
> >...
>
>This patch lowers integer variables that do not have their address taken as
>local variable.  We use a copy at region entry and exit to copy the value in
>and out.
>
>In the context of reduction handling in a kernels region, this allows the
>parloops reduction analysis to recognize the reduction, even after oacc
>lowering has been done in pass_lower_omp.
>
>In more detail, without this patch, the omp_data_i load and stores are
>generated in place (in this case, in the loop):
>...
>                 {
>                   .omp_data_iD.2201 = &.omp_data_arr.15D.2220;
>                   {
>                     unsigned intD.9 iD.2146;
>
>                     iD.2146 = 0;
>                     goto <D.2207>;
>                     <D.2208>:
>                     D.2216 = .omp_data_iD.2201->cD.2203;
>                     c.9D.2176 = *D.2216;
>                     D.2177 = (long unsigned intD.10) iD.2146;
>                     D.2178 = D.2177 * 4;
>                     D.2179 = c.9D.2176 + D.2178;
>                     D.2180 = *D.2179;
>                     D.2217 = .omp_data_iD.2201->sumD.2205;
>                     D.2218 = *D.2217;
>                     D.2217 = .omp_data_iD.2201->sumD.2205;
>                     D.2219 = D.2180 + D.2218;
>                     *D.2217 = D.2219;
>                     iD.2146 = iD.2146 + 1;
>                     <D.2207>:
>                     if (iD.2146 <= 524287) goto <D.2208>; else goto <D.2209>;
>                     <D.2209>:
>                   }
>...
>
>With this patch, the omp_data_i load and stores for sum are generated at entry
>and exit:
>...
>                 {
>                   .omp_data_iD.2201 = &.omp_data_arr.15D.2218;
>                   D.2216 = .omp_data_iD.2201->sumD.2205;
>                   sumD.2206 = *D.2216;
>                   {
>                     unsigned intD.9 iD.2146;
>
>                     iD.2146 = 0;
>                     goto <D.2207>;
>                     <D.2208>:
>                     D.2217 = .omp_data_iD.2201->cD.2203;
>                     c.9D.2176 = *D.2217;
>                     D.2177 = (long unsigned intD.10) iD.2146;
>                     D.2178 = D.2177 * 4;
>                     D.2179 = c.9D.2176 + D.2178;
>                     D.2180 = *D.2179;
>                     sumD.2206 = D.2180 + sumD.2206;
>                     iD.2146 = iD.2146 + 1;
>                     <D.2207>:
>                     if (iD.2146 <= 524287) goto <D.2208>; else goto <D.2209>;
>                     <D.2209>:
>                   }
>                   *D.2216 = sumD.2206;
>                   #pragma omp return
>                 }
>...
>
>
>So, without the patch the reduction operation looks like this:
>...
>     *(.omp_data_iD.2201->sumD.2205) = *(.omp_data_iD.2201->sumD.2205) + x
>...
>
>And with this patch the reduction operation is simply:
>...
>     sumD.2206 = sumD.2206 + x:
>...
>
>OK for trunk?
I presume the reason you are trying to do that here is that otherwise
it happens too late?  What you do is what loop store motion would
do.

Richard,

Thanks for the hint. I've built a reduction example:
...
void __attribute__((noinline))
f (unsigned int *__restrict__ a, unsigned int *__restrict__ sum, unsigned int n)
{
  unsigned int i;
  for (i = 0; i < n; ++i)
    *sum += a[i];
}...
and observed that store motion of the *sum store is done by pass_loop_im, provided the *sum load is taken out of the the loop by pass_pre first.

So alternatively, we could use pass_pre and pass_loop_im to achieve the same effect.

When trying out adding pass_pre as a part of the pass group pass_oacc_kernels, I found that also pass_copyprop was required to get parloops to recognize the reduction.

Attached patch adds the pre pass to pass group pass_oacc_kernels.

Bootstrapped and reg-tested in the same way as before.

OK for trunk?
2014-11-23  Tom de Vries  <tom@codesourcery.com>

	* passes.def: Add pass_split_crit_edges and pass_pre to pass group
	pass_oacc_kernels.
	* tree-ssa-pre.c (pass_pre::clone): New function.
	* tree-ssa-sccvn.c (visit_use):  Handle .omp_data_i init conservatively.
	* tree-ssa-tail-merge.c (tail_merge_optimize): Don't run if omp not
	expanded yet.

	* g++.dg/init/new19.C: Replace pre with pre2.
	* g++.dg/tree-ssa/pr33615-2.C: Same.
	* gcc.dg/pr31847.c: Same.
	* gcc.dg/pr41783.c: Same.
	* gcc.dg/pr43864-2.c: Same.
	* gcc.dg/pr43864-3.c: Same.
	* gcc.dg/pr43864-4.c: Same.
	* gcc.dg/pr43864.c: Same.
	* gcc.dg/pr50763.c: Same.
	* gcc.dg/pr51879-12.c: Same.
	* gcc.dg/pr51879-16.c: Same.
	* gcc.dg/pr51879-17.c: Same.
	* gcc.dg/pr51879-18.c: Same.
	* gcc.dg/pr51879-2.c: Same.
	* gcc.dg/pr51879-3.c: Same.
	* gcc.dg/pr51879-4.c: Same.
	* gcc.dg/pr51879-6.c: Same.
	* gcc.dg/pr51879-7.c: Same.
	* gcc.dg/pr51879.c: Same.
	* gcc.dg/pr58805.c: Same.
	* gcc.dg/tail-merge-store.c: Same.
	* gcc.dg/tree-ssa/loadpre1.c: Same.
	* gcc.dg/tree-ssa/loadpre10.c: Same.
	* gcc.dg/tree-ssa/loadpre11.c: Same.
	* gcc.dg/tree-ssa/loadpre12.c: Same.
	* gcc.dg/tree-ssa/loadpre13.c: Same.
	* gcc.dg/tree-ssa/loadpre14.c: Same.
	* gcc.dg/tree-ssa/loadpre15.c: Same.
	* gcc.dg/tree-ssa/loadpre16.c: Same.
	* gcc.dg/tree-ssa/loadpre17.c: Same.
	* gcc.dg/tree-ssa/loadpre18.c: Same.
	* gcc.dg/tree-ssa/loadpre19.c: Same.
	* gcc.dg/tree-ssa/loadpre2.c: Same.
	* gcc.dg/tree-ssa/loadpre20.c: Same.
	* gcc.dg/tree-ssa/loadpre21.c: Same.
	* gcc.dg/tree-ssa/loadpre22.c: Same.
	* gcc.dg/tree-ssa/loadpre23.c: Same.
	* gcc.dg/tree-ssa/loadpre24.c: Same.
	* gcc.dg/tree-ssa/loadpre25.c: Same.
	* gcc.dg/tree-ssa/loadpre3.c: Same.
	* gcc.dg/tree-ssa/loadpre4.c: Same.
	* gcc.dg/tree-ssa/loadpre5.c: Same.
	* gcc.dg/tree-ssa/loadpre6.c: Same.
	* gcc.dg/tree-ssa/loadpre7.c: Same.
	* gcc.dg/tree-ssa/loadpre8.c: Same.
	* gcc.dg/tree-ssa/pr23455.c: Same.
	* gcc.dg/tree-ssa/pr35286.c: Same.
	* gcc.dg/tree-ssa/pr35287.c: Same.
	* gcc.dg/tree-ssa/pr43491.c: Same.
	* gcc.dg/tree-ssa/pr47392.c: Same.
	* gcc.dg/tree-ssa/ssa-fre-10.c: Same.
	* gcc.dg/tree-ssa/ssa-pre-1.c: Same.
	* gcc.dg/tree-ssa/ssa-pre-11.c: Same.
	* gcc.dg/tree-ssa/ssa-pre-12.c: Same.
	* gcc.dg/tree-ssa/ssa-pre-13.c: Same.
	* gcc.dg/tree-ssa/ssa-pre-16.c: Same.
	* gcc.dg/tree-ssa/ssa-pre-17.c: Same.
	* gcc.dg/tree-ssa/ssa-pre-18.c: Same.
	* gcc.dg/tree-ssa/ssa-pre-19.c: Same.
	* gcc.dg/tree-ssa/ssa-pre-2.c: Same.
	* gcc.dg/tree-ssa/ssa-pre-20.c: Same.
	* gcc.dg/tree-ssa/ssa-pre-21.c: Same.
	* gcc.dg/tree-ssa/ssa-pre-22.c: Same.
	* gcc.dg/tree-ssa/ssa-pre-23.c: Same.
	* gcc.dg/tree-ssa/ssa-pre-24.c: Same.
	* gcc.dg/tree-ssa/ssa-pre-25.c: Same.
	* gcc.dg/tree-ssa/ssa-pre-27.c: Same.
	* gcc.dg/tree-ssa/ssa-pre-28.c: Same.
	* gcc.dg/tree-ssa/ssa-pre-29.c: Same.
	* gcc.dg/tree-ssa/ssa-pre-3.c: Same.
	* gcc.dg/tree-ssa/ssa-pre-30.c: Same.
	* gcc.dg/tree-ssa/ssa-pre-31.c: Same.
	* gcc.dg/tree-ssa/ssa-pre-4.c: Same.
	* gcc.dg/tree-ssa/ssa-pre-5.c: Same.
	* gcc.dg/tree-ssa/ssa-pre-6.c: Same.
	* gfortran.dg/pr43984.f90: Same.
---
 gcc/passes.def                             |  2 ++
 gcc/testsuite/g++.dg/init/new19.C          |  6 +++---
 gcc/testsuite/g++.dg/tree-ssa/pr33615-2.C  |  6 +++---
 gcc/testsuite/gcc.dg/pr31847.c             |  6 +++---
 gcc/testsuite/gcc.dg/pr41783.c             |  8 ++++----
 gcc/testsuite/gcc.dg/pr43864-2.c           | 10 +++++-----
 gcc/testsuite/gcc.dg/pr43864-3.c           | 10 +++++-----
 gcc/testsuite/gcc.dg/pr43864-4.c           | 12 ++++++------
 gcc/testsuite/gcc.dg/pr43864.c             |  8 ++++----
 gcc/testsuite/gcc.dg/pr50763.c             |  6 +++---
 gcc/testsuite/gcc.dg/pr51879-12.c          |  8 ++++----
 gcc/testsuite/gcc.dg/pr51879-16.c          |  8 ++++----
 gcc/testsuite/gcc.dg/pr51879-17.c          |  8 ++++----
 gcc/testsuite/gcc.dg/pr51879-18.c          |  6 +++---
 gcc/testsuite/gcc.dg/pr51879-2.c           |  8 ++++----
 gcc/testsuite/gcc.dg/pr51879-3.c           |  6 +++---
 gcc/testsuite/gcc.dg/pr51879-4.c           |  6 +++---
 gcc/testsuite/gcc.dg/pr51879-6.c           |  6 +++---
 gcc/testsuite/gcc.dg/pr51879-7.c           |  6 +++---
 gcc/testsuite/gcc.dg/pr51879.c             |  6 +++---
 gcc/testsuite/gcc.dg/pr58805.c             |  6 +++---
 gcc/testsuite/gcc.dg/tail-merge-store.c    |  8 ++++----
 gcc/testsuite/gcc.dg/tree-ssa/loadpre1.c   |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/loadpre10.c  |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/loadpre11.c  |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/loadpre12.c  |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/loadpre13.c  |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/loadpre14.c  |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/loadpre15.c  |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/loadpre16.c  |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/loadpre17.c  |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/loadpre18.c  |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/loadpre19.c  |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/loadpre2.c   |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/loadpre20.c  |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/loadpre21.c  |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/loadpre22.c  |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/loadpre23.c  |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/loadpre24.c  |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/loadpre25.c  |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/loadpre3.c   |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/loadpre4.c   |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/loadpre5.c   |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c   |  8 ++++----
 gcc/testsuite/gcc.dg/tree-ssa/loadpre7.c   |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/loadpre8.c   |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/pr23455.c    |  8 ++++----
 gcc/testsuite/gcc.dg/tree-ssa/pr35286.c    |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/pr35287.c    |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/pr43491.c    |  8 ++++----
 gcc/testsuite/gcc.dg/tree-ssa/pr47392.c    |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-10.c |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-1.c  |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-11.c |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-12.c |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-13.c |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-16.c |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-17.c |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-18.c |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-19.c |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-2.c  |  8 ++++----
 gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-20.c |  8 ++++----
 gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-21.c |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-22.c |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-23.c |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-24.c |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-25.c |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-27.c |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-28.c |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-29.c |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-3.c  |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-30.c |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-31.c |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-4.c  |  6 +++---
 gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-5.c  |  8 ++++----
 gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-6.c  |  6 +++---
 gcc/testsuite/gfortran.dg/pr43984.f90      |  6 +++---
 gcc/tree-ssa-pre.c                         |  1 +
 gcc/tree-ssa-sccvn.c                       |  4 +++-
 gcc/tree-ssa-tail-merge.c                  |  3 ++-
 80 files changed, 256 insertions(+), 250 deletions(-)

diff --git a/gcc/passes.def b/gcc/passes.def
index e5edc1d..fdff85e 100644
--- a/gcc/passes.def
+++ b/gcc/passes.def
@@ -90,6 +90,8 @@ along with GCC; see the file COPYING3.  If not see
 	  NEXT_PASS (pass_oacc_kernels);
 	  PUSH_INSERT_PASSES_WITHIN (pass_oacc_kernels)
 	      NEXT_PASS (pass_ch_oacc_kernels);
+	      NEXT_PASS (pass_split_crit_edges);
+	      NEXT_PASS (pass_pre);
 	  POP_INSERT_PASSES ()
 	  NEXT_PASS (pass_expand_omp_ssa);
 	  NEXT_PASS (pass_fre);
diff --git a/gcc/testsuite/g++.dg/init/new19.C b/gcc/testsuite/g++.dg/init/new19.C
index a25be7d..3b3c913 100644
--- a/gcc/testsuite/g++.dg/init/new19.C
+++ b/gcc/testsuite/g++.dg/init/new19.C
@@ -1,5 +1,5 @@
 // { dg-do compile }
-// { dg-options "-O2 -fstrict-aliasing -fdump-tree-pre-details" }
+// { dg-options "-O2 -fstrict-aliasing -fdump-tree-pre2-details" }
 
 // Make sure we hoist invariants out of the loop even in the presence
 // of placement new.  This is similar to code in tramp3d.
@@ -69,5 +69,5 @@ int c::foo(int f1, int f2, int f3)
   return sum;
 }
 
-// { dg-final { scan-tree-dump "Replaced.*->ai\\\[0\\\]" "pre" } }
-// { dg-final { cleanup-tree-dump "pre" } }
+// { dg-final { scan-tree-dump "Replaced.*->ai\\\[0\\\]" "pre2" } }
+// { dg-final { cleanup-tree-dump "pre2" } }
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr33615-2.C b/gcc/testsuite/g++.dg/tree-ssa/pr33615-2.C
index 542731a..7189733 100644
--- a/gcc/testsuite/g++.dg/tree-ssa/pr33615-2.C
+++ b/gcc/testsuite/g++.dg/tree-ssa/pr33615-2.C
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fnon-call-exceptions -fdump-tree-pre-details -w" } */
+/* { dg-options "-O2 -fnon-call-exceptions -fdump-tree-pre2-details -w" } */
 
 extern volatile int y;
 
@@ -16,5 +16,5 @@ foo (double a, int x)
 
 // The expression 1.0 / 0.0 should not be treated as a loop invariant
 // if it may throw an exception.
-// { dg-final { scan-tree-dump-times "Replaced 1\\\.0e\\\+0 / 0\\\.0" 0 "pre" } }
-// { dg-final { cleanup-tree-dump "pre" } }
+// { dg-final { scan-tree-dump-times "Replaced 1\\\.0e\\\+0 / 0\\\.0" 0 "pre2" } }
+// { dg-final { cleanup-tree-dump "pre2" } }
diff --git a/gcc/testsuite/gcc.dg/pr31847.c b/gcc/testsuite/gcc.dg/pr31847.c
index 4b945a9..484f2b3 100644
--- a/gcc/testsuite/gcc.dg/pr31847.c
+++ b/gcc/testsuite/gcc.dg/pr31847.c
@@ -1,7 +1,7 @@
 /* PR 31847 */
 
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-all" } */
+/* { dg-options "-O2 -fdump-tree-pre2-all" } */
 
 extern int bar(int);
 
@@ -11,5 +11,5 @@ int foo()
   return bar(a);
 }
 
-/* { dg-final { scan-tree-dump-not "Created value  for " "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-not "Created value  for " "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/pr41783.c b/gcc/testsuite/gcc.dg/pr41783.c
index cae066b..02c6af4 100644
--- a/gcc/testsuite/gcc.dg/pr41783.c
+++ b/gcc/testsuite/gcc.dg/pr41783.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O3 -fdump-tree-pre" } */
+/* { dg-options "-O3 -fdump-tree-pre2" } */
 int db[100];
 int a_global_var, fact;
 int main()
@@ -15,6 +15,6 @@ int main()
 }
 /* We want to have exactly one load (not two) from a_global_var,
    and we want that load to be into a PRE temporary.  */
-/* { dg-final { scan-tree-dump-times "= a_global_var;" 1 "pre" } } */
-/* { dg-final { scan-tree-dump "pretmp\[^\\n\]* = a_global_var;" "pre" } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "= a_global_var;" 1 "pre2" } } */
+/* { dg-final { scan-tree-dump "pretmp\[^\\n\]* = a_global_var;" "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/pr43864-2.c b/gcc/testsuite/gcc.dg/pr43864-2.c
index f00fff9..a3393e6 100644
--- a/gcc/testsuite/gcc.dg/pr43864-2.c
+++ b/gcc/testsuite/gcc.dg/pr43864-2.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre" } */
+/* { dg-options "-O2 -fdump-tree-pre2" } */
 
 int
 f (int c, int b, int d)
@@ -17,7 +17,7 @@ f (int c, int b, int d)
   return r;
 }
 
-/* { dg-final { scan-tree-dump-times "if " 0 "pre"} } */
-/* { dg-final { scan-tree-dump-times "_.*\\\+.*_" 1 "pre"} } */
-/* { dg-final { scan-tree-dump-not "Invalid sum" "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "if " 0 "pre2" } } */
+/* { dg-final { scan-tree-dump-times "_.*\\\+.*_" 1 "pre2" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/pr43864-3.c b/gcc/testsuite/gcc.dg/pr43864-3.c
index c4954e1..721395c 100644
--- a/gcc/testsuite/gcc.dg/pr43864-3.c
+++ b/gcc/testsuite/gcc.dg/pr43864-3.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre" } */
+/* { dg-options "-O2 -fdump-tree-pre2" } */
 
 /* Commutative case.  */
 
@@ -18,7 +18,7 @@ int f(int c, int b, int d)
   return r;
 }
 
-/* { dg-final { scan-tree-dump-times "if " 0 "pre"} } */
-/* { dg-final { scan-tree-dump-times "_.*\\\+.*_" 1 "pre"} } */
-/* { dg-final { scan-tree-dump-not "Invalid sum" "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "if " 0 "pre2" } } */
+/* { dg-final { scan-tree-dump-times "_.*\\\+.*_" 1 "pre2" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/pr43864-4.c b/gcc/testsuite/gcc.dg/pr43864-4.c
index 42adfee..2531ab1 100644
--- a/gcc/testsuite/gcc.dg/pr43864-4.c
+++ b/gcc/testsuite/gcc.dg/pr43864-4.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre" } */
+/* { dg-options "-O2 -fdump-tree-pre2" } */
 
 /* Different stmt order.  */
 
@@ -22,8 +22,8 @@ int f(int c, int b, int d)
   return r - r2;
 }
 
-/* { dg-final { scan-tree-dump-times "if " 0 "pre"} } */
-/* { dg-final { scan-tree-dump-times "_.*\\\+.*_" 1 "pre"} } */
-/* { dg-final { scan-tree-dump-times " - " 2 "pre"} } */
-/* { dg-final { scan-tree-dump-not "Invalid sum" "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "if " 0 "pre2" } } */
+/* { dg-final { scan-tree-dump-times "_.*\\\+.*_" 1 "pre2" } } */
+/* { dg-final { scan-tree-dump-times " - " 2 "pre2" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/pr43864.c b/gcc/testsuite/gcc.dg/pr43864.c
index 8d1e989..8800195 100644
--- a/gcc/testsuite/gcc.dg/pr43864.c
+++ b/gcc/testsuite/gcc.dg/pr43864.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre" } */
+/* { dg-options "-O2 -fdump-tree-pre2" } */
 
 extern void foo (char*, int);
 extern void mysprintf (char *, char *);
@@ -31,6 +31,6 @@ hprofStartupp (char *outputFileName, char *ctx)
   return ctx;
 }
 
-/* { dg-final { scan-tree-dump-times "myfree \\(" 1 "pre"} } */
-/* { dg-final { scan-tree-dump-not "Invalid sum" "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "myfree \\(" 1 "pre2" } } */
+/* { dg-final { scan-tree-dump-not "Invalid sum" "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/pr50763.c b/gcc/testsuite/gcc.dg/pr50763.c
index 695b61c..268b0eb 100644
--- a/gcc/testsuite/gcc.dg/pr50763.c
+++ b/gcc/testsuite/gcc.dg/pr50763.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-pre" } */
+/* { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-pre2" } */
 
 int bar (int i);
 
@@ -12,5 +12,5 @@ foo (int c, int d)
   while (c == d);
 }
 
-/* { dg-final { scan-tree-dump-times "== 33" 2 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "== 33" 2 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/pr51879-12.c b/gcc/testsuite/gcc.dg/pr51879-12.c
index 1b25e29..249ad0f 100644
--- a/gcc/testsuite/gcc.dg/pr51879-12.c
+++ b/gcc/testsuite/gcc.dg/pr51879-12.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre" } */
+/* { dg-options "-O2 -fdump-tree-pre2" } */
 
 __attribute__((pure)) int bar (int);
 __attribute__((pure)) int bar2 (int);
@@ -24,6 +24,6 @@ foo (int y)
   baz (a);
 }
 
-/* { dg-final { scan-tree-dump-times "bar \\(" 1 "pre"} } */
-/* { dg-final { scan-tree-dump-times "bar2 \\(" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "bar \\(" 1 "pre2" } } */
+/* { dg-final { scan-tree-dump-times "bar2 \\(" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/pr51879-16.c b/gcc/testsuite/gcc.dg/pr51879-16.c
index 3a84e97..04ab419 100644
--- a/gcc/testsuite/gcc.dg/pr51879-16.c
+++ b/gcc/testsuite/gcc.dg/pr51879-16.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre" } */
+/* { dg-options "-O2 -fdump-tree-pre2" } */
 
 struct S {
   int i;
@@ -27,6 +27,6 @@ int bar (int c) {
   return r;
 }
 
-/* { dg-final { scan-tree-dump-times "foo \\(" 1 "pre"} } */
-/* { dg-final { scan-tree-dump-times "foo2 \\(" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "foo \\(" 1 "pre2" } } */
+/* { dg-final { scan-tree-dump-times "foo2 \\(" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/pr51879-17.c b/gcc/testsuite/gcc.dg/pr51879-17.c
index 806fe7b..5480349 100644
--- a/gcc/testsuite/gcc.dg/pr51879-17.c
+++ b/gcc/testsuite/gcc.dg/pr51879-17.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre" } */
+/* { dg-options "-O2 -fdump-tree-pre2" } */
 
 struct S {
   int i;
@@ -27,6 +27,6 @@ int bar (int c) {
   return r;
 }
 
-/* { dg-final { scan-tree-dump-times "foo \\(" 2 "pre"} } */
-/* { dg-final { scan-tree-dump-times "foo2 \\(" 2 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "foo \\(" 2 "pre2" } } */
+/* { dg-final { scan-tree-dump-times "foo2 \\(" 2 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/pr51879-18.c b/gcc/testsuite/gcc.dg/pr51879-18.c
index 95629f1..01f4995 100644
--- a/gcc/testsuite/gcc.dg/pr51879-18.c
+++ b/gcc/testsuite/gcc.dg/pr51879-18.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre -fno-tree-copy-prop -fno-tree-dominator-opts -fno-tree-copyrename" } */
+/* { dg-options "-O2 -fdump-tree-pre2 -fno-tree-copy-prop -fno-tree-dominator-opts -fno-tree-copyrename" } */
 
 extern int foo (void);
 
@@ -13,5 +13,5 @@ void bar (int c, int *p)
     *q = foo ();
 }
 
-/* { dg-final { scan-tree-dump-times "foo \\(" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "foo \\(" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/pr51879-2.c b/gcc/testsuite/gcc.dg/pr51879-2.c
index db385cb..b086caa 100644
--- a/gcc/testsuite/gcc.dg/pr51879-2.c
+++ b/gcc/testsuite/gcc.dg/pr51879-2.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre" } */
+/* { dg-options "-O2 -fdump-tree-pre2" } */
 
 int bar (int);
 void baz (int);
@@ -14,6 +14,6 @@ foo (int y)
     baz (bar (7) + 6);
 }
 
-/* { dg-final { scan-tree-dump-times "bar \\(" 1 "pre"} } */
-/* { dg-final { scan-tree-dump-times "baz \\(" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "bar \\(" 1 "pre2" } } */
+/* { dg-final { scan-tree-dump-times "baz \\(" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/pr51879-3.c b/gcc/testsuite/gcc.dg/pr51879-3.c
index be4b374..c3b4e31 100644
--- a/gcc/testsuite/gcc.dg/pr51879-3.c
+++ b/gcc/testsuite/gcc.dg/pr51879-3.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre" } */
+/* { dg-options "-O2 -fdump-tree-pre2" } */
 
 int bar (int);
 void baz (int);
@@ -15,5 +15,5 @@ foo (int y)
   baz (a);
 }
 
-/* { dg-final { scan-tree-dump-times "bar \\(" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "bar \\(" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/pr51879-4.c b/gcc/testsuite/gcc.dg/pr51879-4.c
index 5cb47af..51995a7 100644
--- a/gcc/testsuite/gcc.dg/pr51879-4.c
+++ b/gcc/testsuite/gcc.dg/pr51879-4.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre" } */
+/* { dg-options "-O2 -fdump-tree-pre2" } */
 
 int bar (int);
 void baz (int);
@@ -12,5 +12,5 @@ int foo (int y)
   return a + b;
 }
 
-/* { dg-final { scan-tree-dump-times "bar \\(" 2 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "bar \\(" 2 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/pr51879-6.c b/gcc/testsuite/gcc.dg/pr51879-6.c
index 8362a17..5daffd0 100644
--- a/gcc/testsuite/gcc.dg/pr51879-6.c
+++ b/gcc/testsuite/gcc.dg/pr51879-6.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre" } */
+/* { dg-options "-O2 -fdump-tree-pre2" } */
 
 
 int bar (int);
@@ -23,5 +23,5 @@ foo (int y)
   baz (a);
 }
 
-/* { dg-final { scan-tree-dump-times "bar \\(" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "bar \\(" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/pr51879-7.c b/gcc/testsuite/gcc.dg/pr51879-7.c
index 8a699a1..e8872a2 100644
--- a/gcc/testsuite/gcc.dg/pr51879-7.c
+++ b/gcc/testsuite/gcc.dg/pr51879-7.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre" } */
+/* { dg-options "-O2 -fdump-tree-pre2" } */
 
 int z;
 
@@ -12,5 +12,5 @@ foo (int y)
     z = 5;
 }
 
-/* { dg-final { scan-tree-dump-times "z = 5" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "z = 5" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/pr51879.c b/gcc/testsuite/gcc.dg/pr51879.c
index 060624f..f806e8e 100644
--- a/gcc/testsuite/gcc.dg/pr51879.c
+++ b/gcc/testsuite/gcc.dg/pr51879.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre" } */
+/* { dg-options "-O2 -fdump-tree-pre2" } */
 
 int bar (int);
 void baz (int);
@@ -15,5 +15,5 @@ foo (int y)
   baz (a);
 }
 
-/* { dg-final { scan-tree-dump-times "bar \\(" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "bar \\(" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/pr58805.c b/gcc/testsuite/gcc.dg/pr58805.c
index dda0e4b..cfa0219 100644
--- a/gcc/testsuite/gcc.dg/pr58805.c
+++ b/gcc/testsuite/gcc.dg/pr58805.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -ftree-tail-merge -fdump-tree-pre" } */
+/* { dg-options "-O2 -ftree-tail-merge -fdump-tree-pre2" } */
 
 /* Type that matches the 'p' constraint.  */
 #define TYPE void *
@@ -20,5 +20,5 @@ foo (int n, TYPE *x, TYPE *y)
     bar (y);
 }
 
-/* { dg-final { scan-tree-dump-times "__asm__" 2 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "__asm__" 2 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tail-merge-store.c b/gcc/testsuite/gcc.dg/tail-merge-store.c
index 1aefbdc..ec7aa8c 100644
--- a/gcc/testsuite/gcc.dg/tail-merge-store.c
+++ b/gcc/testsuite/gcc.dg/tail-merge-store.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -ftree-tail-merge -fdump-tree-pre" } */
+/* { dg-options "-O2 -ftree-tail-merge -fdump-tree-pre2" } */
 
 int z;
 int x;
@@ -17,6 +17,6 @@ f (int c, int d)
     }
 }
 
-/* { dg-final { scan-tree-dump-times "duplicate of" 1 "pre"} } */
-/* { dg-final { scan-tree-dump-times "z = 5" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "duplicate of" 1 "pre2" } } */
+/* { dg-final { scan-tree-dump-times "z = 5" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre1.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre1.c
index ce78f02..41254bb 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre1.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre1.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 int foo(int *a, int argc)
 {
   int c;
@@ -14,5 +14,5 @@ int foo(int *a, int argc)
   e = *a;
   return d + e;
 }
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre" } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre10.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre10.c
index 4147a70..e55273b 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre10.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre10.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 struct tree_common 
 { 
   int code; 
@@ -44,6 +44,6 @@ L19:
 L23: 
   return expr; 
 } 
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
 
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre11.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre11.c
index eb6089c..4416aa0 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre11.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre11.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats -fno-tree-cselim" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats -fno-tree-cselim" } */
 int *t;
 int g(int);
 int f(int tt)
@@ -9,6 +9,6 @@ int f(int tt)
       *t1 = 2;
     return g(*t1);
 } 
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
 
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre12.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre12.c
index 94a3d00..837585a 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre12.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre12.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 typedef int type[2];
 type *t;
 int g(int);
@@ -11,5 +11,5 @@ int f(int tt)
     return g((*t1)[0]);
 }
 
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre" } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre13.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre13.c
index 420ad71..efd43f8 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre13.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre13.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 int t[2];
 int g(int);
 int f(int tt)
@@ -9,5 +9,5 @@ int f(int tt)
     return g(t[0]);
 }
 
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre14.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre14.c
index 11bfd00..79bb36a 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre14.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre14.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 typedef int type[2];
 int foo(type *a, int argc)
 {
@@ -15,5 +15,5 @@ int foo(type *a, int argc)
   e = (*a)[0];
   return d + e;
 }
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre15.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre15.c
index b04c762..652b0f3 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre15.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre15.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 typedef int type[2];
 int foo(type *a, int argc, int t)
 {
@@ -15,5 +15,5 @@ int foo(type *a, int argc, int t)
   e = (*a)[t];
   return d + e;
 }
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre16.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre16.c
index 193ae52..f7fe24a 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre16.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre16.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 typedef int type[2];
 int foo(type *a, int argc)
 {
@@ -12,5 +12,5 @@ int foo(type *a, int argc)
   e = (*a)[0];
   return d + e;
 }
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre17.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre17.c
index ec0f6ec..38b72af 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre17.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre17.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 typedef int type[2];
 int foo(type *a, int argc)
 {
@@ -12,5 +12,5 @@ int foo(type *a, int argc)
   e = (*a)[argc];
   return d + e;
 }
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre18.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre18.c
index 21a1d06..07133e4 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre18.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre18.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 typedef int type[2];
 int main(type *a, int argc)
 {
@@ -12,5 +12,5 @@ int main(type *a, int argc)
   e = (*a)[argc];
   return d + e;
 }
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre" { xfail *-*-* } } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" { xfail *-*-* } } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre19.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre19.c
index 0ad8988..65294c0 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre19.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre19.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 typedef int type[2];
 int foo(type *a, int argc)
 {
@@ -12,5 +12,5 @@ int foo(type *a, int argc)
   e = (*a)[argc];
   return e;
 }
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"  } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre2.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre2.c
index 8d6557a..6a2fde4 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre2.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre2.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 int main(int *a, int argc)
 {
   int b;
@@ -14,5 +14,5 @@ int main(int *a, int argc)
   return d + e;
 }
 
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre20.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre20.c
index 92a2353..3a657c7 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre20.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre20.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 typedef int type[2];
 int foo(type *a, int argc)
 {
@@ -12,5 +12,5 @@ int foo(type *a, int argc)
   e = (*a)[argc];
   return e;
 }
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"  } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre21.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre21.c
index 77caef6..2f53186 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre21.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre21.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 typedef int type[2];
 int main(type *a, int argc)
 {
@@ -15,5 +15,5 @@ int main(type *a, int argc)
   return d + e;
 }
 
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre22.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre22.c
index 3c03c9b..2b982df 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre22.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre22.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 typedef int type[2];
 int main(type *a, int argc)
 {
@@ -15,5 +15,5 @@ int main(type *a, int argc)
   return d + e;
 }
 
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre23.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre23.c
index 2273acc..f95f63c 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre23.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre23.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 
 struct {
   int a;
@@ -21,5 +21,5 @@ int foo(int argc)
   return d + e;
 }
 
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"  } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre24.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre24.c
index 31fcc9f..b28eb15 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre24.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre24.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 
 int a;
 
@@ -20,5 +20,5 @@ int foo(int argc)
 
 /* We will move the load of a out of the loop.  */
 
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre" } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre25.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre25.c
index aaf0931..8c542e8 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre25.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre25.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 struct X { int i; };
 int foo(struct X *a, int argc)
 {
@@ -16,5 +16,5 @@ int foo(struct X *a, int argc)
   return d + e;
 }
 
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"  } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre3.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre3.c
index 4bda8f6..2815656 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre3.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre3.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 int foo(int **a,int argc)
 {
   int b;
@@ -20,5 +20,5 @@ int foo(int **a,int argc)
   return d + e;
 }
 
-/* { dg-final { scan-tree-dump-times "Eliminated: 2" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 2" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre4.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre4.c
index 1e26603..1e0f40d 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre4.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre4.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 int main(int *a, int argc)
 {
   int b;
@@ -15,5 +15,5 @@ int main(int *a, int argc)
   return d + e;
 }
 
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"  } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre5.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre5.c
index 475050a..ba3b199 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre5.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre5.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 int p;
 int r;
 
@@ -20,5 +20,5 @@ int foo(int argc)
     r = 9;
   return q + a();
 }
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c
index bcd72c5..abcafcf 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c
@@ -1,5 +1,5 @@
 /* { dg-do compile { target nonpic } } */
-/* { dg-options "-O2 -fdump-tree-pre-stats -fdump-tree-fre1" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats -fdump-tree-fre1" } */
 #include <stddef.h>
 
 union tree_node;
@@ -74,7 +74,7 @@ main (void)
 }
 
 /* { dg-final { scan-tree-dump-not "= unexpanded_var_list;" "fre1" } } */
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre" } } */
-/* { dg-final { scan-tree-dump-times "Insertions: 2" 1 "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { scan-tree-dump-times "Insertions: 2" 1 "pre2" } } */
 /* { dg-final { cleanup-tree-dump "fre1" } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre7.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre7.c
index 7e67c9d..a630dfc 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre7.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre7.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 /* We can't eliminate the *p load here in any sane way, as eshup8 may 
    change it.  */
 
@@ -16,5 +16,5 @@ enormlz (x)
       eshup8 (x);
     }
 }
-/* { dg-final { scan-tree-dump-not "Eliminated:" "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-not "Eliminated:" "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre8.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre8.c
index 0dfc2b0..b6e3a09 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre8.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre8.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats -std=gnu89" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats -std=gnu89" } */
 typedef union tree_node *tree;
 struct tree_common
 {
@@ -93,5 +93,5 @@ rewrite_add_phi_arguments (basic_block bb)
 	  get_reaching_def ((get_def_from_ptr (get_phi_result_ptr (phi)))->ssa_name.var);
     }
 }
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre" } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr23455.c b/gcc/testsuite/gcc.dg/tree-ssa/pr23455.c
index 6522f99..3eee625 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/pr23455.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr23455.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 #ifdef _WIN64
 #define LONG long long
 #else
@@ -25,6 +25,6 @@ bi_windup(unsigned int *outbuf, unsigned int bi_buf)
 /* We should eliminate one load of outcnt, which will in turn let us eliminate
    one multiply of outcnt which will in turn let us eliminate
    one add involving outcnt and outbuf.  */
-/* { dg-final { scan-tree-dump-times "Eliminated: 3" 1 "pre" {target { ! avr-*-* } } } } */
-/* { dg-final { scan-tree-dump-times "Eliminated: 4" 1 "pre" {target {   avr-*-* } } } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 3" 1 "pre2" {target { ! avr-*-* } } } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 4" 1 "pre2" {target {   avr-*-* } } } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr35286.c b/gcc/testsuite/gcc.dg/tree-ssa/pr35286.c
index 8601cab..e88477c 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/pr35286.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr35286.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 int g2;
 struct A {
     int a; int b;
@@ -19,5 +19,5 @@ int foo(int a, int b)
 }
 /* We will eliminate the g1.a from the return statement as fully redundant,
    and remove one calculation of a + b. */
-/* { dg-final { scan-tree-dump-times "Eliminated: 2" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 2" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr35287.c b/gcc/testsuite/gcc.dg/tree-ssa/pr35287.c
index 1e97662..a7d266b 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/pr35287.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr35287.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 int *gp;
 int foo(int p)
 {
@@ -11,5 +11,5 @@ int foo(int p)
 }
 
 /* We will eliminate one load of gp and one indirect load of *gp. */
-/* { dg-final { scan-tree-dump-times "Eliminated: 2" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 2" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr43491.c b/gcc/testsuite/gcc.dg/tree-ssa/pr43491.c
index 44dc5f2..fea54e5 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/pr43491.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr43491.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 
 #define REGISTER register
 
@@ -37,6 +37,6 @@ long foo(long data, long v)
 }
 /* We should not eliminate global register variable when it is the RHS of
    a single assignment.  */
-/* { dg-final { scan-tree-dump-times "Eliminated: 2" 1 "pre" { target { arm*-*-* i?86-*-* mips*-*-* x86_64-*-* } } } } */
-/* { dg-final { scan-tree-dump-times "Eliminated: 3" 1 "pre" { target { ! { arm*-*-* i?86-*-* mips*-*-* x86_64-*-* } } } } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 2" 1 "pre2" { target { arm*-*-* i?86-*-* mips*-*-* x86_64-*-* } } } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 3" 1 "pre2" { target { ! { arm*-*-* i?86-*-* mips*-*-* x86_64-*-* } } } } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr47392.c b/gcc/testsuite/gcc.dg/tree-ssa/pr47392.c
index 2016136..bf056b6 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/pr47392.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr47392.c
@@ -1,5 +1,5 @@
 /* { dg-do run } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 
 struct A
 {
@@ -38,5 +38,5 @@ main ()
   return 0;
 }
 
-/* { dg-final { scan-tree-dump "Eliminated: 1" "pre" } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump "Eliminated: 1" "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-10.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-10.c
index 34217a0..fe3539f 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-10.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-10.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 
 union loc {  unsigned reg; signed offset; };
 void __frame_state_for (volatile char *state_in, int x)
@@ -22,5 +22,5 @@ void __frame_state_for (volatile char *state_in, int x)
    invariants and the volatileness of state_in prevents DSE of the
    first store.  Thus, this is XFAILed.  */
 
-/* { dg-final { scan-tree-dump "Insertions: 2" "pre" { xfail *-*-* } } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump "Insertions: 2" "pre2" { xfail *-*-* } } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-1.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-1.c
index 3bc0f5e..0734230 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-1.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-1.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 extern int printf (const char *, ...);
 int foo(int argc, char **argv)
 {
@@ -17,5 +17,5 @@ int foo(int argc, char **argv)
 }
 /* We should eliminate one evaluation of b + c along the main path,
    causing one reload. */
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-11.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-11.c
index 26c47b1..f92e2d8 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-11.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-11.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 double cos (double);
 double f(double a)
 {
@@ -17,5 +17,5 @@ double f(double a)
  return d + c;
 }
 
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-12.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-12.c
index fd80e3d..f191ab2 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-12.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-12.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 double cos (double) __attribute__ ((const));
 double sin (double) __attribute__ ((const));
 double f(double a)
@@ -23,5 +23,5 @@ double f(double a)
   return d + c;
 }
 
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-13.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-13.c
index dfce46b..69f7615 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-13.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-13.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 double cos (double) __attribute__ ((const));
 double sin (double) __attribute__ ((const));
 double f(double a)
@@ -22,5 +22,5 @@ double f(double a)
   return d + c;
 }
 
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-16.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-16.c
index b087dc1..78a0e76 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-16.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-16.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats -std=c99" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats -std=c99" } */
 int foo(int k, int *x)
 {
   int j=0;
@@ -11,5 +11,5 @@ int foo(int k, int *x)
   }  while (++j<k);
   return res;
 }
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-17.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-17.c
index d4274db..6920254 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-17.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-17.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 
 typedef union {
   int i;
@@ -14,5 +14,5 @@ int foo(U *u, int b, int i)
   return u->i;
 }
 
-/* { dg-final { scan-tree-dump "Eliminated: 1" "pre" } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump "Eliminated: 1" "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-18.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-18.c
index 5e92934..4de28b4 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-18.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-18.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-details" } */
+/* { dg-options "-O2 -fdump-tree-pre2-details" } */
 
 struct Bar { int a; int b; };
 struct Foo { int x; struct Bar y; };
@@ -17,5 +17,5 @@ int bar (int b)
   return c;
 }
 
-/* { dg-final { scan-tree-dump "Replaced foo \\(f.y\\)" "pre" } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump "Replaced foo \\(f.y\\)" "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-19.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-19.c
index 0fd0dc5..cf53f2e 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-19.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-19.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 
 struct Loc {
     int x[3];
@@ -35,5 +35,5 @@ int foo (int i, int j, int k, int b)
 }
 
 /* All three loads should be eliminated.  */
-/* { dg-final { scan-tree-dump "Eliminated: 3" "pre" } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump "Eliminated: 3" "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-2.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-2.c
index 311f127..9dcb621 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-2.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-2.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 int motion_test1(int data, int data_0, int data_3, int v)
 {
 	int i;
@@ -19,6 +19,6 @@ int motion_test1(int data, int data_0, int data_3, int v)
    main path.  We cannot re-associate v * t * u due to undefined
    signed overflow so we do not eliminate one computation of v * i along
    the main path. */
-/* { dg-final { scan-tree-dump-times "Eliminated: 2" 1 "pre" { xfail *-*-* } } } */
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre" } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 2" 1 "pre2" { xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-20.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-20.c
index 6361b67..720e050 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-20.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-20.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 
 double pcheck;
 
@@ -30,6 +30,6 @@ bb18:
 /* We should have inserted two PHI nodes and the one in the i-loop
    should have 0.0 in the argument coming from the bb18 block.  */
 
-/* { dg-final { scan-tree-dump "New PHIs: 2" "pre" } } */
-/* { dg-final { scan-tree-dump "PHI <.*0\\\.0" "pre" } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump "New PHIs: 2" "pre2" } } */
+/* { dg-final { scan-tree-dump "PHI <.*0\\\.0" "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-21.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-21.c
index 40bb421..abcbd64 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-21.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-21.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre" } */
+/* { dg-options "-O2 -fdump-tree-pre2" } */
 
 long
 NumSift (long *array, unsigned long k)
@@ -11,5 +11,5 @@ NumSift (long *array, unsigned long k)
 
 /* There should be only two loads left.  */
 
-/* { dg-final { scan-tree-dump-times "= \\\*\[^\n;\]*;" 2 "pre" { xfail { ! size32plus } } } } */ /* xfail: PR tree-optimization/58169 */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "= \\\*\[^\n;\]*;" 2 "pre2" { xfail { ! size32plus } } } } */ /* xfail: PR tree-optimization/58169 */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-22.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-22.c
index 3a1697e..190a23f 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-22.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-22.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 
 int foo (int i, int b)
 {
@@ -9,5 +9,5 @@ int foo (int i, int b)
   return j - i;
 }
 
-/* { dg-final { scan-tree-dump "Eliminated: 1" "pre" } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump "Eliminated: 1" "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-23.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-23.c
index 6aeb06a..4b840f8 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-23.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-23.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 
 struct { int x; int y; } global;
 void foo(int n)
@@ -9,5 +9,5 @@ void foo(int n)
     global.y += global.x*global.x;
 }
 
-/* { dg-final { scan-tree-dump "Eliminated: 3" "pre" } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump "Eliminated: 3" "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-24.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-24.c
index f91f4af..b967b60 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-24.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-24.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre" } */
+/* { dg-options "-O2 -fdump-tree-pre2" } */
 
 void foo(int *p, double *x, int n)
 {
@@ -11,5 +11,5 @@ void foo(int *p, double *x, int n)
 /* We should remove the unnecessary insertion of a phi-node and
    _not_ end up using the phi result for replacement *p.  */
 
-/* { dg-final { scan-tree-dump-not "= prephitmp" "pre" } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-not "= prephitmp" "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-25.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-25.c
index 32b0682..8d8e200 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-25.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-25.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 
 struct X { int i; };
 
@@ -19,5 +19,5 @@ int foo (int x)
 
 /* We should eliminate the load from p for a PHI node with values 1 and 2.  */
 
-/* { dg-final { scan-tree-dump "Eliminated: 1" "pre" } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump "Eliminated: 1" "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-27.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-27.c
index 4149bbe..d57b735 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-27.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-27.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre" } */
+/* { dg-options "-O2 -fdump-tree-pre2" } */
 
 int foo (int i, int j, int b)
 {
@@ -24,5 +24,5 @@ int foo2 (int i, int j, int b)
   return res;
 }
 
-/* { dg-final { scan-tree-dump-times "# prephitmp" 2 "pre" } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "# prephitmp" 2 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-28.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-28.c
index 55887a6..a323164 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-28.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-28.c
@@ -1,6 +1,6 @@
 /* PR37997 */
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-details" } */
+/* { dg-options "-O2 -fdump-tree-pre2-details" } */
 
 int foo (int i, int b, int result)
 {
@@ -17,5 +17,5 @@ int foo (int i, int b, int result)
 /* We should insert i + 1 into the if (b) path as well as the simplified
    i + 1 & -2 expression.  And do replacement with two PHI temps.  */
 
-/* { dg-final { scan-tree-dump-times "with prephitmp" 2 "pre" } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "with prephitmp" 2 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-29.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-29.c
index b70fa58..f13ad8a 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-29.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-29.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-details" } */
+/* { dg-options "-O2 -fdump-tree-pre2-details" } */
 
 void bark (void);
 int flag, hoist, y, z;
@@ -18,5 +18,5 @@ foo (void)
 /* We should see the partial redundancy of hoist + 4, not being confused
    about bark () possibly clobbering hoist.  */
 
-/* { dg-final { scan-tree-dump "Replaced hoist" "pre" } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump "Replaced hoist" "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-3.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-3.c
index 3925f75..a741ced 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-3.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-3.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 unsigned foo1 (unsigned a, unsigned b)
 {
   unsigned i, j, k;
@@ -11,5 +11,5 @@ unsigned foo1 (unsigned a, unsigned b)
   return j + k;
 }
 /* We should eliminate both 4*b and 4*a from the main body of the loop */
-/* { dg-final { scan-tree-dump-times "Eliminated: 2" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 2" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-30.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-30.c
index 91e0e89..57d5ce3 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-30.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-30.c
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-require-effective-target int32 } */
-/* { dg-options "-O2 -fdump-tree-pre-details" } */
+/* { dg-options "-O2 -fdump-tree-pre2-details" } */
 
 int f;
 int g;
@@ -24,5 +24,5 @@ bar (int b, int x)
 /* We should see the partial redundant loads of f even though they
    are using different types (of the same size).  */
 
-/* { dg-final { scan-tree-dump-times "Replaced MEM" 2 "pre" } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Replaced MEM" 2 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-31.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-31.c
index 2094de4..6bf8ccd 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-31.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-31.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre" } */
+/* { dg-options "-O2 -fdump-tree-pre2" } */
 
 typedef struct {
     unsigned int key;
@@ -43,5 +43,5 @@ int foo (S1 *root, int N)
   return 0;
 } 
 
-/* { dg-final { scan-tree-dump-times "key" 4 "pre" } } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "key" 4 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-4.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-4.c
index 274737a..4e5ff12 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-4.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-4.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 int foo(void)
 {
 	int x, c, y;
@@ -11,5 +11,5 @@ int foo(void)
 }
 /* We should eliminate the x+1 computation from this routine, replacing
    it with a phi of 3, 4 */
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-5.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-5.c
index d0e985f..a373857 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-5.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-5.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 int 
 foo (int i)
 {
@@ -12,6 +12,6 @@ foo (int i)
 }
 /* We should detect that a+b is the same along both edges, and replace it with
    5  */
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */
-/* { dg-final { scan-tree-dump-times "Insertions" 0 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { scan-tree-dump-times "Insertions" 0 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-6.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-6.c
index 2811f43..4437b14 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-6.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-6.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre2-stats" } */
 int foo(int x)
 {
 	int c, y;
@@ -10,5 +10,5 @@ int foo(int x)
 }
 /* We should eliminate one evaluation of x + 1 along the x = 2 path,
    causing one elimination.  */
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */
-/* { dg-final { cleanup-tree-dump "pre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre2" } } */
+/* { dg-final { cleanup-tree-dump "pre2" } } */
diff --git a/gcc/testsuite/gfortran.dg/pr43984.f90 b/gcc/testsuite/gfortran.dg/pr43984.f90
index 40c81b8..8efb7ca 100644
--- a/gcc/testsuite/gfortran.dg/pr43984.f90
+++ b/gcc/testsuite/gfortran.dg/pr43984.f90
@@ -1,5 +1,5 @@
 ! { dg-do compile }
-! { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-pre" }
+! { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-pre2" }
 module test
 
    type shell1quartet_type
@@ -52,5 +52,5 @@ end
 
 ! There should be three loads from iyz.data, not four.
 
-! { dg-final { scan-tree-dump-times "= iyz.data" 3 "pre" } }
-! { dg-final { cleanup-tree-dump "pre" } }
+! { dg-final { scan-tree-dump-times "= iyz.data" 3 "pre2" } }
+! { dg-final { cleanup-tree-dump "pre2" } }
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c
index ea99198..d9dc512 100644
--- a/gcc/tree-ssa-pre.c
+++ b/gcc/tree-ssa-pre.c
@@ -4767,6 +4767,7 @@ public:
   /* opt_pass methods: */
   virtual bool gate (function *) { return flag_tree_pre != 0; }
   virtual unsigned int execute (function *);
+  opt_pass * clone () { return new pass_pre (m_ctxt); }
 
 }; // class pass_pre
 
diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c
index 6968df6..4cb1e37 100644
--- a/gcc/tree-ssa-sccvn.c
+++ b/gcc/tree-ssa-sccvn.c
@@ -65,6 +65,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "tree-ssa-sccvn.h"
 #include "tree-cfg.h"
 #include "domwalk.h"
+#include "omp-low.h"
 
 /* This algorithm is based on the SCC algorithm presented by Keith
    Cooper and L. Taylor Simpson in "SCC-Based Value numbering"
@@ -3446,7 +3447,8 @@ visit_use (tree use)
     {
       if (gimple_code (stmt) == GIMPLE_PHI)
 	changed = visit_phi (stmt);
-      else if (gimple_has_volatile_ops (stmt))
+      else if (gimple_has_volatile_ops (stmt)
+	       || gimple_stmt_omp_data_i_init_p (stmt))
 	changed = defs_to_varying (stmt);
       else if (is_gimple_assign (stmt))
 	{
diff --git a/gcc/tree-ssa-tail-merge.c b/gcc/tree-ssa-tail-merge.c
index 303bd5e..36aa0a5 100644
--- a/gcc/tree-ssa-tail-merge.c
+++ b/gcc/tree-ssa-tail-merge.c
@@ -1668,7 +1668,8 @@ tail_merge_optimize (unsigned int todo)
   int max_iterations = PARAM_VALUE (PARAM_MAX_TAIL_MERGE_ITERATIONS);
 
   if (!flag_tree_tail_merge
-      || max_iterations == 0)
+      || max_iterations == 0
+      || (cfun->curr_properties & PROP_gimple_eomp) == 0)
     return 0;
 
   timevar_push (TV_TREE_TAIL_MERGE);
-- 
1.9.1


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