diff options
author | Tom de Vries <tom@codesourcery.com> | 2015-12-16 13:49:07 +0000 |
---|---|---|
committer | Tom de Vries <vries@gcc.gnu.org> | 2015-12-16 13:49:07 +0000 |
commit | 597a8ab9c6f57c416c2b0a734c2098fa0335e628 (patch) | |
tree | 2932f5cc1548ca0542477812be3dbb8f67821ac7 /gcc/tree-ssa-loop.c | |
parent | f47cda24579db16228140f8849e9c456093c92ab (diff) | |
download | gcc-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.c | 76 |
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. */ |