On 10/7/22 04:51, Franz Sirl wrote:
Am 2022-09-25 um 18:28 schrieb Jeff Law:
This is a minor improvement for the core_list_find routine in coremark.
Basically for riscv, and likely other targets, we can end up with an
unconditional jump to a return statement. This is a result of
compensation code created by bb-reorder, and no jump optimization
pass runs after bb-reorder to clean this stuff up.
This patch utilizes preexisting code to identify suitable branch
targets as well as preexisting code to emit a suitable return, so
it's pretty simple. Note that when we arrange to do this
optimization, the original return block may become unreachable. So we
conditionally call delete_unreachable_blocks to fix that up.
This triggers ~160 times during an x86_64 bootstrap. Naturally it
bootstraps and regression tests on x86_64.
I've also bootstrapped this on riscv64, regression testing with qemu
shows some regressions, but AFAICT they're actually qemu bugs with
signal handling/delivery -- qemu user mode emulation is not
consistently calling user defined signal handlers. Given the same
binary, sometimes they'll get called and the test passes, other times
the handler isn't called and the test (of course) fails. I'll
probably spend some time to try and chase this down for the sake of
making testing easier.
OK for the trunk?
Hello Jeff,
I've bisected this change to break a "profiledbootstrap" on x86_64
like that:
make[3]: Entering directory
'/home/fsirl/rpmbuild/BUILD/gcc-13.0.0+gitr13+2871/obj-x86_64-suse-linux/gcc'
/home/fsirl/rpmbuild/BUILD/gcc-13.0.0+gitr13+2871/obj-x86_64-suse-linux/./prev-gcc/xg++
-B/home/fsirl/rpmbuild/BUILD/gcc-13.0.0+gitr13+2871/obj-x86_64-suse-linux/./prev-gcc/
-B/usr/x86_64-suse-linux/
bin/ -nostdinc++
-B/home/fsirl/rpmbuild/BUILD/gcc-13.0.0+gitr13+2871/obj-x86_64-suse-linux/prev-x86_64-suse-linux/libstdc++-v3/src/.libs
-B/home/fsirl/rpmbuild/BUILD/gcc-13.0.0+gitr13+2871/obj-x86_64
-suse-linux/prev-x86_64-suse-linux/libstdc++-v3/libsupc++/.libs
-I/home/fsirl/rpmbuild/BUILD/gcc-13.0.0+gitr13+2871/obj-x86_64-suse-linux/prev-x86_64-suse-linux/libstdc++-v3/include/x86_64-suse-linu
x
-I/home/fsirl/rpmbuild/BUILD/gcc-13.0.0+gitr13+2871/obj-x86_64-suse-linux/prev-x86_64-suse-linux/libstdc++-v3/include
-I/home/fsirl/rpmbuild/BUILD/gcc-13.0.0+gitr13+2871/libstdc++-v3/libsupc++
-L
/home/fsirl/rpmbuild/BUILD/gcc-13.0.0+gitr13+2871/obj-x86_64-suse-linux/prev-x86_64-suse-linux/libstdc++-v3/src/.libs
-L/home/fsirl/rpmbuild/BUILD/gcc-13.0.0+gitr13+2871/obj-x86_64-suse-linux/prev-x8
6_64-suse-linux/libstdc++-v3/libsupc++/.libs -fno-PIE -c -O2 -g
-fmessage-length=0 -D_FORTIFY_SOURCE=2 -funwind-tables
-fasynchronous-unwind-tables -U_FORTIFY_SOURCE -fprofile-use
-fprofile-reprod
ucible=parallel-runs -DIN_GCC -fno-exceptions -fno-rtti
-fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings
-Wcast-qual -Wmissing-format-attribute -Woverloaded-virtual -pedantic
-Wno-long-long -Wno-variadic-macros -Wno-overlength-strings
-fno-common -DHAVE_CONFIG_H -I. -I. -I../../gcc -I../../gcc/.
-I../../gcc/../include -I../../gcc/../libcpp/include
-I../../gcc/../libcody
-I../../gcc/../libdecnumber -I../../gcc/../libdecnumber/bid
-I../libdecnumber -I../../gcc/../libbacktrace -o cgraph.o -MT
cgraph.o -MMD -MP -MF ./.deps/cgraph.TPo ../../gcc/cgraph.cc
../../gcc/cgraph.cc: In member function 'cgraph_edge*
cgraph_edge::first_speculative_call_target()':
../../gcc/cgraph.cc:1166:1: error: EDGE_CROSSING incorrectly set
across same section
1166 | }
| ^
../../gcc/cgraph.cc:1166:1: error: No region crossing jump at section
boundary in bb 19
during RTL pass: bbro
../../gcc/cgraph.cc:1166:1: internal compiler error: verify_flow_info
failed
0xa7116e verify_flow_info()
../../gcc/cfghooks.cc:284
0x1c64958 execute
../../gcc/bb-reorder.cc:2663
In such a case, what do you need to reproduce it? I'm a mere user of
the Suse RPM builds here, no idea if profiling needs any extra data to
reproduce to bug.
Franz, it's been a long time. Good to hear from you.
I'll take a look. I'll start with a profiledbootstrap and if that
doesn't reproduce I'll get in contact
jeff