aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-loop.c
diff options
context:
space:
mode:
authorTom de Vries <tom@codesourcery.com>2015-12-16 13:49:07 +0000
committerTom de Vries <vries@gcc.gnu.org>2015-12-16 13:49:07 +0000
commit597a8ab9c6f57c416c2b0a734c2098fa0335e628 (patch)
tree2932f5cc1548ca0542477812be3dbb8f67821ac7 /gcc/tree-ssa-loop.c
parentf47cda24579db16228140f8849e9c456093c92ab (diff)
downloadgcc-597a8ab9c6f57c416c2b0a734c2098fa0335e628.zip
gcc-597a8ab9c6f57c416c2b0a734c2098fa0335e628.tar.gz
gcc-597a8ab9c6f57c416c2b0a734c2098fa0335e628.tar.bz2
Add pass_oacc_ipa
2015-12-16 Tom de Vries <tom@codesourcery.com> * opts.c (default_options_optimization): Set fipa-pta on by default for fopenacc. * passes.def: Move kernels pass group to pass_ipa_oacc. * tree-pass.h (make_pass_oacc_kernels2): Remove. (make_pass_ipa_oacc, make_pass_ipa_oacc_kernels): Declare. * tree-ssa-loop.c (pass_oacc_kernels2, make_pass_oacc_kernels2): Remove. (pass_ipa_oacc, pass_ipa_oacc_kernels): New pass. (make_pass_ipa_oacc, make_pass_ipa_oacc_kernels): New function. * tree-ssa-structalias.c (pass_ipa_pta::clone): New function. * g++.dg/ipa/devirt-37.C: Update for new fre2 pass. * g++.dg/ipa/devirt-40.C: Same. * g++.dg/tree-ssa/pr61034.C: Same. * gcc.dg/ipa/ipa-pta-1.c: Update for new pta1 pass. * gcc.dg/ipa/ipa-pta-10.c: Same. * gcc.dg/ipa/ipa-pta-11.c: Same. * gcc.dg/ipa/ipa-pta-14.c: Same. * gcc.dg/ipa/ipa-pta-16.c: Same. * gcc.dg/ipa/ipa-pta-2.c: Same. * gcc.dg/ipa/ipa-pta-5.c: Same. * gcc.dg/ipa/ipa-pta-6.c: Same. * gcc.dg/torture/ipa-pta-1.c: Same. * gcc.dg/ipa/ipa-pta-13.c: Update for new fre2 and pta1 pass. * gcc.dg/ipa/ipa-pta-3.c: Same. * gcc.dg/ipa/ipa-pta-4.c: Same. From-SVN: r231690
Diffstat (limited to 'gcc/tree-ssa-loop.c')
-rw-r--r--gcc/tree-ssa-loop.c76
1 files changed, 55 insertions, 21 deletions
diff --git a/gcc/tree-ssa-loop.c b/gcc/tree-ssa-loop.c
index cf7d94e..1fe2716 100644
--- a/gcc/tree-ssa-loop.c
+++ b/gcc/tree-ssa-loop.c
@@ -36,6 +36,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-scalar-evolution.h"
#include "tree-vectorizer.h"
#include "omp-low.h"
+#include "diagnostic-core.h"
/* A pass making sure loops are fixed up. */
@@ -206,12 +207,14 @@ make_pass_oacc_kernels (gcc::context *ctxt)
return new pass_oacc_kernels (ctxt);
}
+/* The ipa oacc superpass. */
+
namespace {
-const pass_data pass_data_oacc_kernels2 =
+const pass_data pass_data_ipa_oacc =
{
- GIMPLE_PASS, /* type */
- "oacc_kernels2", /* name */
+ SIMPLE_IPA_PASS, /* type */
+ "ipa_oacc", /* name */
OPTGROUP_LOOP, /* optinfo_flags */
TV_TREE_LOOP, /* tv_id */
PROP_cfg, /* properties_required */
@@ -221,34 +224,65 @@ const pass_data pass_data_oacc_kernels2 =
0, /* todo_flags_finish */
};
-class pass_oacc_kernels2 : public gimple_opt_pass
+class pass_ipa_oacc : public simple_ipa_opt_pass
{
public:
- pass_oacc_kernels2 (gcc::context *ctxt)
- : gimple_opt_pass (pass_data_oacc_kernels2, ctxt)
+ pass_ipa_oacc (gcc::context *ctxt)
+ : simple_ipa_opt_pass (pass_data_ipa_oacc, ctxt)
{}
/* opt_pass methods: */
- virtual bool gate (function *fn) { return gate_oacc_kernels (fn); }
- virtual unsigned int execute (function *fn)
- {
- /* Rather than having a copy of the previous dump, get some use out of
- this dump, and try to minimize differences with the following pass
- (pass_lim), which will initizalize the loop optimizer with
- LOOPS_NORMAL. */
- loop_optimizer_init (LOOPS_NORMAL);
- loop_optimizer_finalize (fn);
- return 0;
- }
+ virtual bool gate (function *)
+ {
+ return (optimize
+ /* Don't bother doing anything if the program has errors. */
+ && !seen_error ()
+ && flag_openacc
+ && flag_tree_parallelize_loops > 1);
+ }
-}; // class pass_oacc_kernels2
+}; // class pass_ipa_oacc
} // anon namespace
-gimple_opt_pass *
-make_pass_oacc_kernels2 (gcc::context *ctxt)
+simple_ipa_opt_pass *
+make_pass_ipa_oacc (gcc::context *ctxt)
+{
+ return new pass_ipa_oacc (ctxt);
+}
+
+/* The ipa oacc kernels pass. */
+
+namespace {
+
+const pass_data pass_data_ipa_oacc_kernels =
+{
+ SIMPLE_IPA_PASS, /* type */
+ "ipa_oacc_kernels", /* name */
+ OPTGROUP_LOOP, /* optinfo_flags */
+ TV_TREE_LOOP, /* tv_id */
+ PROP_cfg, /* properties_required */
+ 0, /* properties_provided */
+ 0, /* properties_destroyed */
+ 0, /* todo_flags_start */
+ 0, /* todo_flags_finish */
+};
+
+class pass_ipa_oacc_kernels : public simple_ipa_opt_pass
+{
+public:
+ pass_ipa_oacc_kernels (gcc::context *ctxt)
+ : simple_ipa_opt_pass (pass_data_ipa_oacc_kernels, ctxt)
+ {}
+
+}; // class pass_ipa_oacc_kernels
+
+} // anon namespace
+
+simple_ipa_opt_pass *
+make_pass_ipa_oacc_kernels (gcc::context *ctxt)
{
- return new pass_oacc_kernels2 (ctxt);
+ return new pass_ipa_oacc_kernels (ctxt);
}
/* The no-loop superpass. */