https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103465

--- Comment #4 from Tomas Kalibera <tomas.kalibera at gmail dot com> ---
(In reply to Martin Liška from comment #3)
> Let's speak about the current master:
> 
> > With "12.0" (5e5f880d0452ef2cffb94f4a686d56833c9f4215), the note is not
> > emitted with -fno-reorder-blocks-and-partition, however, the other problem
> > remains. The note is still not emitted when the optimization is enabled
> > implicitly via -O2.
> 
> I see:
> 
> /xgcc -B. /home/marxin/Programming/testcases/pr103465.c -c -O2
> -freorder-blocks-and-partition
> /home/marxin/Programming/testcases/pr103465.c:2:9: note:
> ‘-freorder-blocks-and-partition’ does not support unwind info on this
> architecture
>     2 | #pragma GCC optimize ("unroll-loops")
>       |         ^~~
> /home/marxin/Programming/testcases/pr103465.c:4:1: note:
> ‘-freorder-blocks-and-partition’ does not support unwind info on this
> architecture
>     4 | int main(int argc, char **argv) {
>       | ^~~
> 
> which seems correct to me. With only -O2 there's no note emitted and the
> flags are properly dropped (same in -freorder-blocks-and-partition):
> 
> $ cat -n gcc/opts.c
> ...
>   1133    if (opts->x_flag_unwind_tables
>   1134        && !targetm_common.unwind_tables_default
>   1135        && opts->x_flag_reorder_blocks_and_partition
>   1136        && (ui_except == UI_SJLJ || ui_except >= UI_TARGET))
>   1137      {
>   1138        if (opts_set->x_flag_reorder_blocks_and_partition)
>   1139          inform (loc,
>   1140                  "%<-freorder-blocks-and-partition%> does not support
> "
>   1141                  "unwind info on this architecture");
>   1142        opts->x_flag_reorder_blocks_and_partition = 0;
>   1143        opts->x_flag_reorder_blocks = 1;
>   1144      }
> 
> So what's wrong with that, please?

Thanks for looking into this. I didn't realize an optimization can be dropped
silently - I only checked

x86_64-w64-mingw32-gcc -O2 -Q --help=optimizers

and that said "enabled". Sorry for that.

However, still talking about the current master only, I see a difference with
-O3, when I try on the repro example from Bug 103274 and -O3:

x86_64-w64-mingw32-gcc -c -S -O3 -fno-reorder-blocks-and-partition a.c -o
nropt.s

x86_64-w64-mingw32-gcc -c -S -O3 -freorder-blocks-and-partition a.c -o ropt.s
x86_64-w64-mingw32-gcc -c -S -O3  a.c -o noopt.s

All of these assembler files are different (and from my non-expert reading,
noopt.s uses the optimization and does have the invalid unwind information as
reported in Bug 103274). Is the optimization correctly dropped also with -O3
only?

Reply via email to