On Sun, Nov 17, 2024 at 1:52 PM Jan Hubicka <hubi...@ucw.cz> wrote: > > > > > > > > Am 17.11.2024 um 09:54 schrieb Andrew Pinski <pins...@gmail.com>: > > > > > > On Sat, Nov 16, 2024 at 9:27 AM haochen.jiang <haoch...@smtp.intel.com> > > > wrote: > > >> > > >> On Linux/x86_64, > > >> > > >> cee7d080d5c2a5fb8125878998b742c040ec88b4 is the first bad commit > > >> commit cee7d080d5c2a5fb8125878998b742c040ec88b4 > > >> Author: Jan Hubicka <hubi...@ucw.cz> > > >> Date: Sat Nov 16 14:04:32 2024 +0100 > > >> > > >> Ignore conditions guarding __builtin_unreachable in inliner metrics > > >> > > >> caused > > >> > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -DPREVENT_OPTIMIZATION line 16 > > >> arg1 == 1 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -DPREVENT_OPTIMIZATION line 16 > > >> arg2 == 2 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -DPREVENT_OPTIMIZATION line 16 > > >> arg3 == 3 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -DPREVENT_OPTIMIZATION line 16 > > >> arg4 == 4 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -DPREVENT_OPTIMIZATION line 16 > > >> arg5 == 5 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -DPREVENT_OPTIMIZATION line 16 > > >> arg6 == 6 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -DPREVENT_OPTIMIZATION line 16 > > >> arg7 == 30 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -DPREVENT_OPTIMIZATION line 18 > > >> arg1 == 1 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -DPREVENT_OPTIMIZATION line 18 > > >> arg2 == 2 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -DPREVENT_OPTIMIZATION line 18 > > >> arg3 == 3 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -DPREVENT_OPTIMIZATION line 18 > > >> arg4 == 4 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -DPREVENT_OPTIMIZATION line 18 > > >> arg5 == 5 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -DPREVENT_OPTIMIZATION line 18 > > >> arg6 == 6 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -DPREVENT_OPTIMIZATION line 18 > > >> arg7 == 30 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fno-use-linker-plugin > > >> -flto-partition=none -DPREVENT_OPTIMIZATION line 16 arg1 == 1 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fno-use-linker-plugin > > >> -flto-partition=none -DPREVENT_OPTIMIZATION line 16 arg2 == 2 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fno-use-linker-plugin > > >> -flto-partition=none -DPREVENT_OPTIMIZATION line 16 arg3 == 3 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fno-use-linker-plugin > > >> -flto-partition=none -DPREVENT_OPTIMIZATION line 16 arg4 == 4 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fno-use-linker-plugin > > >> -flto-partition=none -DPREVENT_OPTIMIZATION line 16 arg5 == 5 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fno-use-linker-plugin > > >> -flto-partition=none -DPREVENT_OPTIMIZATION line 16 arg6 == 6 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fno-use-linker-plugin > > >> -flto-partition=none -DPREVENT_OPTIMIZATION line 16 arg7 == 30 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fno-use-linker-plugin > > >> -flto-partition=none -DPREVENT_OPTIMIZATION line 18 arg1 == 1 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fno-use-linker-plugin > > >> -flto-partition=none -DPREVENT_OPTIMIZATION line 18 arg2 == 2 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fno-use-linker-plugin > > >> -flto-partition=none -DPREVENT_OPTIMIZATION line 18 arg3 == 3 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fno-use-linker-plugin > > >> -flto-partition=none -DPREVENT_OPTIMIZATION line 18 arg4 == 4 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fno-use-linker-plugin > > >> -flto-partition=none -DPREVENT_OPTIMIZATION line 18 arg5 == 5 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fno-use-linker-plugin > > >> -flto-partition=none -DPREVENT_OPTIMIZATION line 18 arg6 == 6 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fno-use-linker-plugin > > >> -flto-partition=none -DPREVENT_OPTIMIZATION line 18 arg7 == 30 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fuse-linker-plugin > > >> -fno-fat-lto-objects -DPREVENT_OPTIMIZATION line 16 arg1 == 1 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fuse-linker-plugin > > >> -fno-fat-lto-objects -DPREVENT_OPTIMIZATION line 16 arg2 == 2 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fuse-linker-plugin > > >> -fno-fat-lto-objects -DPREVENT_OPTIMIZATION line 16 arg3 == 3 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fuse-linker-plugin > > >> -fno-fat-lto-objects -DPREVENT_OPTIMIZATION line 16 arg4 == 4 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fuse-linker-plugin > > >> -fno-fat-lto-objects -DPREVENT_OPTIMIZATION line 16 arg5 == 5 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fuse-linker-plugin > > >> -fno-fat-lto-objects -DPREVENT_OPTIMIZATION line 16 arg6 == 6 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fuse-linker-plugin > > >> -fno-fat-lto-objects -DPREVENT_OPTIMIZATION line 16 arg7 == 30 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fuse-linker-plugin > > >> -fno-fat-lto-objects -DPREVENT_OPTIMIZATION line 18 arg1 == 1 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fuse-linker-plugin > > >> -fno-fat-lto-objects -DPREVENT_OPTIMIZATION line 18 arg2 == 2 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fuse-linker-plugin > > >> -fno-fat-lto-objects -DPREVENT_OPTIMIZATION line 18 arg3 == 3 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fuse-linker-plugin > > >> -fno-fat-lto-objects -DPREVENT_OPTIMIZATION line 18 arg4 == 4 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fuse-linker-plugin > > >> -fno-fat-lto-objects -DPREVENT_OPTIMIZATION line 18 arg5 == 5 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fuse-linker-plugin > > >> -fno-fat-lto-objects -DPREVENT_OPTIMIZATION line 18 arg6 == 6 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O2 -flto -fuse-linker-plugin > > >> -fno-fat-lto-objects -DPREVENT_OPTIMIZATION line 18 arg7 == 30 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O3 -g -DPREVENT_OPTIMIZATION line > > >> 16 arg1 == 1 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O3 -g -DPREVENT_OPTIMIZATION line > > >> 16 arg2 == 2 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O3 -g -DPREVENT_OPTIMIZATION line > > >> 16 arg3 == 3 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O3 -g -DPREVENT_OPTIMIZATION line > > >> 16 arg4 == 4 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O3 -g -DPREVENT_OPTIMIZATION line > > >> 16 arg5 == 5 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O3 -g -DPREVENT_OPTIMIZATION line > > >> 16 arg6 == 6 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O3 -g -DPREVENT_OPTIMIZATION line > > >> 16 arg7 == 30 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O3 -g -DPREVENT_OPTIMIZATION line > > >> 18 arg1 == 1 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O3 -g -DPREVENT_OPTIMIZATION line > > >> 18 arg2 == 2 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O3 -g -DPREVENT_OPTIMIZATION line > > >> 18 arg3 == 3 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O3 -g -DPREVENT_OPTIMIZATION line > > >> 18 arg4 == 4 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O3 -g -DPREVENT_OPTIMIZATION line > > >> 18 arg5 == 5 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O3 -g -DPREVENT_OPTIMIZATION line > > >> 18 arg6 == 6 > > >> FAIL: gcc.dg/guality/pr36728-2.c -O3 -g -DPREVENT_OPTIMIZATION line > > >> 18 arg7 == 30 > > >> FAIL: gcc.dg/guality/pr36728-4.c -O2 -DPREVENT_OPTIMIZATION line 14 > > >> y == 2 > > >> FAIL: gcc.dg/guality/pr36728-4.c -O2 -DPREVENT_OPTIMIZATION line 16 > > >> y == 2 > > >> FAIL: gcc.dg/guality/pr36728-4.c -O2 -flto -fno-use-linker-plugin > > >> -flto-partition=none -DPREVENT_OPTIMIZATION line 16 y == 2 > > >> FAIL: gcc.dg/guality/pr36728-4.c -O2 -flto -fuse-linker-plugin > > >> -fno-fat-lto-objects -DPREVENT_OPTIMIZATION line 14 y == 2 > > >> FAIL: gcc.dg/guality/pr36728-4.c -O2 -flto -fuse-linker-plugin > > >> -fno-fat-lto-objects -DPREVENT_OPTIMIZATION line 16 y == 2 > > >> FAIL: gcc.dg/guality/pr36728-4.c -O3 -g -DPREVENT_OPTIMIZATION line > > >> 14 y == 2 > > >> FAIL: gcc.dg/guality/pr36728-4.c -O3 -g -DPREVENT_OPTIMIZATION line > > >> 16 y == 2 > > >> FAIL: gcc.dg/guality/pr36728-4.c -Os -DPREVENT_OPTIMIZATION line 14 > > >> y == 2 > > >> FAIL: gcc.dg/guality/pr36728-4.c -Os -DPREVENT_OPTIMIZATION line 16 > > >> y == 2 > > > > > > All of these are due to now the function is being cloned and the > > > arguments are being removed as unused (they are testing the arguments > > > are still there for debugging). > > > So I suspect the functions should be marked as noclone in addition to > > > what they are currently marked as noinline. > > > > > > What do others think? > > > > Cloning should have preserved the debug info for the removed parameters. > > At least ISTR this used to work. If not, we should make it work ;) > > Sorry for that. I looked into this testcase. It fails for me no matter > of the patch, so I think I need gdb update. What happens is that I > missed accounting asm statements as necessary > > diff --git a/gcc/ipa-fnsummary.cc b/gcc/ipa-fnsummary.cc > index 87e08dad846..ac10d1c5533 100644 > --- a/gcc/ipa-fnsummary.cc > +++ b/gcc/ipa-fnsummary.cc > @@ -2804,7 +2804,8 @@ find_necessary_statements (struct cgraph_node *node) > || (is_ctrl_stmt (stmt) > && (gimple_code (stmt) != GIMPLE_COND > || !guards_builtin_unreachable (bb, cache))) > - || gimple_store_p (stmt)) > + || gimple_store_p (stmt) > + || gimple_code (stmt) == GIMPLE_ASM) > mark_stmt_necessary (stmt, worklist); > } > } > Since all stores needs to be treated as necessary in this mini-dce that > runs without alias info. I am sure I was special casing GIMPLE_ASM at > some stage, but probably removed it thinking it is handled by > gimple_store_p. > > This slightly reduces size estimate and makes ipa-cp to clone: > > int __attribute__((noinline)) > foo (int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7) > { > char x[30]; > int __attribute__ ((aligned(32))) y; > > y = 2; > asm (NOP : "=m" (y), "=m" (b) : "m" (y)); > x[0] = 25; > asm (NOP : "=m" (x[0]), "=m" (a) : "m" (x[0]), "m" (b)); > return y; > } > > because it thinks eliminating unused arg1...arg3 is a good idea. Those > args are not optimized out because they are replaced by constant, > the are just dead, and the testcase checks that dead args > are available. > > int > main () > { > int l = 0; > asm ("" : "=r" (l) : "0" (l)); > a = foo (l + 1, l + 2, l + 3, l + 4, l + 5, l + 6, l + 30); > asm volatile ("" :: "r" (l)); > return 0; > } > > So parameters are not constant, but optimized out as dead (thanks to > asm). So I think we can not trace values in debug info, because that > would mean invoking asm ("" : "=r" (l) : "0" (l)); > from dwarf that is impossible.
Hmm, I guess even caller info doesn't help if the value isn't in a DW_OP there, though it's constant at the caller, so ... Richard. > So it seems to me that while this time it caught useful but, overall the > testcase is fragile depending on ipa-cp metrics deciding when cloning is > good idea. So perhaps noclone attribute is good idea here. > The original bug is about stack alignment breaing gdb. > > Honza