Commit b5f34b42 by Tom de Vries Committed by Tom de Vries

Add pass_oacc_kernels pass group in passes.def

2015-11-25  Tom de Vries  <tom@codesourcery.com>

	* omp-low.c (pass_expand_omp_ssa::clone): New function.
	* passes.def: Add pass_oacc_kernels pass group.
	* tree-ssa-loop-ch.c (pass_ch::clone): New function.

	* g++.dg/tree-ssa/copyprop-1.C: Update after adding new dce1.
	* gcc.dg/pr23911.c: Same.
	* gcc.dg/tree-ssa/20030709-2.c: Same.
	* gcc.dg/tree-ssa/20030731-2.c: Same.
	* gcc.dg/tree-ssa/20040729-1.c: Same.
	* gcc.dg/tree-ssa/cfgcleanup-1.c: Same.
	* gcc.dg/tree-ssa/loop-36.c: Same.
	* gcc.dg/tree-ssa/pr21086.c: Same.
	* gcc.dg/tree-ssa/ssa-dce-1.c: Same.
	* gcc.dg/tree-ssa/ssa-dce-2.c: Same.
	* gcc.dg/vect/pr26359.c: Same.
	* c-c++-common/restrict-2.c: Update after adding new lim1.
	* c-c++-common/restrict-4.c: Same.
	* g++.dg/tree-ssa/pr33615.C: Same.
	* g++.dg/tree-ssa/restrict1.C: Same.
	* gcc.dg/tm/pub-safety-1.c: Same.
	* gcc.dg/tm/reg-promotion.c: Same.
	* gcc.dg/tree-ssa/20050314-1.c: Same.
	* gcc.dg/tree-ssa/loop-32.c: Same.
	* gcc.dg/tree-ssa/loop-33.c: Same.
	* gcc.dg/tree-ssa/loop-34.c: Same.
	* gcc.dg/tree-ssa/loop-35.c: Same.
	* gcc.dg/tree-ssa/loop-7.c: Same.
	* gcc.dg/tree-ssa/pr23109.c: Same.
	* gcc.dg/tree-ssa/restrict-3.c: Same.
	* gcc.dg/tree-ssa/restrict-5.c: Same.
	* gcc.dg/tree-ssa/ssa-lim-1.c: Same.
	* gcc.dg/tree-ssa/ssa-lim-10.c: Same.
	* gcc.dg/tree-ssa/ssa-lim-11.c: Same.
	* gcc.dg/tree-ssa/ssa-lim-12.c: Same.
	* gcc.dg/tree-ssa/ssa-lim-2.c: Same.
	* gcc.dg/tree-ssa/ssa-lim-3.c: Same.
	* gcc.dg/tree-ssa/ssa-lim-6.c: Same.
	* gcc.dg/tree-ssa/ssa-lim-7.c: Same.
	* gcc.dg/tree-ssa/ssa-lim-8.c: Same.
	* gcc.dg/tree-ssa/ssa-lim-9.c: Same.
	* gcc.dg/tree-ssa/structopt-1.c: Same.
	* gfortran.dg/pr32921.f: Same.
	* g++.dg/tree-ssa/pr19637.C: Update after adding new dom1.
	* g++.dg/tree-ssa/pr61009.C: Same.
	* g++.dg/tree-ssa/ssa-dom.C: Same.
	* gcc.dg/pr20115-1.c: Same.
	* gcc.dg/tree-prof/20050826-2.c: Same.
	* gcc.dg/tree-prof/cmpsf-1.c: Same.
	* gcc.dg/tree-ssa/20030821-1.c: Same.
	* gcc.dg/tree-ssa/20030922-2.c: Same.
	* gcc.dg/tree-ssa/20031022-1.c: Same.
	* gcc.dg/tree-ssa/20040615-1.c: Same.
	* gcc.dg/tree-ssa/20040624-1.c: Same.
	* gcc.dg/tree-ssa/pr21417.c: Same.
	* gcc.dg/tree-ssa/pr61607.c: Same.
	* gcc.dg/tree-ssa/slsr-27.c: Same.
	* gcc.dg/tree-ssa/slsr-28.c: Same.
	* gcc.dg/tree-ssa/slsr-29.c: Same.
	* gcc.dg/tree-ssa/ssa-dom-branch-1.c: Same.
	* gcc.dg/tree-ssa/ssa-dom-cse-3.c: Same.
	* gcc.dg/tree-ssa/ssa-dom-thread-1.c: Same.
	* gcc.dg/tree-ssa/ssa-dom-thread-2a.c: Same.
	* gcc.dg/tree-ssa/ssa-dom-thread-2b.c: Same.
	* gcc.dg/tree-ssa/ssa-dom-thread-2c.c: Same.
	* gcc.dg/tree-ssa/ssa-dom-thread-2d.c: Same.
	* gcc.dg/tree-ssa/ssa-dom-thread-2e.c: Same.
	* gcc.dg/tree-ssa/ssa-dom-thread-2f.c: Same.
	* gcc.dg/tree-ssa/ssa-dom-thread-4.c: Same.
	* gcc.dg/tree-ssa/ssa-dom-thread-5.c: Same.
	* gcc.dg/tree-ssa/ssa-dom-thread-6.c: Same.
	* gcc.dg/tree-ssa/ssa-dom-thread-7.c: Same.
	* gcc.dg/tree-ssa/ssa-thread-12.c: Same.
	* gcc.dg/tree-ssa/vrp47.c: Same.
	* gcc.dg/tree-ssa/copy-headers.c: Update after adding ch1.
	* gcc.dg/tree-ssa/foldconst-2.c: Same.
	* gcc.dg/tree-ssa/loop-40.c: Same.
	* gcc.dg/gomp/notify-new-function-3.c: Update after adding ompexpssa1.

From-SVN: r230907
parent 896522ee
2015-11-25 Tom de Vries <tom@codesourcery.com> 2015-11-25 Tom de Vries <tom@codesourcery.com>
* omp-low.c (pass_expand_omp_ssa::clone): New function.
* passes.def: Add pass_oacc_kernels pass group.
* tree-ssa-loop-ch.c (pass_ch::clone): New function.
2015-11-25 Tom de Vries <tom@codesourcery.com>
* tree-pass.h (make_pass_oacc_kernels, make_pass_oacc_kernels2): * tree-pass.h (make_pass_oacc_kernels, make_pass_oacc_kernels2):
Declare. Declare.
* tree-ssa-loop.c (gate_oacc_kernels): New static function. * tree-ssa-loop.c (gate_oacc_kernels): New static function.
...@@ -13363,6 +13363,7 @@ public: ...@@ -13363,6 +13363,7 @@ public:
return !(fun->curr_properties & PROP_gimple_eomp); return !(fun->curr_properties & PROP_gimple_eomp);
} }
virtual unsigned int execute (function *) { return execute_expand_omp (); } virtual unsigned int execute (function *) { return execute_expand_omp (); }
opt_pass * clone () { return new pass_expand_omp_ssa (m_ctxt); }
}; // class pass_expand_omp_ssa }; // class pass_expand_omp_ssa
......
...@@ -88,7 +88,24 @@ along with GCC; see the file COPYING3. If not see ...@@ -88,7 +88,24 @@ along with GCC; see the file COPYING3. If not see
/* pass_build_ealias is a dummy pass that ensures that we /* pass_build_ealias is a dummy pass that ensures that we
execute TODO_rebuild_alias at this point. */ execute TODO_rebuild_alias at this point. */
NEXT_PASS (pass_build_ealias); NEXT_PASS (pass_build_ealias);
/* Pass group that runs when the function is an offloaded function
containing oacc kernels loops. Part 1. */
NEXT_PASS (pass_oacc_kernels);
PUSH_INSERT_PASSES_WITHIN (pass_oacc_kernels)
NEXT_PASS (pass_ch);
POP_INSERT_PASSES ()
NEXT_PASS (pass_fre); NEXT_PASS (pass_fre);
/* Pass group that runs when the function is an offloaded function
containing oacc kernels loops. Part 2. */
NEXT_PASS (pass_oacc_kernels2);
PUSH_INSERT_PASSES_WITHIN (pass_oacc_kernels2)
/* We use pass_lim to rewrite in-memory iteration and reduction
variable accesses in loops into local variables accesses. */
NEXT_PASS (pass_lim);
NEXT_PASS (pass_dominator, false /* may_peel_loop_headers_p */);
NEXT_PASS (pass_dce);
NEXT_PASS (pass_expand_omp_ssa);
POP_INSERT_PASSES ()
NEXT_PASS (pass_merge_phi); NEXT_PASS (pass_merge_phi);
NEXT_PASS (pass_dse); NEXT_PASS (pass_dse);
NEXT_PASS (pass_cd_dce); NEXT_PASS (pass_cd_dce);
......
2015-11-25 Tom de Vries <tom@codesourcery.com>
* g++.dg/tree-ssa/copyprop-1.C: Update after adding new dce1.
* gcc.dg/pr23911.c: Same.
* gcc.dg/tree-ssa/20030709-2.c: Same.
* gcc.dg/tree-ssa/20030731-2.c: Same.
* gcc.dg/tree-ssa/20040729-1.c: Same.
* gcc.dg/tree-ssa/cfgcleanup-1.c: Same.
* gcc.dg/tree-ssa/loop-36.c: Same.
* gcc.dg/tree-ssa/pr21086.c: Same.
* gcc.dg/tree-ssa/ssa-dce-1.c: Same.
* gcc.dg/tree-ssa/ssa-dce-2.c: Same.
* gcc.dg/vect/pr26359.c: Same.
* c-c++-common/restrict-2.c: Update after adding new lim1.
* c-c++-common/restrict-4.c: Same.
* g++.dg/tree-ssa/pr33615.C: Same.
* g++.dg/tree-ssa/restrict1.C: Same.
* gcc.dg/tm/pub-safety-1.c: Same.
* gcc.dg/tm/reg-promotion.c: Same.
* gcc.dg/tree-ssa/20050314-1.c: Same.
* gcc.dg/tree-ssa/loop-32.c: Same.
* gcc.dg/tree-ssa/loop-33.c: Same.
* gcc.dg/tree-ssa/loop-34.c: Same.
* gcc.dg/tree-ssa/loop-35.c: Same.
* gcc.dg/tree-ssa/loop-7.c: Same.
* gcc.dg/tree-ssa/pr23109.c: Same.
* gcc.dg/tree-ssa/restrict-3.c: Same.
* gcc.dg/tree-ssa/restrict-5.c: Same.
* gcc.dg/tree-ssa/ssa-lim-1.c: Same.
* gcc.dg/tree-ssa/ssa-lim-10.c: Same.
* gcc.dg/tree-ssa/ssa-lim-11.c: Same.
* gcc.dg/tree-ssa/ssa-lim-12.c: Same.
* gcc.dg/tree-ssa/ssa-lim-2.c: Same.
* gcc.dg/tree-ssa/ssa-lim-3.c: Same.
* gcc.dg/tree-ssa/ssa-lim-6.c: Same.
* gcc.dg/tree-ssa/ssa-lim-7.c: Same.
* gcc.dg/tree-ssa/ssa-lim-8.c: Same.
* gcc.dg/tree-ssa/ssa-lim-9.c: Same.
* gcc.dg/tree-ssa/structopt-1.c: Same.
* gfortran.dg/pr32921.f: Same.
* g++.dg/tree-ssa/pr19637.C: Update after adding new dom1.
* g++.dg/tree-ssa/pr61009.C: Same.
* g++.dg/tree-ssa/ssa-dom.C: Same.
* gcc.dg/pr20115-1.c: Same.
* gcc.dg/tree-prof/20050826-2.c: Same.
* gcc.dg/tree-prof/cmpsf-1.c: Same.
* gcc.dg/tree-ssa/20030821-1.c: Same.
* gcc.dg/tree-ssa/20030922-2.c: Same.
* gcc.dg/tree-ssa/20031022-1.c: Same.
* gcc.dg/tree-ssa/20040615-1.c: Same.
* gcc.dg/tree-ssa/20040624-1.c: Same.
* gcc.dg/tree-ssa/pr21417.c: Same.
* gcc.dg/tree-ssa/pr61607.c: Same.
* gcc.dg/tree-ssa/slsr-27.c: Same.
* gcc.dg/tree-ssa/slsr-28.c: Same.
* gcc.dg/tree-ssa/slsr-29.c: Same.
* gcc.dg/tree-ssa/ssa-dom-branch-1.c: Same.
* gcc.dg/tree-ssa/ssa-dom-cse-3.c: Same.
* gcc.dg/tree-ssa/ssa-dom-thread-1.c: Same.
* gcc.dg/tree-ssa/ssa-dom-thread-2a.c: Same.
* gcc.dg/tree-ssa/ssa-dom-thread-2b.c: Same.
* gcc.dg/tree-ssa/ssa-dom-thread-2c.c: Same.
* gcc.dg/tree-ssa/ssa-dom-thread-2d.c: Same.
* gcc.dg/tree-ssa/ssa-dom-thread-2e.c: Same.
* gcc.dg/tree-ssa/ssa-dom-thread-2f.c: Same.
* gcc.dg/tree-ssa/ssa-dom-thread-4.c: Same.
* gcc.dg/tree-ssa/ssa-dom-thread-5.c: Same.
* gcc.dg/tree-ssa/ssa-dom-thread-6.c: Same.
* gcc.dg/tree-ssa/ssa-dom-thread-7.c: Same.
* gcc.dg/tree-ssa/ssa-thread-12.c: Same.
* gcc.dg/tree-ssa/vrp47.c: Same.
* gcc.dg/tree-ssa/copy-headers.c: Update after adding ch1.
* gcc.dg/tree-ssa/foldconst-2.c: Same.
* gcc.dg/tree-ssa/loop-40.c: Same.
* gcc.dg/gomp/notify-new-function-3.c: Update after adding ompexpssa1.
2015-11-25 Paolo Carlini <paolo.carlini@oracle.com> 2015-11-25 Paolo Carlini <paolo.carlini@oracle.com>
* g++.dg/cpp0x/constexpr-array13.C: Fix. * g++.dg/cpp0x/constexpr-array13.C: Fix.
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O -fno-strict-aliasing -fdump-tree-lim1-details" } */ /* { dg-options "-O -fno-strict-aliasing -fdump-tree-lim2-details" } */
void foo (float * __restrict__ a, float * __restrict__ b, int n, int j) void foo (float * __restrict__ a, float * __restrict__ b, int n, int j)
{ {
...@@ -10,4 +10,4 @@ void foo (float * __restrict__ a, float * __restrict__ b, int n, int j) ...@@ -10,4 +10,4 @@ void foo (float * __restrict__ a, float * __restrict__ b, int n, int j)
/* We should move the RHS of the store out of the loop. */ /* We should move the RHS of the store out of the loop. */
/* { dg-final { scan-tree-dump-times "Moving statement" 11 "lim1" } } */ /* { dg-final { scan-tree-dump-times "Moving statement" 11 "lim2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-lim1-details" } */ /* { dg-options "-O2 -fdump-tree-lim2-details" } */
struct Foo struct Foo
{ {
...@@ -15,4 +15,4 @@ void bar(struct Foo f, int * __restrict__ q) ...@@ -15,4 +15,4 @@ void bar(struct Foo f, int * __restrict__ q)
} }
} }
/* { dg-final { scan-tree-dump "Executing store motion" "lim1" } } */ /* { dg-final { scan-tree-dump "Executing store motion" "lim2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O -fdump-tree-dce2" } */ /* { dg-options "-O -fdump-tree-dce3" } */
/* Verify that we can eliminate the useless conversions to/from /* Verify that we can eliminate the useless conversions to/from
const qualified pointer types const qualified pointer types
...@@ -27,4 +27,4 @@ int foo(Object&o) ...@@ -27,4 +27,4 @@ int foo(Object&o)
/* Remaining should be two loads. */ /* Remaining should be two loads. */
/* { dg-final { scan-tree-dump-times " = \[^\n\]*;" 2 "dce2" } } */ /* { dg-final { scan-tree-dump-times " = \[^\n\]*;" 2 "dce3" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fno-ipa-icf -fdump-tree-dom1" } */ /* { dg-options "-O2 -fno-ipa-icf -fdump-tree-dom2" } */
#include <new> #include <new>
...@@ -29,4 +29,4 @@ int foo_void_offset(void) ...@@ -29,4 +29,4 @@ int foo_void_offset(void)
return reinterpret_cast<Foo *>(&i[0])->i[0]; return reinterpret_cast<Foo *>(&i[0])->i[0];
} }
/* { dg-final { scan-tree-dump-times "return 1;" 3 "dom1" } } */ /* { dg-final { scan-tree-dump-times "return 1;" 3 "dom2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O -fnon-call-exceptions -fdump-tree-lim1-details -w" } */ /* { dg-options "-O -fnon-call-exceptions -fdump-tree-lim2-details -w" } */
extern volatile int y; extern volatile int y;
...@@ -16,4 +16,4 @@ foo (double a, int x) ...@@ -16,4 +16,4 @@ foo (double a, int x)
// The expression 1.0 / 0.0 should not be treated as a loop invariant // The expression 1.0 / 0.0 should not be treated as a loop invariant
// if it may throw an exception. // if it may throw an exception.
// { dg-final { scan-tree-dump-times "invariant up to" 0 "lim1" } } // { dg-final { scan-tree-dump-times "invariant up to" 0 "lim2" } }
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fno-tree-vrp -std=c++11 -fno-strict-aliasing -fdump-tree-dom1" } */ /* { dg-options "-O2 -fno-tree-vrp -std=c++11 -fno-strict-aliasing -fdump-tree-dom2" } */
#include <stdio.h> #include <stdio.h>
struct Field { struct Field {
...@@ -49,4 +49,4 @@ bool Test(void) { ...@@ -49,4 +49,4 @@ bool Test(void) {
// The block ending with cmp == 0 should not be threaded. ie, // The block ending with cmp == 0 should not be threaded. ie,
// there should be a single == 0 comparison in the dump file. // there should be a single == 0 comparison in the dump file.
// { dg-final { scan-tree-dump-times "== 0" 1 "dom1" } } // { dg-final { scan-tree-dump-times "== 0" 1 "dom2" } }
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-lim1-details" } */ /* { dg-options "-O2 -fdump-tree-lim2-details" } */
struct Foo struct Foo
{ {
...@@ -16,4 +16,4 @@ void bar(Foo f, int * __restrict__ q) ...@@ -16,4 +16,4 @@ void bar(Foo f, int * __restrict__ q)
} }
} }
/* { dg-final { scan-tree-dump "Executing store motion" "lim1" } } */ /* { dg-final { scan-tree-dump "Executing store motion" "lim2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-dom1" } */ /* { dg-options "-O2 -fdump-tree-dom2" } */
typedef long unsigned int size_t; typedef long unsigned int size_t;
extern void abort (void) __attribute__ ((__noreturn__)); extern void abort (void) __attribute__ ((__noreturn__));
...@@ -99,5 +99,5 @@ gimple_return_set_retval (gimple gs, tree retval) ...@@ -99,5 +99,5 @@ gimple_return_set_retval (gimple gs, tree retval)
abort (); abort ();
gimple_set_op (gs, 0, retval); gimple_set_op (gs, 0, retval);
} }
/* { dg-final { scan-tree-dump-times "gss_for_code_.10." 1 "dom1"} } */ /* { dg-final { scan-tree-dump-times "gss_for_code_.10." 1 "dom2"} } */
...@@ -11,4 +11,4 @@ foo (int *__restrict a, int *__restrict b, int *__restrict c) ...@@ -11,4 +11,4 @@ foo (int *__restrict a, int *__restrict b, int *__restrict c)
/* Check for new function notification in ompexpssa dump. */ /* Check for new function notification in ompexpssa dump. */
/* { dg-final { scan-tree-dump-times "Added new ssa gimple function foo\\.\[\\\$_\]loopfn\\.0 to callgraph" 1 "ompexpssa" } } */ /* { dg-final { scan-tree-dump-times "Added new ssa gimple function foo\\.\[\\\$_\]loopfn\\.0 to callgraph" 1 "ompexpssa2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-dom1" } */ /* { dg-options "-O2 -fdump-tree-dom2" } */
extern int foo (void) __attribute__((pure)); extern int foo (void) __attribute__((pure));
...@@ -11,4 +11,4 @@ int bar() ...@@ -11,4 +11,4 @@ int bar()
} }
/* Check that we only have one call to foo. */ /* Check that we only have one call to foo. */
/* { dg-final { scan-tree-dump-times "foo" 1 "dom1" } } */ /* { dg-final { scan-tree-dump-times "foo" 1 "dom2" } } */
/* This was a missed optimization in tree constant propagation /* This was a missed optimization in tree constant propagation
that CSE would catch later on. */ that CSE would catch later on. */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O -fdump-tree-dce2" } */ /* { dg-options "-O -fdump-tree-dce3" } */
double _Complex *a; double _Complex *a;
static const double _Complex b[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; static const double _Complex b[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
...@@ -16,5 +16,5 @@ test (void) ...@@ -16,5 +16,5 @@ test (void)
/* After DCE2 which runs after FRE, the expressions should be fully /* After DCE2 which runs after FRE, the expressions should be fully
constant folded. There should be no loads from b left. */ constant folded. There should be no loads from b left. */
/* { dg-final { scan-tree-dump-times "__complex__ \\\(1.0e\\\+0, 0.0\\\)" 2 "dce2" } } */ /* { dg-final { scan-tree-dump-times "__complex__ \\\(1.0e\\\+0, 0.0\\\)" 2 "dce3" } } */
/* { dg-final { scan-tree-dump-times "= b" 0 "dce2" } } */ /* { dg-final { scan-tree-dump-times "= b" 0 "dce3" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-fgnu-tm -O1 -fdump-tree-lim1" } */ /* { dg-options "-fgnu-tm -O1 -fdump-tree-lim2" } */
/* Test that thread visible loads do not get hoisted out of loops if /* Test that thread visible loads do not get hoisted out of loops if
the load would not have occurred on each path out of the loop. */ the load would not have occurred on each path out of the loop. */
...@@ -20,4 +20,4 @@ void reader() ...@@ -20,4 +20,4 @@ void reader()
} }
} }
/* { dg-final { scan-tree-dump-times "Cannot hoist.*DATA_DATA because it is in a transaction" 1 "lim1" } } */ /* { dg-final { scan-tree-dump-times "Cannot hoist.*DATA_DATA because it is in a transaction" 1 "lim2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-fgnu-tm -O2 -fdump-tree-lim1" } */ /* { dg-options "-fgnu-tm -O2 -fdump-tree-lim2" } */
/* Test that `count' is not written to unless p->data>0. */ /* Test that `count' is not written to unless p->data>0. */
...@@ -20,4 +20,4 @@ void func() ...@@ -20,4 +20,4 @@ void func()
} }
} }
/* { dg-final { scan-tree-dump-times "Cannot hoist conditional load of count because it is in a transaction" 1 "lim1" } } */ /* { dg-final { scan-tree-dump-times "Cannot hoist conditional load of count because it is in a transaction" 1 "lim2" } } */
/* Testcase derived from gcc.c-torture/execute 20050826-2.c /* Testcase derived from gcc.c-torture/execute 20050826-2.c
which showed jump threading profile insanities. */ which showed jump threading profile insanities. */
/* { dg-options "-Ofast -fdump-tree-dom1-all" } */ /* { dg-options "-Ofast -fdump-tree-dom2-all" } */
struct rtattr struct rtattr
{ {
...@@ -72,4 +72,4 @@ main (void) ...@@ -72,4 +72,4 @@ main (void)
return 0; return 0;
} }
/* { dg-final-use { scan-tree-dump-not "Invalid sum" "dom1"} } */ /* { dg-final-use { scan-tree-dump-not "Invalid sum" "dom2"} } */
/* Testcase derived from gcc.c-torture/execute cmpsf-1.c /* Testcase derived from gcc.c-torture/execute cmpsf-1.c
which showed jump threading profile insanities. */ which showed jump threading profile insanities. */
/* { dg-options "-Ofast -fdump-tree-dom1-all" } */ /* { dg-options "-Ofast -fdump-tree-dom2-all" } */
#include <limits.h> #include <limits.h>
...@@ -181,4 +181,4 @@ main (void) ...@@ -181,4 +181,4 @@ main (void)
exit (0); exit (0);
} }
/* { dg-final-use { scan-tree-dump-not "Invalid sum" "dom1"} } */ /* { dg-final-use { scan-tree-dump-not "Invalid sum" "dom2"} } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O -fdump-tree-dce2" } */ /* { dg-options "-O -fdump-tree-dce3" } */
struct rtx_def; struct rtx_def;
typedef struct rtx_def *rtx; typedef struct rtx_def *rtx;
...@@ -42,13 +42,13 @@ get_alias_set (t) ...@@ -42,13 +42,13 @@ get_alias_set (t)
/* There should be precisely one load of ->decl.rtl. If there is /* There should be precisely one load of ->decl.rtl. If there is
more than, then the dominator optimizations failed. */ more than, then the dominator optimizations failed. */
/* { dg-final { scan-tree-dump-times "->decl\\.rtl" 1 "dce2"} } */ /* { dg-final { scan-tree-dump-times "->decl\\.rtl" 1 "dce3"} } */
/* There should be no loads of .rtmem since the complex return statement /* There should be no loads of .rtmem since the complex return statement
is just "return 0". */ is just "return 0". */
/* { dg-final { scan-tree-dump-times ".rtmem" 0 "dce2"} } */ /* { dg-final { scan-tree-dump-times ".rtmem" 0 "dce3"} } */
/* There should be one IF statement (the complex return statement should /* There should be one IF statement (the complex return statement should
collapse down to a simple return 0 without any conditionals). */ collapse down to a simple return 0 without any conditionals). */
/* { dg-final { scan-tree-dump-times "if " 1 "dce2"} } */ /* { dg-final { scan-tree-dump-times "if " 1 "dce3"} } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-dce1" } */ /* { dg-options "-O2 -fdump-tree-dce2" } */
void foo (void); void foo (void);
...@@ -15,4 +15,4 @@ bar (int i, int partial, int args_addr) ...@@ -15,4 +15,4 @@ bar (int i, int partial, int args_addr)
/* There should be only one IF conditional since the first does nothing /* There should be only one IF conditional since the first does nothing
useful. */ useful. */
/* { dg-final { scan-tree-dump-times "if " 1 "dce1"} } */ /* { dg-final { scan-tree-dump-times "if " 1 "dce2"} } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom1 -fdump-tree-optimized" } */ /* { dg-options "-O1 -fdump-tree-dom2 -fdump-tree-optimized" } */
void dont_remove (void); void dont_remove (void);
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom1 -fdisable-tree-ifcombine" } */ /* { dg-options "-O1 -fdump-tree-dom2 -fdisable-tree-ifcombine" } */
struct rtx_def; struct rtx_def;
typedef struct rtx_def *rtx; typedef struct rtx_def *rtx;
...@@ -24,4 +24,4 @@ rgn_rank (rtx insn1, rtx insn2) ...@@ -24,4 +24,4 @@ rgn_rank (rtx insn1, rtx insn2)
SSA name to record as a copy of the other when DOM derives copies SSA name to record as a copy of the other when DOM derives copies
from temporary equivalences. The heuristics there no longer do from temporary equivalences. The heuristics there no longer do
the correct thing. VRP still optimizes this testcase. */ the correct thing. VRP still optimizes this testcase. */
/* { dg-final { scan-tree-dump-times "if " 2 "dom1" { xfail *-*-* } } } */ /* { dg-final { scan-tree-dump-times "if " 2 "dom2" { xfail *-*-* } } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom1" } */ /* { dg-options "-O1 -fdump-tree-dom2" } */
typedef struct edge_def typedef struct edge_def
{ {
...@@ -26,4 +26,4 @@ blah (int arf) ...@@ -26,4 +26,4 @@ blah (int arf)
} }
/* There should be one load from entry_exit_blocks[1].pred. */ /* There should be one load from entry_exit_blocks[1].pred. */
/* { dg-final { scan-tree-dump-times "entry_exit_blocks.1..pred" 1 "dom1"} } */ /* { dg-final { scan-tree-dump-times "entry_exit_blocks.1..pred" 1 "dom2"} } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom1" } */ /* { dg-options "-O1 -fdump-tree-dom2" } */
void bar1 (void); void bar1 (void);
void bar2 (void); void bar2 (void);
...@@ -13,4 +13,4 @@ foo (unsigned int a, unsigned int b) ...@@ -13,4 +13,4 @@ foo (unsigned int a, unsigned int b)
bar2 (); bar2 ();
} }
/* { dg-final { scan-tree-dump-times "bar2" 0 "dom1" } } */ /* { dg-final { scan-tree-dump-times "bar2" 0 "dom2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom1" } */ /* { dg-options "-O1 -fdump-tree-dom2" } */
void bar1 (void); void bar1 (void);
void bar2 (void); void bar2 (void);
...@@ -17,4 +17,4 @@ foo (unsigned int a, unsigned int b) ...@@ -17,4 +17,4 @@ foo (unsigned int a, unsigned int b)
true (to reach the second condition we know a < b via the first true (to reach the second condition we know a < b via the first
conditional. */ conditional. */
/* { dg-final { scan-tree-dump-times "if " 1 "dom1" } } */ /* { dg-final { scan-tree-dump-times "if " 1 "dom2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dce2" } */ /* { dg-options "-O1 -fdump-tree-dce3" } */
int int
foo () foo ()
...@@ -16,4 +16,4 @@ foo () ...@@ -16,4 +16,4 @@ foo ()
compiler was mistakenly thinking that the statement had volatile compiler was mistakenly thinking that the statement had volatile
operands. But 'p' itself is not volatile and taking the address of operands. But 'p' itself is not volatile and taking the address of
a volatile does not constitute a volatile operand. */ a volatile does not constitute a volatile operand. */
/* { dg-final { scan-tree-dump-times "&x" 0 "dce2"} } */ /* { dg-final { scan-tree-dump-times "&x" 0 "dce3"} } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-lim1-details --param allow-store-data-races=1" } */ /* { dg-options "-O1 -fdump-tree-lim2-details --param allow-store-data-races=1" } */
float a[100]; float a[100];
...@@ -17,4 +17,4 @@ void xxx (void) ...@@ -17,4 +17,4 @@ void xxx (void)
/* Store motion may be applied to the assignment to a[k], since sinf /* Store motion may be applied to the assignment to a[k], since sinf
cannot read nor write the memory. */ cannot read nor write the memory. */
/* { dg-final { scan-tree-dump-times "Moving statement" 1 "lim1" } } */ /* { dg-final { scan-tree-dump-times "Moving statement" 1 "lim2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-dce1" } */ /* { dg-options "-O2 -fdump-tree-dce2" } */
void void
cleanup (int a, int b) cleanup (int a, int b)
{ {
...@@ -15,4 +15,4 @@ cleanup (int a, int b) ...@@ -15,4 +15,4 @@ cleanup (int a, int b)
return; return;
} }
/* Dce should get rid of the initializers and cfgcleanup should elliminate ifs */ /* Dce should get rid of the initializers and cfgcleanup should elliminate ifs */
/* { dg-final { scan-tree-dump-times "if " 0 "dce1"} } */ /* { dg-final { scan-tree-dump-times "if " 0 "dce2"} } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-ch-details" } */ /* { dg-options "-O2 -fdump-tree-ch2-details" } */
extern int foo (int); extern int foo (int);
...@@ -12,4 +12,4 @@ void bla (void) ...@@ -12,4 +12,4 @@ void bla (void)
} }
/* There should be a header duplicated. */ /* There should be a header duplicated. */
/* { dg-final { scan-tree-dump-times "Duplicating header" 1 "ch"} } */ /* { dg-final { scan-tree-dump-times "Duplicating header" 1 "ch2"} } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-ch" } */ /* { dg-options "-O2 -fdump-tree-ch2" } */
typedef union tree_node *tree; typedef union tree_node *tree;
enum tree_code enum tree_code
{ {
...@@ -56,4 +56,4 @@ emit_support_tinfos (void) ...@@ -56,4 +56,4 @@ emit_support_tinfos (void)
} }
/* We should copy loop header to fundamentals[0] and then fold it way into /* We should copy loop header to fundamentals[0] and then fold it way into
known value. */ known value. */
/* { dg-final { scan-tree-dump-not "fundamentals.0" "ch"} } */ /* { dg-final { scan-tree-dump-not "fundamentals.0" "ch2"} } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-lim1-details" } */ /* { dg-options "-O2 -fdump-tree-lim2-details" } */
int x; int x;
int a[100]; int a[100];
...@@ -42,4 +42,4 @@ void test3(struct a *A) ...@@ -42,4 +42,4 @@ void test3(struct a *A)
} }
} }
/* { dg-final { scan-tree-dump-times "Executing store motion of" 3 "lim1" } } */ /* { dg-final { scan-tree-dump-times "Executing store motion of" 3 "lim2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-lim1-details" } */ /* { dg-options "-O2 -fdump-tree-lim2-details" } */
int x; int x;
int a[100]; int a[100];
...@@ -36,4 +36,4 @@ void test5(struct a *A, unsigned b) ...@@ -36,4 +36,4 @@ void test5(struct a *A, unsigned b)
} }
} }
/* { dg-final { scan-tree-dump-times "Executing store motion of" 4 "lim1" { xfail { lp64 || llp64 } } } } */ /* { dg-final { scan-tree-dump-times "Executing store motion of" 4 "lim2" { xfail { lp64 || llp64 } } } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-lim1-details" } */ /* { dg-options "-O2 -fdump-tree-lim2-details" } */
int r[6]; int r[6];
...@@ -17,4 +17,4 @@ void f (int n) ...@@ -17,4 +17,4 @@ void f (int n)
} }
/* { dg-final { scan-tree-dump-times "Executing store motion of r" 6 "lim1" } } */ /* { dg-final { scan-tree-dump-times "Executing store motion of r" 6 "lim2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-lim1-details" } */ /* { dg-options "-O2 -fdump-tree-lim2-details" } */
int x; int x;
int a[100]; int a[100];
...@@ -67,5 +67,5 @@ void test4(struct a *A, unsigned LONG b) ...@@ -67,5 +67,5 @@ void test4(struct a *A, unsigned LONG b)
} }
} }
/* long index not hoisted for avr target PR 36561 */ /* long index not hoisted for avr target PR 36561 */
/* { dg-final { scan-tree-dump-times "Executing store motion of" 8 "lim1" { xfail { "avr-*-*" } } } } */ /* { dg-final { scan-tree-dump-times "Executing store motion of" 8 "lim2" { xfail { "avr-*-*" } } } } */
/* { dg-final { scan-tree-dump-times "Executing store motion of" 6 "lim1" { target { "avr-*-*" } } } } */ /* { dg-final { scan-tree-dump-times "Executing store motion of" 6 "lim2" { target { "avr-*-*" } } } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-dce2" } */ /* { dg-options "-O2 -fdump-tree-dce3" } */
struct X { float array[2]; }; struct X { float array[2]; };
...@@ -18,4 +18,4 @@ float foobar () { ...@@ -18,4 +18,4 @@ float foobar () {
/* The temporary structure should have been promoted to registers /* The temporary structure should have been promoted to registers
by FRE after the loops have been unrolled by the early unrolling pass. */ by FRE after the loops have been unrolled by the early unrolling pass. */
/* { dg-final { scan-tree-dump-not "c\.array" "dce2" } } */ /* { dg-final { scan-tree-dump-not "c\.array" "dce3" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-ch-details" } */ /* { dg-options "-O2 -fdump-tree-ch2-details" } */
int mymax2(int *it, int *end) int mymax2(int *it, int *end)
{ {
...@@ -10,4 +10,4 @@ int mymax2(int *it, int *end) ...@@ -10,4 +10,4 @@ int mymax2(int *it, int *end)
return max; return max;
} }
/* { dg-final { scan-tree-dump "Duplicating header" "ch" } } */ /* { dg-final { scan-tree-dump "Duplicating header" "ch2" } } */
/* PR tree-optimization/19828 */ /* PR tree-optimization/19828 */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-lim1-details" } */ /* { dg-options "-O1 -fdump-tree-lim2-details" } */
int cst_fun1 (int) __attribute__((__const__)); int cst_fun1 (int) __attribute__((__const__));
int cst_fun2 (int) __attribute__((__const__)); int cst_fun2 (int) __attribute__((__const__));
...@@ -31,4 +31,4 @@ int xxx (void) ...@@ -31,4 +31,4 @@ int xxx (void)
Calls to cst_fun2 and pure_fun2 should not be, since calling Calls to cst_fun2 and pure_fun2 should not be, since calling
with k = 0 may be invalid. */ with k = 0 may be invalid. */
/* { dg-final { scan-tree-dump-times "Moving statement" 2 "lim1" } } */ /* { dg-final { scan-tree-dump-times "Moving statement" 2 "lim2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-vrp1 -fdump-tree-dce1 -fdelete-null-pointer-checks" } */ /* { dg-options "-O2 -fdump-tree-vrp1 -fdump-tree-dce2 -fdelete-null-pointer-checks" } */
int int
foo (int *p) foo (int *p)
...@@ -18,5 +18,5 @@ foo (int *p) ...@@ -18,5 +18,5 @@ foo (int *p)
/* Target disabling -fdelete-null-pointer-checks should not fold checks */ /* Target disabling -fdelete-null-pointer-checks should not fold checks */
/* { dg-final { scan-tree-dump "Folding predicate " "vrp1" { target { ! keeps_null_pointer_checks } } } } */ /* { dg-final { scan-tree-dump "Folding predicate " "vrp1" { target { ! keeps_null_pointer_checks } } } } */
/* { dg-final { scan-tree-dump-times "Folding predicate " 0 "vrp1" { target { keeps_null_pointer_checks } } } } */ /* { dg-final { scan-tree-dump-times "Folding predicate " 0 "vrp1" { target { keeps_null_pointer_checks } } } } */
/* { dg-final { scan-tree-dump-not "b_. =" "dce1" { target { ! avr-*-* } } } } */ /* { dg-final { scan-tree-dump-not "b_. =" "dce2" { target { ! avr-*-* } } } } */
/* { dg-final { scan-tree-dump "b_. =" "dce1" { target { avr-*-* } } } } */ /* { dg-final { scan-tree-dump "b_. =" "dce2" { target { avr-*-* } } } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-dom2-details" } */ /* { dg-options "-O2 -fdump-tree-dom3-details" } */
struct tree_common struct tree_common
{ {
...@@ -49,5 +49,5 @@ L23: ...@@ -49,5 +49,5 @@ L23:
/* We should thread the backedge to the top of the loop; ie we only /* We should thread the backedge to the top of the loop; ie we only
execute the if (expr->common.code != 142) test once per loop execute the if (expr->common.code != 142) test once per loop
iteration. */ iteration. */
/* { dg-final { scan-tree-dump-times "FSM jump thread" 1 "dom2" } } */ /* { dg-final { scan-tree-dump-times "FSM jump thread" 1 "dom3" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -funsafe-math-optimizations -ftrapping-math -fdump-tree-recip -fdump-tree-lim1" } */ /* { dg-options "-O2 -funsafe-math-optimizations -ftrapping-math -fdump-tree-recip -fdump-tree-lim2" } */
/* { dg-warning "-fassociative-math disabled" "" { target *-*-* } 1 } */ /* { dg-warning "-fassociative-math disabled" "" { target *-*-* } 1 } */
double F[2] = { 0., 0. }, e = 0.; double F[2] = { 0., 0. }, e = 0.;
...@@ -29,6 +29,6 @@ int main() ...@@ -29,6 +29,6 @@ int main()
/* LIM only performs the transformation in the no-trapping-math case. In /* LIM only performs the transformation in the no-trapping-math case. In
the future we will do it for trapping-math as well in recip, check that the future we will do it for trapping-math as well in recip, check that
this is not wrongly optimized. */ this is not wrongly optimized. */
/* { dg-final { scan-tree-dump-not "reciptmp" "lim1" } } */ /* { dg-final { scan-tree-dump-not "reciptmp" "lim2" } } */
/* { dg-final { scan-tree-dump-not "reciptmp" "recip" } } */ /* { dg-final { scan-tree-dump-not "reciptmp" "recip" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-Os -fno-tree-fre -fdump-tree-dom1" } */ /* { dg-options "-Os -fno-tree-fre -fdump-tree-dom2" } */
void foo(int *); void foo(int *);
void f2(int dst[3], int R) void f2(int dst[3], int R)
...@@ -23,6 +23,6 @@ void f2(int dst[3], int R) ...@@ -23,6 +23,6 @@ void f2(int dst[3], int R)
/* There should be precisely two conditionals. One for the loop condition /* There should be precisely two conditionals. One for the loop condition
and one for the test after the loop. Previously we failed to eliminate and one for the test after the loop. Previously we failed to eliminate
the second conditional after the loop. */ the second conditional after the loop. */
/* { dg-final { scan-tree-dump-times "if" 2 "dom1"} } */ /* { dg-final { scan-tree-dump-times "if" 2 "dom2"} } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O -fno-strict-aliasing -fdump-tree-lim1-details" } */ /* { dg-options "-O -fno-strict-aliasing -fdump-tree-lim2-details" } */
void f(int * __restrict__ r, void f(int * __restrict__ r,
int a[__restrict__ 16][16], int a[__restrict__ 16][16],
...@@ -14,4 +14,4 @@ void f(int * __restrict__ r, ...@@ -14,4 +14,4 @@ void f(int * __restrict__ r,
/* We should apply store motion to the store to *r. */ /* We should apply store motion to the store to *r. */
/* { dg-final { scan-tree-dump "Executing store motion of \\\*r" "lim1" } } */ /* { dg-final { scan-tree-dump "Executing store motion of \\\*r" "lim2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O -fno-strict-aliasing -fdump-tree-lim1-details" } */ /* { dg-options "-O -fno-strict-aliasing -fdump-tree-lim2-details" } */
static inline __attribute__((always_inline)) static inline __attribute__((always_inline))
void f(int * __restrict__ r, void f(int * __restrict__ r,
...@@ -20,4 +20,4 @@ void g(int *r, int a[16][16], int b[16][16], int i, int j) ...@@ -20,4 +20,4 @@ void g(int *r, int a[16][16], int b[16][16], int i, int j)
/* We should apply store motion to the store to *r. */ /* We should apply store motion to the store to *r. */
/* { dg-final { scan-tree-dump "Executing store motion of \\\*r" "lim1" } } */ /* { dg-final { scan-tree-dump "Executing store motion of \\\*r" "lim2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-dom2" } */ /* { dg-options "-O2 -fdump-tree-dom3" } */
struct x struct x
{ {
...@@ -16,7 +16,7 @@ f (struct x *p, unsigned int n) ...@@ -16,7 +16,7 @@ f (struct x *p, unsigned int n)
foo (p->a[n], p->c[n], p->b[n]); foo (p->a[n], p->c[n], p->b[n]);
} }
/* { dg-final { scan-tree-dump-times "\\* 4;" 1 "dom2" { target { int32 } } } } */ /* { dg-final { scan-tree-dump-times "\\* 4;" 1 "dom3" { target { int32 } } } } */
/* { dg-final { scan-tree-dump-times "\\* 2;" 1 "dom2" { target { int16 } } } } */ /* { dg-final { scan-tree-dump-times "\\* 2;" 1 "dom3" { target { int16 } } } } */
/* { dg-final { scan-tree-dump-times "p_\\d\+\\(D\\) \\+ \[^\r\n\]*_\\d\+;" 1 "dom2" } } */ /* { dg-final { scan-tree-dump-times "p_\\d\+\\(D\\) \\+ \[^\r\n\]*_\\d\+;" 1 "dom3" } } */
/* { dg-final { scan-tree-dump-times "MEM\\\[\\(struct x \\*\\)\[^\r\n\]*_\\d\+" 3 "dom2" } } */ /* { dg-final { scan-tree-dump-times "MEM\\\[\\(struct x \\*\\)\[^\r\n\]*_\\d\+" 3 "dom3" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-dom2" } */ /* { dg-options "-O2 -fdump-tree-dom3" } */
struct x struct x
{ {
...@@ -20,7 +20,7 @@ f (struct x *p, unsigned int n) ...@@ -20,7 +20,7 @@ f (struct x *p, unsigned int n)
foo (p->b[n], p->a[n], p->c[n]); foo (p->b[n], p->a[n], p->c[n]);
} }
/* { dg-final { scan-tree-dump-times "\\* 4;" 1 "dom2" { target { int32 } } } } */ /* { dg-final { scan-tree-dump-times "\\* 4;" 1 "dom3" { target { int32 } } } } */
/* { dg-final { scan-tree-dump-times "\\* 2;" 1 "dom2" { target { int16 } } } } */ /* { dg-final { scan-tree-dump-times "\\* 2;" 1 "dom3" { target { int16 } } } } */
/* { dg-final { scan-tree-dump-times "p_\\d\+\\(D\\) \\+ \[^\r\n\]*_\\d\+" 1 "dom2" } } */ /* { dg-final { scan-tree-dump-times "p_\\d\+\\(D\\) \\+ \[^\r\n\]*_\\d\+" 1 "dom3" } } */
/* { dg-final { scan-tree-dump-times "MEM\\\[\\(struct x \\*\\)\[^\r\n\]*_\\d\+" 9 "dom2" } } */ /* { dg-final { scan-tree-dump-times "MEM\\\[\\(struct x \\*\\)\[^\r\n\]*_\\d\+" 9 "dom3" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-dom2" } */ /* { dg-options "-O2 -fdump-tree-dom3" } */
struct x struct x
{ {
...@@ -22,7 +22,7 @@ f (struct x *p, unsigned int n) ...@@ -22,7 +22,7 @@ f (struct x *p, unsigned int n)
} }
} }
/* { dg-final { scan-tree-dump-times "\\* 4;" 1 "dom2" { target { int32 } } } } */ /* { dg-final { scan-tree-dump-times "\\* 4;" 1 "dom3" { target { int32 } } } } */
/* { dg-final { scan-tree-dump-times "\\* 2;" 1 "dom2" { target { int16 } } } } */ /* { dg-final { scan-tree-dump-times "\\* 2;" 1 "dom3" { target { int16 } } } } */
/* { dg-final { scan-tree-dump-times "p_\\d\+\\(D\\) \\+ \[^\r\n\]*_\\d\+" 1 "dom2" } } */ /* { dg-final { scan-tree-dump-times "p_\\d\+\\(D\\) \\+ \[^\r\n\]*_\\d\+" 1 "dom3" } } */
/* { dg-final { scan-tree-dump-times "MEM\\\[\\(struct x \\*\\)\[^\r\n\]*_\\d\+" 9 "dom2" } } */ /* { dg-final { scan-tree-dump-times "MEM\\\[\\(struct x \\*\\)\[^\r\n\]*_\\d\+" 9 "dom3" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dce2" } */ /* { dg-options "-O1 -fdump-tree-dce3" } */
int t() __attribute__ ((const)); int t() __attribute__ ((const));
void void
...@@ -10,4 +10,4 @@ q() ...@@ -10,4 +10,4 @@ q()
i = t(); i = t();
} }
/* There should be no IF conditionals. */ /* There should be no IF conditionals. */
/* { dg-final { scan-tree-dump-times "if " 0 "dce2"} } */ /* { dg-final { scan-tree-dump-times "if " 0 "dce3"} } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-dce2" } */ /* { dg-options "-O2 -fdump-tree-dce3" } */
/* We should notice constantness of this function. */ /* We should notice constantness of this function. */
static int __attribute__((noinline)) t(int a) static int __attribute__((noinline)) t(int a)
...@@ -13,4 +13,4 @@ void q(void) ...@@ -13,4 +13,4 @@ void q(void)
i = t(1); i = t(1);
} }
/* There should be no IF conditionals. */ /* There should be no IF conditionals. */
/* { dg-final { scan-tree-dump-times "if " 0 "dce2"} } */ /* { dg-final { scan-tree-dump-times "if " 0 "dce3"} } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -w -fdump-tree-dom1-details" } */ /* { dg-options "-O2 -w -fdump-tree-dom2-details" } */
typedef struct rtx_def *rtx; typedef struct rtx_def *rtx;
struct rtx_def struct rtx_def
...@@ -21,9 +21,9 @@ try_combine (rtx i1, rtx newpat) ...@@ -21,9 +21,9 @@ try_combine (rtx i1, rtx newpat)
/* There should be three tests against i1. Two from the hash table /* There should be three tests against i1. Two from the hash table
dumps, one in the code itself. */ dumps, one in the code itself. */
/* { dg-final { scan-tree-dump-times "if .i1_" 3 "dom1"} } */ /* { dg-final { scan-tree-dump-times "if .i1_" 3 "dom2"} } */
/* There should be no actual jump threads realized by DOM. The /* There should be no actual jump threads realized by DOM. The
legitimize jump threads are handled in VRP and those discovered legitimize jump threads are handled in VRP and those discovered
by DOM are subsumed by collapsing a conditional. */ by DOM are subsumed by collapsing a conditional. */
/* { dg-final { scan-tree-dump-not "Threaded" "dom1"} } */ /* { dg-final { scan-tree-dump-not "Threaded" "dom2"} } */
/* { dg-do run } */ /* { dg-do run } */
/* { dg-options "-O -fno-tree-fre -fdump-tree-dom1" } */ /* { dg-options "-O -fno-tree-fre -fdump-tree-dom2" } */
extern void abort (void); extern void abort (void);
...@@ -27,4 +27,4 @@ main() ...@@ -27,4 +27,4 @@ main()
return 0; return 0;
} }
/* { dg-final { scan-tree-dump "= PHI <\[01\]\\\(.\\\), \[01\]\\\(.\\\)>" "dom1" } } */ /* { dg-final { scan-tree-dump "= PHI <\[01\]\\\(.\\\), \[01\]\\\(.\\\)>" "dom2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fno-tree-vrp -fdump-tree-dom1-details" } */ /* { dg-options "-O2 -fno-tree-vrp -fdump-tree-dom2-details" } */
void t(void); void t(void);
void q(void); void q(void);
void q1(void); void q1(void);
...@@ -14,4 +14,4 @@ threading(int a,int b) ...@@ -14,4 +14,4 @@ threading(int a,int b)
q1(); q1();
} }
/* We should thread the jump twice and elliminate it. */ /* We should thread the jump twice and elliminate it. */
/* { dg-final { scan-tree-dump-times "Threaded" 2 "dom1"} } */ /* { dg-final { scan-tree-dump-times "Threaded" 2 "dom2"} } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-vrp1-stats -fdump-tree-dom1-stats" } */ /* { dg-options "-O2 -fdump-tree-vrp1-stats -fdump-tree-dom2-stats" } */
void bla(); void bla();
...@@ -18,4 +18,4 @@ void thread_entry_through_header (void) ...@@ -18,4 +18,4 @@ void thread_entry_through_header (void)
jump threading pass. */ jump threading pass. */
/* { dg-final { scan-tree-dump-times "Jumps threaded: 1" 1 "vrp1"} } */ /* { dg-final { scan-tree-dump-times "Jumps threaded: 1" 1 "vrp1"} } */
/* { dg-final { scan-tree-dump-times "Jumps threaded: 2" 0 "vrp1"} } */ /* { dg-final { scan-tree-dump-times "Jumps threaded: 2" 0 "vrp1"} } */
/* { dg-final { scan-tree-dump-not "Jumps threaded" "dom1"} } */ /* { dg-final { scan-tree-dump-not "Jumps threaded" "dom2"} } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-vrp1-stats -fdump-tree-dom1-stats" } */ /* { dg-options "-O2 -fdump-tree-vrp1-stats -fdump-tree-dom2-stats" } */
void foo(); void foo();
void bla(); void bla();
...@@ -25,5 +25,5 @@ void thread_latch_through_header (void) ...@@ -25,5 +25,5 @@ void thread_latch_through_header (void)
/* Threading the latch to a later point in the loop is safe in this /* Threading the latch to a later point in the loop is safe in this
case. And we want to thread through the header as well. These case. And we want to thread through the header as well. These
are both caught by threading in DOM. */ are both caught by threading in DOM. */
/* { dg-final { scan-tree-dump-not "Jumps threaded" "dom1"} } */ /* { dg-final { scan-tree-dump-not "Jumps threaded" "dom2"} } */
/* { dg-final { scan-tree-dump-times "Jumps threaded: 2" 1 "vrp1"} } */ /* { dg-final { scan-tree-dump-times "Jumps threaded: 2" 1 "vrp1"} } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-vrp1-stats -fdump-tree-dom1-stats" } */ /* { dg-options "-O2 -fdump-tree-vrp1-stats -fdump-tree-dom2-stats" } */
void foo(); void foo();
void bla(); void bla();
...@@ -29,4 +29,4 @@ void dont_thread_1 (void) ...@@ -29,4 +29,4 @@ void dont_thread_1 (void)
header and around the latch. If one is done without the other, then header and around the latch. If one is done without the other, then
we create an irreducible CFG. */ we create an irreducible CFG. */
/* { dg-final { scan-tree-dump-not "Jumps threaded" "vrp1"} } */ /* { dg-final { scan-tree-dump-not "Jumps threaded" "vrp1"} } */
/* { dg-final { scan-tree-dump-not "Jumps threaded" "dom1"} } */ /* { dg-final { scan-tree-dump-not "Jumps threaded" "dom2"} } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-vrp1-stats -fdump-tree-dom1-stats" } */ /* { dg-options "-O2 -fdump-tree-vrp1-stats -fdump-tree-dom2-stats" } */
void foo(); void foo();
void bla(); void bla();
...@@ -26,4 +26,4 @@ void dont_thread_2 (int first) ...@@ -26,4 +26,4 @@ void dont_thread_2 (int first)
/* Peeling off the first iteration would make threading through /* Peeling off the first iteration would make threading through
the loop latch safe, but we don't do that currently. */ the loop latch safe, but we don't do that currently. */
/* { dg-final { scan-tree-dump-not "Jumps threaded" "vrp1"} } */ /* { dg-final { scan-tree-dump-not "Jumps threaded" "vrp1"} } */
/* { dg-final { scan-tree-dump-not "Jumps threaded" "dom1"} } */ /* { dg-final { scan-tree-dump-not "Jumps threaded" "dom2"} } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-vrp1-stats -fdump-tree-dom1-stats" } */ /* { dg-options "-O2 -fdump-tree-vrp1-stats -fdump-tree-dom2-stats" } */
void foo(); void foo();
void bla(); void bla();
...@@ -25,4 +25,4 @@ void dont_thread_3 (int nfirst) ...@@ -25,4 +25,4 @@ void dont_thread_3 (int nfirst)
/* Threading through the loop header is not safe here. Peeling off /* Threading through the loop header is not safe here. Peeling off
the first iteration then unswitching the loop would be safe. */ the first iteration then unswitching the loop would be safe. */
/* { dg-final { scan-tree-dump-not "Jumps threaded" "vrp1"} } */ /* { dg-final { scan-tree-dump-not "Jumps threaded" "vrp1"} } */
/* { dg-final { scan-tree-dump-not "Jumps threaded" "dom1"} } */ /* { dg-final { scan-tree-dump-not "Jumps threaded" "dom2"} } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-vrp1-stats -fdump-tree-dom1-stats" } */ /* { dg-options "-O2 -fdump-tree-vrp1-stats -fdump-tree-dom2-stats" } */
void foo(); void foo();
void bla(); void bla();
...@@ -31,4 +31,4 @@ void dont_thread_4 (int a, int nfirst) ...@@ -31,4 +31,4 @@ void dont_thread_4 (int a, int nfirst)
} }
/* { dg-final { scan-tree-dump-not "Jumps threaded" "vrp1"} } */ /* { dg-final { scan-tree-dump-not "Jumps threaded" "vrp1"} } */
/* { dg-final { scan-tree-dump-not "Jumps threaded" "dom1"} } */ /* { dg-final { scan-tree-dump-not "Jumps threaded" "dom2"} } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-dom1-details -std=gnu89" } */ /* { dg-options "-O2 -fdump-tree-dom2-details -std=gnu89" } */
struct bitmap_head_def; struct bitmap_head_def;
typedef struct bitmap_head_def *bitmap; typedef struct bitmap_head_def *bitmap;
typedef const struct bitmap_head_def *const_bitmap; typedef const struct bitmap_head_def *const_bitmap;
...@@ -58,7 +58,7 @@ bitmap_ior_and_compl (bitmap dst, const_bitmap a, const_bitmap b, ...@@ -58,7 +58,7 @@ bitmap_ior_and_compl (bitmap dst, const_bitmap a, const_bitmap b,
code we missed the edge when the first conditional is false code we missed the edge when the first conditional is false
(b_elt is zero, which means the second conditional is always (b_elt is zero, which means the second conditional is always
zero. */ zero. */
/* { dg-final { scan-tree-dump-times "Threaded" 3 "dom1" { target { ! logical_op_short_circuit } } } } */ /* { dg-final { scan-tree-dump-times "Threaded" 3 "dom2" { target { ! logical_op_short_circuit } } } } */
/* On targets that define LOGICAL_OP_NON_SHORT_CIRCUIT to 0, we split both /* On targets that define LOGICAL_OP_NON_SHORT_CIRCUIT to 0, we split both
"a_elt || b_elt" and "b_elt && kill_elt" into two conditions each, "a_elt || b_elt" and "b_elt && kill_elt" into two conditions each,
rather than using "(var1 != 0) op (var2 != 0)". Also, as on other targets, rather than using "(var1 != 0) op (var2 != 0)". Also, as on other targets,
...@@ -75,5 +75,5 @@ bitmap_ior_and_compl (bitmap dst, const_bitmap a, const_bitmap b, ...@@ -75,5 +75,5 @@ bitmap_ior_and_compl (bitmap dst, const_bitmap a, const_bitmap b,
-> "kill_elt->indx == b_elt->indx" in the second condition, -> "kill_elt->indx == b_elt->indx" in the second condition,
skipping the known-true "b_elt && kill_elt" in the second skipping the known-true "b_elt && kill_elt" in the second
condition. */ condition. */
/* { dg-final { scan-tree-dump-times "Threaded" 4 "dom1" { target logical_op_short_circuit } } } */ /* { dg-final { scan-tree-dump-times "Threaded" 4 "dom2" { target logical_op_short_circuit } } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-Os -fno-tree-fre -fdump-tree-dom1-details" } */ /* { dg-options "-Os -fno-tree-fre -fdump-tree-dom2-details" } */
void foo(int *); void foo(int *);
void f2(int dst[3], int R) void f2(int dst[3], int R)
...@@ -19,4 +19,4 @@ void f2(int dst[3], int R) ...@@ -19,4 +19,4 @@ void f2(int dst[3], int R)
foo(inter); foo(inter);
} }
/* { dg-final { scan-tree-dump "Threaded jump" "dom1" } } */ /* { dg-final { scan-tree-dump "Threaded jump" "dom2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-dom1-details" } */ /* { dg-options "-O2 -fdump-tree-dom2-details" } */
/* { dg-final { scan-tree-dump-times "FSM" 6 "dom1" } } */ /* { dg-final { scan-tree-dump-times "FSM" 6 "dom2" } } */
int sum0, sum1, sum2, sum3; int sum0, sum1, sum2, sum3;
int foo (char *s, char **ret) int foo (char *s, char **ret)
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-vrp1-stats -fdump-tree-dom1-stats -fdump-tree-dom2-stats" } */ /* { dg-options "-O2 -fdump-tree-vrp1-stats -fdump-tree-dom2-stats -fdump-tree-dom3-stats" } */
/* { dg-final { scan-tree-dump "Jumps threaded: 7" "vrp1" } } */ /* { dg-final { scan-tree-dump "Jumps threaded: 7" "vrp1" } } */
/* { dg-final { scan-tree-dump "Jumps threaded: 12" "dom1" } } */ /* { dg-final { scan-tree-dump "Jumps threaded: 12" "dom2" } } */
/* { dg-final { scan-tree-dump "Jumps threaded: 3" "dom2" } } */ /* { dg-final { scan-tree-dump "Jumps threaded: 3" "dom3" } } */
enum STATE { enum STATE {
S0=0, S0=0,
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O -fdump-tree-lim1" } */ /* { dg-options "-O -fdump-tree-lim2" } */
/* This is a variant that does cause fold to place a cast to /* This is a variant that does cause fold to place a cast to
int before testing bit 1. */ int before testing bit 1. */
...@@ -18,4 +18,4 @@ quantum_toffoli (int control1, int control2, int target, ...@@ -18,4 +18,4 @@ quantum_toffoli (int control1, int control2, int target,
} }
} }
/* { dg-final { scan-tree-dump-times "1 <<" 3 "lim1" } } */ /* { dg-final { scan-tree-dump-times "1 <<" 3 "lim2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-lim1-details" } */ /* { dg-options "-O2 -fdump-tree-lim2-details" } */
int *l, *r; int *l, *r;
int test_func(void) int test_func(void)
...@@ -27,4 +27,4 @@ int test_func(void) ...@@ -27,4 +27,4 @@ int test_func(void)
return i; return i;
} }
/* { dg-final { scan-tree-dump "Executing store motion of pos" "lim1" } } */ /* { dg-final { scan-tree-dump "Executing store motion of pos" "lim2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O -fprofile-arcs -fdump-tree-lim1-details" } */ /* { dg-options "-O -fprofile-arcs -fdump-tree-lim2-details" } */
/* { dg-require-profiling "-fprofile-generate" } */ /* { dg-require-profiling "-fprofile-generate" } */
struct thread_param struct thread_param
...@@ -22,4 +22,4 @@ void access_buf(struct thread_param* p) ...@@ -22,4 +22,4 @@ void access_buf(struct thread_param* p)
} }
} }
/* { dg-final { scan-tree-dump-times "Executing store motion of __gcov0.access_buf\\\[\[01\]\\\] from loop 1" 2 "lim1" } } */ /* { dg-final { scan-tree-dump-times "Executing store motion of __gcov0.access_buf\\\[\[01\]\\\] from loop 1" 2 "lim2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O -fdump-tree-lim1" } */ /* { dg-options "-O -fdump-tree-lim2" } */
int a[1024]; int a[1024];
...@@ -23,4 +23,4 @@ void bar (int x, int z) ...@@ -23,4 +23,4 @@ void bar (int x, int z)
} }
} }
/* { dg-final { scan-tree-dump-times "!= 0 ? " 2 "lim1" } } */ /* { dg-final { scan-tree-dump-times "!= 0 ? " 2 "lim2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O -fdump-tree-lim1" } */ /* { dg-options "-O -fdump-tree-lim2" } */
/* This is a variant that doesn't cause fold to place a cast to /* This is a variant that doesn't cause fold to place a cast to
int before testing bit 1. */ int before testing bit 1. */
...@@ -18,4 +18,4 @@ int size) ...@@ -18,4 +18,4 @@ int size)
} }
} }
/* { dg-final { scan-tree-dump-times "1 <<" 3 "lim1" } } */ /* { dg-final { scan-tree-dump-times "1 <<" 3 "lim2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O -fdump-tree-lim1-details" } */ /* { dg-options "-O -fdump-tree-lim2-details" } */
struct { int x; int y; } global; struct { int x; int y; } global;
void foo(int n) void foo(int n)
...@@ -9,5 +9,5 @@ void foo(int n) ...@@ -9,5 +9,5 @@ void foo(int n)
global.y += global.x*global.x; global.y += global.x*global.x;
} }
/* { dg-final { scan-tree-dump "Executing store motion of global.y" "lim1" } } */ /* { dg-final { scan-tree-dump "Executing store motion of global.y" "lim2" } } */
/* { dg-final { scan-tree-dump "Moving statement.*global.x.*out of loop 1" "lim1" } } */ /* { dg-final { scan-tree-dump "Moving statement.*global.x.*out of loop 1" "lim2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-lim1-details" } */ /* { dg-options "-O2 -fdump-tree-lim2-details" } */
double a[16][64], y[64], x[16]; double a[16][64], y[64], x[16];
void foo(void) void foo(void)
...@@ -10,4 +10,4 @@ void foo(void) ...@@ -10,4 +10,4 @@ void foo(void)
y[j] = y[j] + a[i][j] * x[i]; y[j] = y[j] + a[i][j] * x[i];
} }
/* { dg-final { scan-tree-dump "Executing store motion of y" "lim1" } } */ /* { dg-final { scan-tree-dump "Executing store motion of y" "lim2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O -fdump-tree-lim1-details" } */ /* { dg-options "-O -fdump-tree-lim2-details" } */
extern const int srcshift; extern const int srcshift;
...@@ -11,4 +11,4 @@ void foo (int *srcdata, int *dstdata) ...@@ -11,4 +11,4 @@ void foo (int *srcdata, int *dstdata)
dstdata[i] = srcdata[i] << srcshift; dstdata[i] = srcdata[i] << srcshift;
} }
/* { dg-final { scan-tree-dump "Moving statement" "lim1" } } */ /* { dg-final { scan-tree-dump "Moving statement" "lim2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O -fdump-tree-lim1-details" } */ /* { dg-options "-O -fdump-tree-lim2-details" } */
void bar (int); void bar (int);
void foo (int n, int m) void foo (int n, int m)
...@@ -16,4 +16,4 @@ void foo (int n, int m) ...@@ -16,4 +16,4 @@ void foo (int n, int m)
} }
} }
/* { dg-final { scan-tree-dump-times "Moving PHI node" 1 "lim1" } } */ /* { dg-final { scan-tree-dump-times "Moving PHI node" 1 "lim2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O -fdump-tree-lim1-details" } */ /* { dg-options "-O -fdump-tree-lim2-details" } */
void bar (int); void bar (int);
void foo (int n, int m) void foo (int n, int m)
...@@ -16,4 +16,4 @@ void foo (int n, int m) ...@@ -16,4 +16,4 @@ void foo (int n, int m)
} }
} }
/* { dg-final { scan-tree-dump-times "Moving PHI node" 1 "lim1" } } */ /* { dg-final { scan-tree-dump-times "Moving PHI node" 1 "lim2" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-dom1-details" } */ /* { dg-options "-O2 -fdump-tree-dom2-details" } */
/* { dg-final { scan-tree-dump "FSM" "dom1" } } */ /* { dg-final { scan-tree-dump "FSM" "dom2" } } */
typedef struct bitmap_head_def *bitmap; typedef struct bitmap_head_def *bitmap;
typedef const struct bitmap_head_def *const_bitmap; typedef const struct bitmap_head_def *const_bitmap;
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-lim1-details" } */ /* { dg-options "-O2 -fdump-tree-lim2-details" } */
int x; int y; int x; int y;
struct { int x; int y; } global; struct { int x; int y; } global;
int foo() { int foo() {
...@@ -10,5 +10,5 @@ int foo() { ...@@ -10,5 +10,5 @@ int foo() {
global.y += global.x*global.x; global.y += global.x*global.x;
} }
/* { dg-final { scan-tree-dump-times "Executing store motion of global.y" 1 "lim1" } } */ /* { dg-final { scan-tree-dump-times "Executing store motion of global.y" 1 "lim2" } } */
/* XXX: We should also check for the load motion of global.x, but there is no easy way to do this. */ /* XXX: We should also check for the load motion of global.x, but there is no easy way to do this. */
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
jumps when evaluating an && condition. VRP is not able to optimize jumps when evaluating an && condition. VRP is not able to optimize
this. */ this. */
/* { dg-do compile { target { ! { logical_op_short_circuit || { s390*-*-* mn10300-*-* hppa*-*-* } } } } } */ /* { dg-do compile { target { ! { logical_op_short_circuit || { s390*-*-* mn10300-*-* hppa*-*-* } } } } } */
/* { dg-options "-O2 -fdump-tree-vrp1 -fdump-tree-dom1 -fdump-tree-vrp2" } */ /* { dg-options "-O2 -fdump-tree-vrp1 -fdump-tree-dom2 -fdump-tree-vrp2" } */
/* { dg-additional-options "-march=i586" { target { { i?86-*-* x86_64-*-* } && ia32 } } } */ /* { dg-additional-options "-march=i586" { target { { i?86-*-* x86_64-*-* } && ia32 } } } */
int h(int x, int y) int h(int x, int y)
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-require-effective-target vect_int } */ /* { dg-require-effective-target vect_int } */
/* { dg-additional-options "-fdump-tree-dce5-details" } */ /* { dg-additional-options "-fdump-tree-dce6-details" } */
int a[256], b[256], c[256]; int a[256], b[256], c[256];
...@@ -13,4 +13,4 @@ foo () { ...@@ -13,4 +13,4 @@ foo () {
} }
} }
/* { dg-final { scan-tree-dump-times "Deleting : vect_" 0 "dce5" } } */ /* { dg-final { scan-tree-dump-times "Deleting : vect_" 0 "dce6" } } */
! { dg-do compile } ! { dg-do compile }
! { dg-options "-O2 -fdump-tree-lim1" } ! { dg-options "-O2 -fdump-tree-lim2" }
! gfortran -c -m32 -O2 -S junk.f ! gfortran -c -m32 -O2 -S junk.f
! !
MODULE LES3D_DATA MODULE LES3D_DATA
...@@ -45,4 +45,4 @@ ...@@ -45,4 +45,4 @@
RETURN RETURN
END END
! { dg-final { scan-tree-dump-times "stride" 4 "lim1" } } ! { dg-final { scan-tree-dump-times "stride" 4 "lim2" } }
...@@ -165,6 +165,8 @@ public: ...@@ -165,6 +165,8 @@ public:
/* Initialize and finalize loop structures, copying headers inbetween. */ /* Initialize and finalize loop structures, copying headers inbetween. */
virtual unsigned int execute (function *); virtual unsigned int execute (function *);
opt_pass * clone () { return new pass_ch (m_ctxt); }
protected: protected:
/* ch_base method: */ /* ch_base method: */
virtual bool process_loop_p (struct loop *loop); virtual bool process_loop_p (struct loop *loop);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment