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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@230907
138bc75d-0d04-0410-961f-
82ee72b054a4
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):
Declare.
* tree-ssa-loop.c (gate_oacc_kernels): New static function.
return !(fun->curr_properties & PROP_gimple_eomp);
}
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
/* pass_build_ealias is a dummy pass that ensures that we
execute TODO_rebuild_alias at this point. */
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);
+ /* 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_dse);
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>
* g++.dg/cpp0x/constexpr-array13.C: Fix.
/* { 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)
{
/* 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-options "-O2 -fdump-tree-lim1-details" } */
+/* { dg-options "-O2 -fdump-tree-lim2-details" } */
struct Foo
{
}
}
-/* { dg-final { scan-tree-dump "Executing store motion" "lim1" } } */
+/* { dg-final { scan-tree-dump "Executing store motion" "lim2" } } */
/* { 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
const qualified pointer types
/* 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-options "-O2 -fno-ipa-icf -fdump-tree-dom1" } */
+/* { dg-options "-O2 -fno-ipa-icf -fdump-tree-dom2" } */
#include <new>
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-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;
// 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 "invariant up to" 0 "lim1" } }
+// { dg-final { scan-tree-dump-times "invariant up to" 0 "lim2" } }
/* { 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>
struct Field {
// The block ending with cmp == 0 should not be threaded. ie,
// 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-options "-O2 -fdump-tree-lim1-details" } */
+/* { dg-options "-O2 -fdump-tree-lim2-details" } */
struct Foo
{
}
}
-/* { dg-final { scan-tree-dump "Executing store motion" "lim1" } } */
+/* { dg-final { scan-tree-dump "Executing store motion" "lim2" } } */
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-dom1" } */
+/* { dg-options "-O2 -fdump-tree-dom2" } */
typedef long unsigned int size_t;
extern void abort (void) __attribute__ ((__noreturn__));
abort ();
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"} } */
/* 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-options "-O2 -fdump-tree-dom1" } */
+/* { dg-options "-O2 -fdump-tree-dom2" } */
extern int foo (void) __attribute__((pure));
}
/* 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
that CSE would catch later on. */
/* { dg-do compile } */
-/* { dg-options "-O -fdump-tree-dce2" } */
+/* { dg-options "-O -fdump-tree-dce3" } */
double _Complex *a;
static const double _Complex b[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
/* After DCE2 which runs after FRE, the expressions should be fully
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 "= b" 0 "dce2" } } */
+/* { dg-final { scan-tree-dump-times "__complex__ \\\(1.0e\\\+0, 0.0\\\)" 2 "dce3" } } */
+/* { dg-final { scan-tree-dump-times "= b" 0 "dce3" } } */
/* { 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
the load would not have occurred on each path out of the loop. */
}
}
-/* { 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-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. */
}
}
-/* { 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
which showed jump threading profile insanities. */
-/* { dg-options "-Ofast -fdump-tree-dom1-all" } */
+/* { dg-options "-Ofast -fdump-tree-dom2-all" } */
struct rtattr
{
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
which showed jump threading profile insanities. */
-/* { dg-options "-Ofast -fdump-tree-dom1-all" } */
+/* { dg-options "-Ofast -fdump-tree-dom2-all" } */
#include <limits.h>
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-options "-O -fdump-tree-dce2" } */
+/* { dg-options "-O -fdump-tree-dce3" } */
struct rtx_def;
typedef struct rtx_def *rtx;
/* There should be precisely one load of ->decl.rtl. If there is
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
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
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-options "-O2 -fdump-tree-dce1" } */
+/* { dg-options "-O2 -fdump-tree-dce2" } */
void foo (void);
/* There should be only one IF conditional since the first does nothing
useful. */
-/* { dg-final { scan-tree-dump-times "if " 1 "dce1"} } */
+/* { dg-final { scan-tree-dump-times "if " 1 "dce2"} } */
/* { 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);
/* { dg-do compile } */
-/* { dg-options "-O1 -fdump-tree-dom1 -fdisable-tree-ifcombine" } */
+/* { dg-options "-O1 -fdump-tree-dom2 -fdisable-tree-ifcombine" } */
struct rtx_def;
typedef struct rtx_def *rtx;
SSA name to record as a copy of the other when DOM derives copies
from temporary equivalences. The heuristics there no longer do
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-options "-O1 -fdump-tree-dom1" } */
+/* { dg-options "-O1 -fdump-tree-dom2" } */
typedef struct edge_def
{
}
/* 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-options "-O1 -fdump-tree-dom1" } */
+/* { dg-options "-O1 -fdump-tree-dom2" } */
void bar1 (void);
void bar2 (void);
bar2 ();
}
-/* { dg-final { scan-tree-dump-times "bar2" 0 "dom1" } } */
+/* { dg-final { scan-tree-dump-times "bar2" 0 "dom2" } } */
/* { dg-do compile } */
-/* { dg-options "-O1 -fdump-tree-dom1" } */
+/* { dg-options "-O1 -fdump-tree-dom2" } */
void bar1 (void);
void bar2 (void);
true (to reach the second condition we know a < b via the first
conditional. */
-/* { dg-final { scan-tree-dump-times "if " 1 "dom1" } } */
+/* { dg-final { scan-tree-dump-times "if " 1 "dom2" } } */
/* { dg-do compile } */
-/* { dg-options "-O1 -fdump-tree-dce2" } */
+/* { dg-options "-O1 -fdump-tree-dce3" } */
int
foo ()
compiler was mistakenly thinking that the statement had volatile
operands. But 'p' itself is not volatile and taking the address of
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-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];
/* Store motion may be applied to the assignment to a[k], since sinf
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-options "-O2 -fdump-tree-dce1" } */
+/* { dg-options "-O2 -fdump-tree-dce2" } */
void
cleanup (int a, int b)
{
return;
}
/* 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-options "-O2 -fdump-tree-ch-details" } */
+/* { dg-options "-O2 -fdump-tree-ch2-details" } */
extern int foo (int);
}
/* 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-options "-O2 -fdump-tree-ch" } */
+/* { dg-options "-O2 -fdump-tree-ch2" } */
typedef union tree_node *tree;
enum tree_code
{
}
/* We should copy loop header to fundamentals[0] and then fold it way into
known value. */
-/* { dg-final { scan-tree-dump-not "fundamentals.0" "ch"} } */
+/* { dg-final { scan-tree-dump-not "fundamentals.0" "ch2"} } */
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-lim1-details" } */
+/* { dg-options "-O2 -fdump-tree-lim2-details" } */
int x;
int a[100];
}
}
-/* { 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-options "-O2 -fdump-tree-lim1-details" } */
+/* { dg-options "-O2 -fdump-tree-lim2-details" } */
int x;
int a[100];
}
}
-/* { 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-options "-O2 -fdump-tree-lim1-details" } */
+/* { dg-options "-O2 -fdump-tree-lim2-details" } */
int r[6];
}
-/* { 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-options "-O2 -fdump-tree-lim1-details" } */
+/* { dg-options "-O2 -fdump-tree-lim2-details" } */
int x;
int a[100];
}
}
/* 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" 6 "lim1" { target { "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 "lim2" { target { "avr-*-*" } } } } */
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-dce2" } */
+/* { dg-options "-O2 -fdump-tree-dce3" } */
struct X { float array[2]; };
/* The temporary structure should have been promoted to registers
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-options "-O2 -fdump-tree-ch-details" } */
+/* { dg-options "-O2 -fdump-tree-ch2-details" } */
int mymax2(int *it, int *end)
{
return max;
}
-/* { dg-final { scan-tree-dump "Duplicating header" "ch" } } */
+/* { dg-final { scan-tree-dump "Duplicating header" "ch2" } } */
/* PR tree-optimization/19828 */
/* { 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_fun2 (int) __attribute__((__const__));
Calls to cst_fun2 and pure_fun2 should not be, since calling
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-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
foo (int *p)
/* 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-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 "b_. =" "dce1" { target { avr-*-* } } } } */
+/* { dg-final { scan-tree-dump-not "b_. =" "dce2" { target { ! avr-*-* } } } } */
+/* { dg-final { scan-tree-dump "b_. =" "dce2" { target { avr-*-* } } } } */
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-dom2-details" } */
+/* { dg-options "-O2 -fdump-tree-dom3-details" } */
struct tree_common
{
/* 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
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-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 } */
double F[2] = { 0., 0. }, e = 0.;
/* 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
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-do compile } */
-/* { dg-options "-Os -fno-tree-fre -fdump-tree-dom1" } */
+/* { dg-options "-Os -fno-tree-fre -fdump-tree-dom2" } */
void foo(int *);
void f2(int dst[3], int R)
/* There should be precisely two conditionals. One for the loop condition
and one for the test after the loop. Previously we failed to eliminate
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-options "-O -fno-strict-aliasing -fdump-tree-lim1-details" } */
+/* { dg-options "-O -fno-strict-aliasing -fdump-tree-lim2-details" } */
void f(int * __restrict__ r,
int a[__restrict__ 16][16],
/* 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-options "-O -fno-strict-aliasing -fdump-tree-lim1-details" } */
+/* { dg-options "-O -fno-strict-aliasing -fdump-tree-lim2-details" } */
static inline __attribute__((always_inline))
void f(int * __restrict__ 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-options "-O2 -fdump-tree-dom2" } */
+/* { dg-options "-O2 -fdump-tree-dom3" } */
struct x
{
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 "\\* 2;" 1 "dom2" { target { int16 } } } } */
-/* { dg-final { scan-tree-dump-times "p_\\d\+\\(D\\) \\+ \[^\r\n\]*_\\d\+;" 1 "dom2" } } */
-/* { dg-final { scan-tree-dump-times "MEM\\\[\\(struct x \\*\\)\[^\r\n\]*_\\d\+" 3 "dom2" } } */
+/* { dg-final { scan-tree-dump-times "\\* 4;" 1 "dom3" { target { int32 } } } } */
+/* { dg-final { scan-tree-dump-times "\\* 2;" 1 "dom3" { target { int16 } } } } */
+/* { 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 "dom3" } } */
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-dom2" } */
+/* { dg-options "-O2 -fdump-tree-dom3" } */
struct x
{
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 "\\* 2;" 1 "dom2" { target { int16 } } } } */
-/* { dg-final { scan-tree-dump-times "p_\\d\+\\(D\\) \\+ \[^\r\n\]*_\\d\+" 1 "dom2" } } */
-/* { dg-final { scan-tree-dump-times "MEM\\\[\\(struct x \\*\\)\[^\r\n\]*_\\d\+" 9 "dom2" } } */
+/* { dg-final { scan-tree-dump-times "\\* 4;" 1 "dom3" { target { int32 } } } } */
+/* { dg-final { scan-tree-dump-times "\\* 2;" 1 "dom3" { target { int16 } } } } */
+/* { 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 "dom3" } } */
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-dom2" } */
+/* { dg-options "-O2 -fdump-tree-dom3" } */
struct x
{
}
}
-/* { dg-final { scan-tree-dump-times "\\* 4;" 1 "dom2" { target { int32 } } } } */
-/* { dg-final { scan-tree-dump-times "\\* 2;" 1 "dom2" { target { int16 } } } } */
-/* { dg-final { scan-tree-dump-times "p_\\d\+\\(D\\) \\+ \[^\r\n\]*_\\d\+" 1 "dom2" } } */
-/* { dg-final { scan-tree-dump-times "MEM\\\[\\(struct x \\*\\)\[^\r\n\]*_\\d\+" 9 "dom2" } } */
+/* { dg-final { scan-tree-dump-times "\\* 4;" 1 "dom3" { target { int32 } } } } */
+/* { dg-final { scan-tree-dump-times "\\* 2;" 1 "dom3" { target { int16 } } } } */
+/* { 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 "dom3" } } */
/* { dg-do compile } */
-/* { dg-options "-O1 -fdump-tree-dce2" } */
+/* { dg-options "-O1 -fdump-tree-dce3" } */
int t() __attribute__ ((const));
void
i = t();
}
/* 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-options "-O2 -fdump-tree-dce2" } */
+/* { dg-options "-O2 -fdump-tree-dce3" } */
/* We should notice constantness of this function. */
static int __attribute__((noinline)) t(int a)
i = t(1);
}
/* 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-options "-O2 -w -fdump-tree-dom1-details" } */
+/* { dg-options "-O2 -w -fdump-tree-dom2-details" } */
typedef struct rtx_def *rtx;
struct rtx_def
/* There should be three tests against i1. Two from the hash table
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
legitimize jump threads are handled in VRP and those discovered
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-options "-O -fno-tree-fre -fdump-tree-dom1" } */
+/* { dg-options "-O -fno-tree-fre -fdump-tree-dom2" } */
extern void abort (void);
return 0;
}
-/* { dg-final { scan-tree-dump "= PHI <\[01\]\\\(.\\\), \[01\]\\\(.\\\)>" "dom1" } } */
+/* { dg-final { scan-tree-dump "= PHI <\[01\]\\\(.\\\), \[01\]\\\(.\\\)>" "dom2" } } */
/* { 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 q(void);
void q1(void);
q1();
}
/* 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-options "-O2 -fdump-tree-vrp1-stats -fdump-tree-dom1-stats" } */
+/* { dg-options "-O2 -fdump-tree-vrp1-stats -fdump-tree-dom2-stats" } */
void bla();
jump threading pass. */
/* { 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-not "Jumps threaded" "dom1"} } */
+/* { dg-final { scan-tree-dump-not "Jumps threaded" "dom2"} } */
/* { 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 bla();
/* 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
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-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 bla();
header and around the latch. If one is done without the other, then
we create an irreducible CFG. */
/* { 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-options "-O2 -fdump-tree-vrp1-stats -fdump-tree-dom1-stats" } */
+/* { dg-options "-O2 -fdump-tree-vrp1-stats -fdump-tree-dom2-stats" } */
void foo();
void bla();
/* Peeling off the first iteration would make threading through
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" "dom1"} } */
+/* { dg-final { scan-tree-dump-not "Jumps threaded" "dom2"} } */
/* { 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 bla();
/* Threading through the loop header is not safe here. Peeling off
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" "dom1"} } */
+/* { dg-final { scan-tree-dump-not "Jumps threaded" "dom2"} } */
/* { 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 bla();
}
/* { 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-options "-O2 -fdump-tree-dom1-details -std=gnu89" } */
+/* { dg-options "-O2 -fdump-tree-dom2-details -std=gnu89" } */
struct bitmap_head_def;
typedef struct bitmap_head_def *bitmap;
typedef const struct bitmap_head_def *const_bitmap;
code we missed the edge when the first conditional is false
(b_elt is zero, which means the second conditional is always
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
"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,
-> "kill_elt->indx == b_elt->indx" in the second condition,
skipping the known-true "b_elt && kill_elt" in the second
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-options "-Os -fno-tree-fre -fdump-tree-dom1-details" } */
+/* { dg-options "-Os -fno-tree-fre -fdump-tree-dom2-details" } */
void foo(int *);
void f2(int dst[3], int R)
foo(inter);
}
-/* { dg-final { scan-tree-dump "Threaded jump" "dom1" } } */
+/* { dg-final { scan-tree-dump "Threaded jump" "dom2" } } */
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-dom1-details" } */
-/* { dg-final { scan-tree-dump-times "FSM" 6 "dom1" } } */
+/* { dg-options "-O2 -fdump-tree-dom2-details" } */
+/* { dg-final { scan-tree-dump-times "FSM" 6 "dom2" } } */
int sum0, sum1, sum2, sum3;
int foo (char *s, char **ret)
/* { 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: 12" "dom1" } } */
-/* { dg-final { scan-tree-dump "Jumps threaded: 3" "dom2" } } */
+/* { dg-final { scan-tree-dump "Jumps threaded: 12" "dom2" } } */
+/* { dg-final { scan-tree-dump "Jumps threaded: 3" "dom3" } } */
enum STATE {
S0=0,
/* { 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
int before testing bit 1. */
}
}
-/* { dg-final { scan-tree-dump-times "1 <<" 3 "lim1" } } */
+/* { dg-final { scan-tree-dump-times "1 <<" 3 "lim2" } } */
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-lim1-details" } */
+/* { dg-options "-O2 -fdump-tree-lim2-details" } */
int *l, *r;
int test_func(void)
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-options "-O -fprofile-arcs -fdump-tree-lim1-details" } */
+/* { dg-options "-O -fprofile-arcs -fdump-tree-lim2-details" } */
/* { dg-require-profiling "-fprofile-generate" } */
struct thread_param
}
}
-/* { 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-options "-O -fdump-tree-lim1" } */
+/* { dg-options "-O -fdump-tree-lim2" } */
int a[1024];
}
}
-/* { dg-final { scan-tree-dump-times "!= 0 ? " 2 "lim1" } } */
+/* { dg-final { scan-tree-dump-times "!= 0 ? " 2 "lim2" } } */
/* { 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
int before testing bit 1. */
}
}
-/* { dg-final { scan-tree-dump-times "1 <<" 3 "lim1" } } */
+/* { dg-final { scan-tree-dump-times "1 <<" 3 "lim2" } } */
/* { dg-do compile } */
-/* { dg-options "-O -fdump-tree-lim1-details" } */
+/* { dg-options "-O -fdump-tree-lim2-details" } */
struct { int x; int y; } global;
void foo(int n)
global.y += global.x*global.x;
}
-/* { dg-final { scan-tree-dump "Executing store motion of global.y" "lim1" } } */
-/* { dg-final { scan-tree-dump "Moving statement.*global.x.*out of loop 1" "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" "lim2" } } */
/* { 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];
void foo(void)
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-options "-O -fdump-tree-lim1-details" } */
+/* { dg-options "-O -fdump-tree-lim2-details" } */
extern const int 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-options "-O -fdump-tree-lim1-details" } */
+/* { dg-options "-O -fdump-tree-lim2-details" } */
void bar (int);
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-options "-O -fdump-tree-lim1-details" } */
+/* { dg-options "-O -fdump-tree-lim2-details" } */
void bar (int);
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-options "-O2 -fdump-tree-dom1-details" } */
-/* { dg-final { scan-tree-dump "FSM" "dom1" } } */
+/* { dg-options "-O2 -fdump-tree-dom2-details" } */
+/* { dg-final { scan-tree-dump "FSM" "dom2" } } */
typedef struct bitmap_head_def *bitmap;
typedef const struct bitmap_head_def *const_bitmap;
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-lim1-details" } */
+/* { dg-options "-O2 -fdump-tree-lim2-details" } */
int x; int y;
struct { int x; int y; } global;
int foo() {
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. */
jumps when evaluating an && condition. VRP is not able to optimize
this. */
/* { 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 } } } */
int h(int x, int y)
/* { dg-do compile } */
/* { 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];
}
}
-/* { dg-final { scan-tree-dump-times "Deleting : vect_" 0 "dce5" } } */
+/* { dg-final { scan-tree-dump-times "Deleting : vect_" 0 "dce6" } } */
! { dg-do compile }
-! { dg-options "-O2 -fdump-tree-lim1" }
+! { dg-options "-O2 -fdump-tree-lim2" }
! gfortran -c -m32 -O2 -S junk.f
!
MODULE LES3D_DATA
RETURN
END
-! { dg-final { scan-tree-dump-times "stride" 4 "lim1" } }
+! { dg-final { scan-tree-dump-times "stride" 4 "lim2" } }
/* Initialize and finalize loop structures, copying headers inbetween. */
virtual unsigned int execute (function *);
+ opt_pass * clone () { return new pass_ch (m_ctxt); }
+
protected:
/* ch_base method: */
virtual bool process_loop_p (struct loop *loop);