* [PATCH, PR81430] Use finalize_options in lto1 @ 2017-07-20 9:22 Tom de Vries 2017-07-20 10:10 ` Richard Biener 2017-07-21 9:49 ` [committed, nvptx] Add nvptx_override_options_after_change Tom de Vries 0 siblings, 2 replies; 10+ messages in thread From: Tom de Vries @ 2017-07-20 9:22 UTC (permalink / raw) To: Richard Biener; +Cc: GCC Patches, Thomas Schwinge [-- Attachment #1: Type: text/plain, Size: 2099 bytes --] Hi, this patch fixes PR81430, an ICE in the libgomp testsuite for both openmp and openacc test-cases for x86_64 with nvptx accelerator. The scenario how we hit the ICE is as follows: - a testcase is compiled with -O2 - ix86_option_optimization_table enables OPT_freorder_blocks_and_partition at -O2 - cc1 writes out the flag as part of DECL_FUNCTION_SPECIFIC_OPTIMIZATION - lto1 reads in the flag as part of DECL_FUNCTION_SPECIFIC_OPTIMIZATION - lto1 uses the flag, and runs pass_partition_blocks - pass_partition_blocks ICEs, because it generates code that is not supported by the nvptx target. Note that for standalone compilation for single-thread ptx execution, we don't attempt to run pass_partition_blocks. This is because for nvptx, TARGET_HAVE_NAMED_SECTIONS is set to false, and this bit in finish_options switches off pass_partition_blocks: ... /* If the target requested unwind info, then turn off the partitioning optimization with a different message. Likewise, if the target does not support named sections. */ if (opts->x_flag_reorder_blocks_and_partition && (!targetm_common.have_named_sections || (opts->x_flag_unwind_tables && targetm_common.unwind_tables_default && (ui_except == UI_SJLJ || ui_except >= UI_TARGET)))) { if (opts_set->x_flag_reorder_blocks_and_partition) inform (loc, "-freorder-blocks-and-partition does not work " "on this architecture"); opts->x_flag_reorder_blocks_and_partition = 0; opts->x_flag_reorder_blocks = 1; } ... The patch fixes this by calling finish_options in lto1 after cl_optimization_restore. Points for review: 1. I'm uncertain though about the placement of the call. Perhaps it should be in cl_optimization_restore, before targetm.override_options_after_change? 2. I think that this is offloading specific, so perhaps this should be guarded with lto_stream_offload_p or #ifdef ACCEL_COMPILER or some such. Bootstrapped and reg-tested on x86_64. OK for trunk? Thanks, - Tom [-- Attachment #2: 0001-Use-finalize_options-in-lto1.patch --] [-- Type: text/x-patch, Size: 1009 bytes --] Use finalize_options in lto1 2017-07-20 Tom de Vries <tom@codesourcery.com> PR lto/81430 * function.c (invoke_set_current_function_hook): Call finish_options in lto1 after cl_optimization_restore. --- gcc/function.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gcc/function.c b/gcc/function.c index f625489..ccb312b 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -77,6 +77,7 @@ along with GCC; see the file COPYING3. If not see #include "rtl-chkp.h" #include "tree-dfa.h" #include "tree-ssa.h" +#include "opts.h" /* So we can assign to cfun in this file. */ #undef cfun @@ -4793,6 +4794,11 @@ invoke_set_current_function_hook (tree fndecl) { optimization_current_node = opts; cl_optimization_restore (&global_options, TREE_OPTIMIZATION (opts)); + if (in_lto_p) + finish_options (&global_options, &global_options_set, + (fndecl + ? DECL_SOURCE_LOCATION (fndecl) + : UNKNOWN_LOCATION)); } targetm.set_current_function (fndecl); ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH, PR81430] Use finalize_options in lto1 2017-07-20 9:22 [PATCH, PR81430] Use finalize_options in lto1 Tom de Vries @ 2017-07-20 10:10 ` Richard Biener 2017-07-20 15:35 ` Tom de Vries 2017-07-21 9:49 ` [committed, nvptx] Add nvptx_override_options_after_change Tom de Vries 1 sibling, 1 reply; 10+ messages in thread From: Richard Biener @ 2017-07-20 10:10 UTC (permalink / raw) To: Tom de Vries; +Cc: GCC Patches, Thomas Schwinge On Thu, 20 Jul 2017, Tom de Vries wrote: > Hi, > > this patch fixes PR81430, an ICE in the libgomp testsuite for both openmp and > openacc test-cases for x86_64 with nvptx accelerator. > > The scenario how we hit the ICE is as follows: > - a testcase is compiled with -O2 > - ix86_option_optimization_table enables > OPT_freorder_blocks_and_partition at -O2 > - cc1 writes out the flag as part of DECL_FUNCTION_SPECIFIC_OPTIMIZATION > - lto1 reads in the flag as part of DECL_FUNCTION_SPECIFIC_OPTIMIZATION > - lto1 uses the flag, and runs pass_partition_blocks > - pass_partition_blocks ICEs, because it generates code that is not > supported by the nvptx target. > > Note that for standalone compilation for single-thread ptx execution, we don't > attempt to run pass_partition_blocks. This is because for nvptx, > TARGET_HAVE_NAMED_SECTIONS is set to false, and this bit in finish_options > switches off pass_partition_blocks: > ... > /* If the target requested unwind info, then turn off the > partitioning optimization with a different message. Likewise, if > the target does not support named sections. */ > > if (opts->x_flag_reorder_blocks_and_partition > && (!targetm_common.have_named_sections > || (opts->x_flag_unwind_tables > && targetm_common.unwind_tables_default > && (ui_except == UI_SJLJ || ui_except >= UI_TARGET)))) > { > if (opts_set->x_flag_reorder_blocks_and_partition) > inform (loc, > "-freorder-blocks-and-partition does not work " > "on this architecture"); > opts->x_flag_reorder_blocks_and_partition = 0; > opts->x_flag_reorder_blocks = 1; > } > ... > > The patch fixes this by calling finish_options in lto1 after > cl_optimization_restore. > > Points for review: > 1. I'm uncertain though about the placement of the call. Perhaps it should be > in cl_optimization_restore, before targetm.override_options_after_change? > > 2. I think that this is offloading specific, so perhaps this should be guarded > with lto_stream_offload_p or #ifdef ACCEL_COMPILER or some such. Hmm, I agree with #2. I think it conceptually is a LTO stream adjustment and thus we should do this at the time we stream in the optimization/target nodes (like we remap modes for example). Not sure if it's possible to do this at that point, but it looks like finish_options takes two option structs and thus we should be able to call it. Do you get the inform note? I suppose we don't really want that, no? Richard. > Bootstrapped and reg-tested on x86_64. > > OK for trunk? > > Thanks, > - Tom > -- Richard Biener <rguenther@suse.de> SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg) ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH, PR81430] Use finalize_options in lto1 2017-07-20 10:10 ` Richard Biener @ 2017-07-20 15:35 ` Tom de Vries 2017-07-21 9:41 ` Richard Biener 0 siblings, 1 reply; 10+ messages in thread From: Tom de Vries @ 2017-07-20 15:35 UTC (permalink / raw) To: Richard Biener; +Cc: GCC Patches, Thomas Schwinge On 07/20/2017 12:10 PM, Richard Biener wrote: > On Thu, 20 Jul 2017, Tom de Vries wrote: > >> Hi, >> >> this patch fixes PR81430, an ICE in the libgomp testsuite for both openmp and >> openacc test-cases for x86_64 with nvptx accelerator. >> >> The scenario how we hit the ICE is as follows: >> - a testcase is compiled with -O2 >> - ix86_option_optimization_table enables >> OPT_freorder_blocks_and_partition at -O2 >> - cc1 writes out the flag as part of DECL_FUNCTION_SPECIFIC_OPTIMIZATION >> - lto1 reads in the flag as part of DECL_FUNCTION_SPECIFIC_OPTIMIZATION >> - lto1 uses the flag, and runs pass_partition_blocks >> - pass_partition_blocks ICEs, because it generates code that is not >> supported by the nvptx target. >> >> Note that for standalone compilation for single-thread ptx execution, we don't >> attempt to run pass_partition_blocks. This is because for nvptx, >> TARGET_HAVE_NAMED_SECTIONS is set to false, and this bit in finish_options >> switches off pass_partition_blocks: >> ... >> /* If the target requested unwind info, then turn off the >> partitioning optimization with a different message. Likewise, if >> the target does not support named sections. */ >> >> if (opts->x_flag_reorder_blocks_and_partition >> && (!targetm_common.have_named_sections >> || (opts->x_flag_unwind_tables >> && targetm_common.unwind_tables_default >> && (ui_except == UI_SJLJ || ui_except >= UI_TARGET)))) >> { >> if (opts_set->x_flag_reorder_blocks_and_partition) >> inform (loc, >> "-freorder-blocks-and-partition does not work " >> "on this architecture"); >> opts->x_flag_reorder_blocks_and_partition = 0; >> opts->x_flag_reorder_blocks = 1; >> } >> ... >> >> The patch fixes this by calling finish_options in lto1 after >> cl_optimization_restore. >> >> Points for review: >> 1. I'm uncertain though about the placement of the call. Perhaps it should be >> in cl_optimization_restore, before targetm.override_options_after_change? >> >> 2. I think that this is offloading specific, so perhaps this should be guarded >> with lto_stream_offload_p or #ifdef ACCEL_COMPILER or some such. > > Hmm, I agree with #2. I think it conceptually is a LTO stream adjustment > and thus we should do this at the time we stream in the > optimization/target nodes (like we remap modes for example). Not > sure if it's possible to do this at that point, but it looks like > finish_options takes two option structs and thus we should be able to > call it. > With what parameters? Patch below tries with same option struct, but ... > Do you get the inform note? I suppose we don't really want that, no? > ... I think that way we'll get the inform note (while the previous solution did not). I've also tried with a tmp2 memset to 0, but that ran into problems when doing a maybe_set_param_value. Thanks, - Tom diff --git a/gcc/tree-streamer-in.c b/gcc/tree-streamer-in.c index 7f7ea7f..e0e792b 100644 --- a/gcc/tree-streamer-in.c +++ b/gcc/tree-streamer-in.c @@ -33,6 +33,7 @@ along with GCC; see the file COPYING3. If not see #include "ipa-chkp.h" #include "gomp-constants.h" #include "asan.h" +#include "opts.h" /* Read a STRING_CST from the string table in DATA_IN using input @@ -769,6 +770,20 @@ lto_input_ts_function_decl_tree_pointers (struct lto_input_block *ib, DECL_FUNCTION_SPECIFIC_TARGET (expr) = stream_read_tree (ib, data_in); #endif DECL_FUNCTION_SPECIFIC_OPTIMIZATION (expr) = stream_read_tree (ib, data_in); +#ifdef ACCEL_COMPILER + { + tree opts = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (expr); + if (opts) + { + struct gcc_options tmp; + cl_optimization_restore (&tmp, TREE_OPTIMIZATION (opts)); + finish_options (&tmp, &tmp, DECL_SOURCE_LOCATION (expr)); + opts = build_optimization_node (&tmp); + + DECL_FUNCTION_SPECIFIC_OPTIMIZATION (expr) = opts; + } + } +#endif /* If the file contains a function with an EH personality set, then it was compiled with -fexceptions. In that case, initialize ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH, PR81430] Use finalize_options in lto1 2017-07-20 15:35 ` Tom de Vries @ 2017-07-21 9:41 ` Richard Biener 2017-07-21 13:40 ` Tom de Vries 0 siblings, 1 reply; 10+ messages in thread From: Richard Biener @ 2017-07-21 9:41 UTC (permalink / raw) To: Tom de Vries; +Cc: GCC Patches, Thomas Schwinge On Thu, 20 Jul 2017, Tom de Vries wrote: > On 07/20/2017 12:10 PM, Richard Biener wrote: > > On Thu, 20 Jul 2017, Tom de Vries wrote: > > > > > Hi, > > > > > > this patch fixes PR81430, an ICE in the libgomp testsuite for both openmp > > > and > > > openacc test-cases for x86_64 with nvptx accelerator. > > > > > > The scenario how we hit the ICE is as follows: > > > - a testcase is compiled with -O2 > > > - ix86_option_optimization_table enables > > > OPT_freorder_blocks_and_partition at -O2 > > > - cc1 writes out the flag as part of DECL_FUNCTION_SPECIFIC_OPTIMIZATION > > > - lto1 reads in the flag as part of DECL_FUNCTION_SPECIFIC_OPTIMIZATION > > > - lto1 uses the flag, and runs pass_partition_blocks > > > - pass_partition_blocks ICEs, because it generates code that is not > > > supported by the nvptx target. > > > > > > Note that for standalone compilation for single-thread ptx execution, we > > > don't > > > attempt to run pass_partition_blocks. This is because for nvptx, > > > TARGET_HAVE_NAMED_SECTIONS is set to false, and this bit in finish_options > > > switches off pass_partition_blocks: > > > ... > > > /* If the target requested unwind info, then turn off the > > > partitioning optimization with a different message. Likewise, if > > > the target does not support named sections. */ > > > > > > if (opts->x_flag_reorder_blocks_and_partition > > > && (!targetm_common.have_named_sections > > > || (opts->x_flag_unwind_tables > > > && targetm_common.unwind_tables_default > > > && (ui_except == UI_SJLJ || ui_except >= UI_TARGET)))) > > > { > > > if (opts_set->x_flag_reorder_blocks_and_partition) > > > inform (loc, > > > "-freorder-blocks-and-partition does not work " > > > "on this architecture"); > > > opts->x_flag_reorder_blocks_and_partition = 0; > > > opts->x_flag_reorder_blocks = 1; > > > } > > > ... > > > > > > The patch fixes this by calling finish_options in lto1 after > > > cl_optimization_restore. > > > > > > Points for review: > > > 1. I'm uncertain though about the placement of the call. Perhaps it should > > > be > > > in cl_optimization_restore, before targetm.override_options_after_change? > > > > > > 2. I think that this is offloading specific, so perhaps this should be > > > guarded > > > with lto_stream_offload_p or #ifdef ACCEL_COMPILER or some such. > > > > Hmm, I agree with #2. I think it conceptually is a LTO stream adjustment > > and thus we should do this at the time we stream in the > > optimization/target nodes (like we remap modes for example). Not > > sure if it's possible to do this at that point, but it looks like > > finish_options takes two option structs and thus we should be able to > > call it. > > > > With what parameters? Patch below tries with same option struct, but ... > > > Do you get the inform note? I suppose we don't really want that, no? > > > > ... I think that way we'll get the inform note (while the previous solution > did not). > > I've also tried with a tmp2 memset to 0, but that ran into problems when doing > a maybe_set_param_value. Use global_options_set? That should do what the other patch did. > Thanks, > - Tom > > diff --git a/gcc/tree-streamer-in.c b/gcc/tree-streamer-in.c > index 7f7ea7f..e0e792b 100644 > --- a/gcc/tree-streamer-in.c > +++ b/gcc/tree-streamer-in.c > @@ -33,6 +33,7 @@ along with GCC; see the file COPYING3. If not see > #include "ipa-chkp.h" > #include "gomp-constants.h" > #include "asan.h" > +#include "opts.h" > > > /* Read a STRING_CST from the string table in DATA_IN using input > @@ -769,6 +770,20 @@ lto_input_ts_function_decl_tree_pointers (struct > lto_input_block *ib, > DECL_FUNCTION_SPECIFIC_TARGET (expr) = stream_read_tree (ib, data_in); > #endif > DECL_FUNCTION_SPECIFIC_OPTIMIZATION (expr) = stream_read_tree (ib, > data_in); > +#ifdef ACCEL_COMPILER > + { > + tree opts = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (expr); > + if (opts) > + { > + struct gcc_options tmp; > + cl_optimization_restore (&tmp, TREE_OPTIMIZATION (opts)); > + finish_options (&tmp, &tmp, DECL_SOURCE_LOCATION (expr)); > + opts = build_optimization_node (&tmp); > + > + DECL_FUNCTION_SPECIFIC_OPTIMIZATION (expr) = opts; > + } > + } > +#endif > > /* If the file contains a function with an EH personality set, > then it was compiled with -fexceptions. In that case, initialize > > -- Richard Biener <rguenther@suse.de> SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg) ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH, PR81430] Use finalize_options in lto1 2017-07-21 9:41 ` Richard Biener @ 2017-07-21 13:40 ` Tom de Vries 2017-07-25 11:24 ` Richard Biener 0 siblings, 1 reply; 10+ messages in thread From: Tom de Vries @ 2017-07-21 13:40 UTC (permalink / raw) To: Richard Biener; +Cc: GCC Patches, Thomas Schwinge [-- Attachment #1: Type: text/plain, Size: 3976 bytes --] On 07/21/2017 11:41 AM, Richard Biener wrote: > On Thu, 20 Jul 2017, Tom de Vries wrote: > >> On 07/20/2017 12:10 PM, Richard Biener wrote: >>> On Thu, 20 Jul 2017, Tom de Vries wrote: >>> >>>> Hi, >>>> >>>> this patch fixes PR81430, an ICE in the libgomp testsuite for both openmp >>>> and >>>> openacc test-cases for x86_64 with nvptx accelerator. >>>> >>>> The scenario how we hit the ICE is as follows: >>>> - a testcase is compiled with -O2 >>>> - ix86_option_optimization_table enables >>>> OPT_freorder_blocks_and_partition at -O2 >>>> - cc1 writes out the flag as part of DECL_FUNCTION_SPECIFIC_OPTIMIZATION >>>> - lto1 reads in the flag as part of DECL_FUNCTION_SPECIFIC_OPTIMIZATION >>>> - lto1 uses the flag, and runs pass_partition_blocks >>>> - pass_partition_blocks ICEs, because it generates code that is not >>>> supported by the nvptx target. >>>> >>>> Note that for standalone compilation for single-thread ptx execution, we >>>> don't >>>> attempt to run pass_partition_blocks. This is because for nvptx, >>>> TARGET_HAVE_NAMED_SECTIONS is set to false, and this bit in finish_options >>>> switches off pass_partition_blocks: >>>> ... >>>> /* If the target requested unwind info, then turn off the >>>> partitioning optimization with a different message. Likewise, if >>>> the target does not support named sections. */ >>>> >>>> if (opts->x_flag_reorder_blocks_and_partition >>>> && (!targetm_common.have_named_sections >>>> || (opts->x_flag_unwind_tables >>>> && targetm_common.unwind_tables_default >>>> && (ui_except == UI_SJLJ || ui_except >= UI_TARGET)))) >>>> { >>>> if (opts_set->x_flag_reorder_blocks_and_partition) >>>> inform (loc, >>>> "-freorder-blocks-and-partition does not work " >>>> "on this architecture"); >>>> opts->x_flag_reorder_blocks_and_partition = 0; >>>> opts->x_flag_reorder_blocks = 1; >>>> } >>>> ... >>>> >>>> The patch fixes this by calling finish_options in lto1 after >>>> cl_optimization_restore. >>>> >>>> Points for review: >>>> 1. I'm uncertain though about the placement of the call. Perhaps it should >>>> be >>>> in cl_optimization_restore, before targetm.override_options_after_change? >>>> >>>> 2. I think that this is offloading specific, so perhaps this should be >>>> guarded >>>> with lto_stream_offload_p or #ifdef ACCEL_COMPILER or some such. >>> >>> Hmm, I agree with #2. I think it conceptually is a LTO stream adjustment >>> and thus we should do this at the time we stream in the >>> optimization/target nodes (like we remap modes for example). Not >>> sure if it's possible to do this at that point, but it looks like >>> finish_options takes two option structs and thus we should be able to >>> call it. >>> >> >> With what parameters? Patch below tries with same option struct, but ... >> >>> Do you get the inform note? I suppose we don't really want that, no? >>> >> >> ... I think that way we'll get the inform note (while the previous solution >> did not). >> >> I've also tried with a tmp2 memset to 0, but that ran into problems when doing >> a maybe_set_param_value. > > Use global_options_set? That should do what the other patch did. > I managed to get it working now. The variable tmp was only partly initialized, which caused the problems when calling maybe_set_param_value. I'm now using init_options_struct. There's no note when using -O2 or "-O2 -freorder-blocks-and-partition". But when I do "-O2 -foffload=-freorder-blocks-and-partition" I get: ... lto1: note: '-freorder-blocks-and-partition' does not work on this architecture lto1: note: '-freorder-blocks-and-partition' does not support unwind info on this architecture ... And for "-O0 -foffload=-freorder-blocks-and-partition" I just get: ... lto1: note: '-freorder-blocks-and-partition' does not work on this architecture ... Thanks, - Tom [-- Attachment #2: 0002-Call-finish_options-in-lto1.patch --] [-- Type: text/x-patch, Size: 1335 bytes --] Call finish_options in lto1 --- gcc/tree-streamer-in.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/gcc/tree-streamer-in.c b/gcc/tree-streamer-in.c index d7b6d22..eb41e75 100644 --- a/gcc/tree-streamer-in.c +++ b/gcc/tree-streamer-in.c @@ -33,6 +33,7 @@ along with GCC; see the file COPYING3. If not see #include "ipa-chkp.h" #include "gomp-constants.h" #include "asan.h" +#include "opts.h" /* Read a STRING_CST from the string table in DATA_IN using input @@ -769,6 +770,21 @@ lto_input_ts_function_decl_tree_pointers (struct lto_input_block *ib, DECL_FUNCTION_SPECIFIC_TARGET (expr) = stream_read_tree (ib, data_in); #endif DECL_FUNCTION_SPECIFIC_OPTIMIZATION (expr) = stream_read_tree (ib, data_in); +#ifdef ACCEL_COMPILER + { + tree opts = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (expr); + if (opts) + { + struct gcc_options tmp; + init_options_struct (&tmp, NULL); + cl_optimization_restore (&tmp, TREE_OPTIMIZATION (opts)); + finish_options (&tmp, &global_options_set, UNKNOWN_LOCATION); + opts = build_optimization_node (&tmp); + finalize_options_struct (&tmp); + DECL_FUNCTION_SPECIFIC_OPTIMIZATION (expr) = opts; + } + } +#endif /* If the file contains a function with an EH personality set, then it was compiled with -fexceptions. In that case, initialize ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH, PR81430] Use finalize_options in lto1 2017-07-21 13:40 ` Tom de Vries @ 2017-07-25 11:24 ` Richard Biener 0 siblings, 0 replies; 10+ messages in thread From: Richard Biener @ 2017-07-25 11:24 UTC (permalink / raw) To: Tom de Vries; +Cc: GCC Patches, Thomas Schwinge On Fri, 21 Jul 2017, Tom de Vries wrote: > On 07/21/2017 11:41 AM, Richard Biener wrote: > > On Thu, 20 Jul 2017, Tom de Vries wrote: > > > > > On 07/20/2017 12:10 PM, Richard Biener wrote: > > > > On Thu, 20 Jul 2017, Tom de Vries wrote: > > > > > > > > > Hi, > > > > > > > > > > this patch fixes PR81430, an ICE in the libgomp testsuite for both > > > > > openmp > > > > > and > > > > > openacc test-cases for x86_64 with nvptx accelerator. > > > > > > > > > > The scenario how we hit the ICE is as follows: > > > > > - a testcase is compiled with -O2 > > > > > - ix86_option_optimization_table enables > > > > > OPT_freorder_blocks_and_partition at -O2 > > > > > - cc1 writes out the flag as part of > > > > > DECL_FUNCTION_SPECIFIC_OPTIMIZATION > > > > > - lto1 reads in the flag as part of > > > > > DECL_FUNCTION_SPECIFIC_OPTIMIZATION > > > > > - lto1 uses the flag, and runs pass_partition_blocks > > > > > - pass_partition_blocks ICEs, because it generates code that is not > > > > > supported by the nvptx target. > > > > > > > > > > Note that for standalone compilation for single-thread ptx execution, > > > > > we > > > > > don't > > > > > attempt to run pass_partition_blocks. This is because for nvptx, > > > > > TARGET_HAVE_NAMED_SECTIONS is set to false, and this bit in > > > > > finish_options > > > > > switches off pass_partition_blocks: > > > > > ... > > > > > /* If the target requested unwind info, then turn off the > > > > > partitioning optimization with a different message. Likewise, > > > > > if > > > > > the target does not support named sections. */ > > > > > > > > > > if (opts->x_flag_reorder_blocks_and_partition > > > > > && (!targetm_common.have_named_sections > > > > > || (opts->x_flag_unwind_tables > > > > > && targetm_common.unwind_tables_default > > > > > && (ui_except == UI_SJLJ || ui_except >= UI_TARGET)))) > > > > > { > > > > > if (opts_set->x_flag_reorder_blocks_and_partition) > > > > > inform (loc, > > > > > "-freorder-blocks-and-partition does not work " > > > > > "on this architecture"); > > > > > opts->x_flag_reorder_blocks_and_partition = 0; > > > > > opts->x_flag_reorder_blocks = 1; > > > > > } > > > > > ... > > > > > > > > > > The patch fixes this by calling finish_options in lto1 after > > > > > cl_optimization_restore. > > > > > > > > > > Points for review: > > > > > 1. I'm uncertain though about the placement of the call. Perhaps it > > > > > should > > > > > be > > > > > in cl_optimization_restore, before > > > > > targetm.override_options_after_change? > > > > > > > > > > 2. I think that this is offloading specific, so perhaps this should be > > > > > guarded > > > > > with lto_stream_offload_p or #ifdef ACCEL_COMPILER or some such. > > > > > > > > Hmm, I agree with #2. I think it conceptually is a LTO stream > > > > adjustment > > > > and thus we should do this at the time we stream in the > > > > optimization/target nodes (like we remap modes for example). Not > > > > sure if it's possible to do this at that point, but it looks like > > > > finish_options takes two option structs and thus we should be able to > > > > call it. > > > > > > > > > > With what parameters? Patch below tries with same option struct, but ... > > > > > > > Do you get the inform note? I suppose we don't really want that, no? > > > > > > > > > > ... I think that way we'll get the inform note (while the previous > > > solution > > > did not). > > > > > > I've also tried with a tmp2 memset to 0, but that ran into problems when > > > doing > > > a maybe_set_param_value. > > > > Use global_options_set? That should do what the other patch did. > > > > I managed to get it working now. The variable tmp was only partly > initialized, which caused the problems when calling maybe_set_param_value. I'm > now using init_options_struct. > > There's no note when using -O2 or "-O2 -freorder-blocks-and-partition". > > But when I do "-O2 -foffload=-freorder-blocks-and-partition" I get: > ... > lto1: note: '-freorder-blocks-and-partition' does not work on this > architecture > lto1: note: '-freorder-blocks-and-partition' does not support unwind info on > this architecture > ... > > And for "-O0 -foffload=-freorder-blocks-and-partition" I just get: > ... > lto1: note: '-freorder-blocks-and-partition' does not work on this > architecture > ... Ok. Thanks, Richard. > Thanks, > - Tom > -- Richard Biener <rguenther@suse.de> SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg) ^ permalink raw reply [flat|nested] 10+ messages in thread
* [committed, nvptx] Add nvptx_override_options_after_change @ 2017-07-21 9:49 ` Tom de Vries 2017-08-08 8:46 ` Thomas Schwinge 0 siblings, 1 reply; 10+ messages in thread From: Tom de Vries @ 2017-07-21 9:49 UTC (permalink / raw) To: GCC Patches [-- Attachment #1: Type: text/plain, Size: 165 bytes --] Hi, this patch adds nvptx_override_options_after_change, containing a workaround for PR81430. Tested on x86_64 with nvptx accelerator. Committed. Thanks, - Tom [-- Attachment #2: 0001-Add-nvptx_override_options_after_change.patch --] [-- Type: text/x-patch, Size: 1499 bytes --] Add nvptx_override_options_after_change 2017-07-21 Tom de Vries <tom@codesourcery.com> PR lto/81430 * config/nvptx/nvptx.c (nvptx_override_options_after_change): New function. (TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE): Define to nvptx_override_options_after_change. --- gcc/config/nvptx/nvptx.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/gcc/config/nvptx/nvptx.c b/gcc/config/nvptx/nvptx.c index d0aa054..a718054 100644 --- a/gcc/config/nvptx/nvptx.c +++ b/gcc/config/nvptx/nvptx.c @@ -207,6 +207,17 @@ nvptx_option_override (void) target_flags |= MASK_SOFT_STACK | MASK_UNIFORM_SIMT; } +/* Implement TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE. */ + +static void +nvptx_override_options_after_change (void) +{ + /* This is a workaround for PR81430 - nvptx acceleration compilation broken + because of running pass_partition_blocks. This should be dealt with in the + common code, not in the target. */ + flag_reorder_blocks_and_partition = 0; +} + /* Return a ptx type for MODE. If PROMOTE, then use .u32 for QImode to deal with ptx ideosyncracies. */ @@ -5505,6 +5516,9 @@ nvptx_data_alignment (const_tree type, unsigned int basic_align) #undef TARGET_OPTION_OVERRIDE #define TARGET_OPTION_OVERRIDE nvptx_option_override +#undef TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE +#define TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE nvptx_override_options_after_change + #undef TARGET_ATTRIBUTE_TABLE #define TARGET_ATTRIBUTE_TABLE nvptx_attribute_table ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [committed, nvptx] Add nvptx_override_options_after_change 2017-07-21 9:49 ` [committed, nvptx] Add nvptx_override_options_after_change Tom de Vries @ 2017-08-08 8:46 ` Thomas Schwinge 2017-08-08 8:58 ` Tom de Vries 0 siblings, 1 reply; 10+ messages in thread From: Thomas Schwinge @ 2017-08-08 8:46 UTC (permalink / raw) To: Tom de Vries; +Cc: GCC Patches Hi Tom! On Fri, 21 Jul 2017 11:49:11 +0200, Tom de Vries <Tom_deVries@mentor.com> wrote: > this patch adds nvptx_override_options_after_change, containing a > workaround for PR81430. > --- a/gcc/config/nvptx/nvptx.c > +++ b/gcc/config/nvptx/nvptx.c > @@ -207,6 +207,17 @@ nvptx_option_override (void) > target_flags |= MASK_SOFT_STACK | MASK_UNIFORM_SIMT; > } > > +/* Implement TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE. */ > + > +static void > +nvptx_override_options_after_change (void) > +{ > + /* This is a workaround for PR81430 - nvptx acceleration compilation broken > + because of running pass_partition_blocks. This should be dealt with in the > + common code, not in the target. */ > + flag_reorder_blocks_and_partition = 0; > +} Should this be reverted now that r250852 "Apply finish_options on DECL_FUNCTION_SPECIFIC_OPTIMIZATION for ACCEL_COMPILER" has been committed? (I'm confirming this works fine, thanks.) Grüße Thomas ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [committed, nvptx] Add nvptx_override_options_after_change 2017-08-08 8:46 ` Thomas Schwinge @ 2017-08-08 8:58 ` Tom de Vries 2017-08-11 16:46 ` Thomas Schwinge 0 siblings, 1 reply; 10+ messages in thread From: Tom de Vries @ 2017-08-08 8:58 UTC (permalink / raw) To: Thomas Schwinge; +Cc: GCC Patches On 08/08/2017 10:45 AM, Thomas Schwinge wrote: > Hi Tom! > > On Fri, 21 Jul 2017 11:49:11 +0200, Tom de Vries <Tom_deVries@mentor.com> wrote: >> this patch adds nvptx_override_options_after_change, containing a >> workaround for PR81430. > >> --- a/gcc/config/nvptx/nvptx.c >> +++ b/gcc/config/nvptx/nvptx.c >> @@ -207,6 +207,17 @@ nvptx_option_override (void) >> target_flags |= MASK_SOFT_STACK | MASK_UNIFORM_SIMT; >> } >> >> +/* Implement TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE. */ >> + >> +static void >> +nvptx_override_options_after_change (void) >> +{ >> + /* This is a workaround for PR81430 - nvptx acceleration compilation broken >> + because of running pass_partition_blocks. This should be dealt with in the >> + common code, not in the target. */ >> + flag_reorder_blocks_and_partition = 0; >> +} > > Should this be reverted now that r250852 "Apply finish_options on > DECL_FUNCTION_SPECIFIC_OPTIMIZATION for ACCEL_COMPILER" has been > committed? (I'm confirming this works fine, thanks.) Hi, Indeed, it can be reverted. Thanks, - Tom ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [committed, nvptx] Add nvptx_override_options_after_change 2017-08-08 8:58 ` Tom de Vries @ 2017-08-11 16:46 ` Thomas Schwinge 0 siblings, 0 replies; 10+ messages in thread From: Thomas Schwinge @ 2017-08-11 16:46 UTC (permalink / raw) To: Tom de Vries, GCC Patches Hi! On Tue, 8 Aug 2017 10:58:12 +0200, Tom de Vries <Tom_deVries@mentor.com> wrote: > On 08/08/2017 10:45 AM, Thomas Schwinge wrote: > > On Fri, 21 Jul 2017 11:49:11 +0200, Tom de Vries <Tom_deVries@mentor.com> wrote: > >> this patch adds nvptx_override_options_after_change, containing a > >> workaround for PR81430. > > Should this be reverted now that r250852 "Apply finish_options on > > DECL_FUNCTION_SPECIFIC_OPTIMIZATION for ACCEL_COMPILER" has been > > committed? (I'm confirming this works fine, thanks.) > > Indeed, it can be reverted. Committed to trunk in r251053: commit 5b005e86c8c45aa84c090064b2f789c802384fc5 Author: tschwinge <tschwinge@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Fri Aug 11 15:37:14 2017 +0000 [PR lto/81430] Revert "Add nvptx_override_options_after_change" This reverts r250421; properly fixed by r250852. PR lto/81430 * config/nvptx/nvptx.c (nvptx_override_options_after_change): Remove function. (TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE): Remove definition. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@251053 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 7 +++++++ gcc/config/nvptx/nvptx.c | 14 -------------- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git gcc/ChangeLog gcc/ChangeLog index 2975655..295b4c9 100644 --- gcc/ChangeLog +++ gcc/ChangeLog @@ -1,3 +1,10 @@ +2017-08-11 Thomas Schwinge <thomas@codesourcery.com> + + PR lto/81430 + * config/nvptx/nvptx.c (nvptx_override_options_after_change): + Remove function. + (TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE): Remove definition. + 2017-08-11 Tamar Christina <tamar.christina@arm.com> * config/aarch64/aarch64.md (mov<mode>): Change. (*movhf_aarch64, *movsf_aarch64, *movdf_aarch64): diff --git gcc/config/nvptx/nvptx.c gcc/config/nvptx/nvptx.c index ffd50d7..8babac7 100644 --- gcc/config/nvptx/nvptx.c +++ gcc/config/nvptx/nvptx.c @@ -212,17 +212,6 @@ nvptx_option_override (void) target_flags |= MASK_SOFT_STACK | MASK_UNIFORM_SIMT; } -/* Implement TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE. */ - -static void -nvptx_override_options_after_change (void) -{ - /* This is a workaround for PR81430 - nvptx acceleration compilation broken - because of running pass_partition_blocks. This should be dealt with in the - common code, not in the target. */ - flag_reorder_blocks_and_partition = 0; -} - /* Return a ptx type for MODE. If PROMOTE, then use .u32 for QImode to deal with ptx ideosyncracies. */ @@ -5527,9 +5516,6 @@ nvptx_data_alignment (const_tree type, unsigned int basic_align) #undef TARGET_OPTION_OVERRIDE #define TARGET_OPTION_OVERRIDE nvptx_option_override -#undef TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE -#define TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE nvptx_override_options_after_change - #undef TARGET_ATTRIBUTE_TABLE #define TARGET_ATTRIBUTE_TABLE nvptx_attribute_table Grüße Thomas ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2017-08-11 15:38 UTC | newest] Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2017-07-20 9:22 [PATCH, PR81430] Use finalize_options in lto1 Tom de Vries 2017-07-20 10:10 ` Richard Biener 2017-07-20 15:35 ` Tom de Vries 2017-07-21 9:41 ` Richard Biener 2017-07-21 13:40 ` Tom de Vries 2017-07-25 11:24 ` Richard Biener 2017-07-21 9:49 ` [committed, nvptx] Add nvptx_override_options_after_change Tom de Vries 2017-08-08 8:46 ` Thomas Schwinge 2017-08-08 8:58 ` Tom de Vries 2017-08-11 16:46 ` Thomas Schwinge
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).