diff mbox

[8/8] Do simple omp lowering for no address taken var

Message ID 54731678.9090207@mentor.com
State New
Headers show

Commit Message

Tom de Vries Nov. 24, 2014, 11:28 a.m. UTC
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?

Comments

Richard Biener Nov. 24, 2014, 12:10 p.m. UTC | #1
On Mon, 24 Nov 2014, Tom de Vries wrote:

> 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.

That doesn't make much sense.  Why is LIM not moving the *sum load?
Ah - if n == 0 the body may not be executed and thus a hoisted load
may trap?  I suppose you rather need a loop header copying pass.

> 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?

No, I don't think you want this.

Richard.
diff mbox

Patch

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