On Sat, Jul 13, 2024 at 9:38 AM Hanke Zhang via Gcc <gcc@gcc.gnu.org> wrote: > > Hi, > > I'm attempting to enable more flags in Ofast, but I've encountered some > issues.
I suspect you need to handle this in the driver specs instead of in opts.cc. Since -flto-partition=one is more of a global flag rather than an optimization flag. common.opt does not mark -flto-partition= as an optimization flag either. Plus IIRC flto-partition= needs to be passed down to the linker in this case too. Thanks, Andrew Pinski > > For instance, if I want to add -flto-partition=one to Ofast, here is > the modification I made to opts.cc > > /* -Ofast adds optimizations to -O3. */ > { OPT_LEVELS_FAST, OPT_ffast_math, NULL, 1 }, > { OPT_LEVELS_FAST, OPT_fallow_store_data_races, NULL, 1 }, > { OPT_LEVELS_FAST, OPT_fsemantic_interposition, NULL, 0 }, > ++ { OPT_LEVELS_FAST, OPT_flto_partition_, NULL, LTO_PARTITION_ONE }, > > However, when I run the tests (make -k check), I encounter some > problems. One of the failed test files is gcc.dg/pr89342.c: > > /* PR other/89342 */ > /* { dg-do compile } */ > /* { dg-options "-O0" } */ > > __attribute__((optimize("Ofast"))) > void foo (void) > { > __attribute__((optimize("no-inline"))) > void bar (void) {} > bar (); > } > > The error message is as follows: > > ../gcc/testsuite/gcc.dg/pr89342.c:7:1: internal compiler error: > ‘global_options’ are modified in local context > 7 | { > | ^ > 0x9e8cf4 handle_optimize_attribute > ../../gcc/c-family/c-attribs.cc:5568 > 0x8e0902 decl_attributes(tree_node**, tree_node*, int, tree_node*) > ../../gcc/attribs.cc:872 > 0x8fe39c start_function(c_declspecs*, c_declarator*, tree_node*) > ../../gcc/c/c-decl.cc:9519 > 0x962336 c_parser_declaration_or_fndef > ../../gcc/c/c-parser.cc:2445 > 0x96b803 c_parser_external_declaration > ../../gcc/c/c-parser.cc:1779 > 0x96c263 c_parser_translation_unit > ../../gcc/c/c-parser.cc:1652 > 0x96c263 c_parse_file() > ../../gcc/c/c-parser.cc:23372 > 0x9cf4a5 c_common_parse_file() > ../../gcc/c-family/c-opts.cc:1240 > > Upon debugging, I found that the error occurs in the > cl_optimization_compare(gcc_options *ptr1, gcc_options *ptr2) function > in options-save.cc. Specifically, the discrepancy is here: > > ptr1->x_flag_lto_partition: 2, ptr2->x_flag_lto_partition: 1 > > This discrepancy leads to the error. Could you advise on how to > resolve this issue? > > (Note: My ultimate goal is not to add the -flto-partition=one flag. > This is just an example to illustrate the problem.) > > Thank you for your assistance. > > Thanks > Hanke Zhang