Hi,
I'm attempting to enable more flags in Ofast, but I've encountered some issues.
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