On Fri, 2020-08-14 at 07:27 +0200, Hans-Peter Nilsson via Gcc-patches wrote: > Originally I thought to bootstrap this patch on MIPS and SPARC > since they're both delayed-branch-slot targets but I > reconsidered, as neither is a TARGET_FLAGS_REGNUM target. It > seems only visium and CRIS has this feature set, and I see no > trace of visium in neither newlib nor the simulator next to > glibc. So, I just tested cris-elf. [ Sorry, been focused on non-upstream stuff for the last month+, so yea, some stuff is falling through the cracks. ]
Ibuild newlib on visium daily. I also run the gcc testsuite, but using dummy simulator. So we're really just testing that the code generator doesn't fault and the various dg-scan style tests. http://3.14.90.209:8080/job/visium-elf/ > > This handles TARGET_FLAGS_REGNUM clobbering insns as delay-slot > fillers using a method similar to that in commit 33c2207d3fda, > where care was taken for fill_simple_delay_slots to allow such > insns when scanning for delay-slot fillers *backwards* (before > the insn). > > A TARGET_FLAGS_REGNUM target is typically a former cc0 target. > For cc0 targets, insns don't mention clobbering cc0, so the > clobbers are mentioned in the "resources" only as a special > entity and only for compare-insns and branches, where the cc0 > value matters. > > In contrast, with TARGET_FLAGS_REGNUM, most insns clobber it and > the register liveness detection in reorg.c / resource.c treats > that as a blocker (for other insns mentioning it, i.e. most) > when looking for delay-slot-filling candidates. This means that > when comparing core and performance for a delay-slot cc0 target > before and after the de-cc0 conversion, the inability to fill a > delay slot after conversion manifests as a regression. This was > one such case, for CRIS, with random_bitstring in > gcc.c-torture/execute/arith-rand-ll.c as well as the target > libgcc division function. I wouldn't be surprised if H8 would have tripped over this as well. Converting it to REG_CC is still in-progress and a failure to fill a delay slot would likely have been missed in my performance testing to-date (delay slot filling isn't terribly important on the H8 thankfully). > > After this, all known performance regressions compared to cc0 > are fixed. > > Ok to commit? > > gcc: > PR target/93372 > * reorg.c (fill_slots_from_thread): Allow trial insns that clobber > TARGET_FLAGS_REGNUM as delay-slot fillers. > > gcc/testsuite: > PR target/93372 > * gcc.target/cris/pr93372-47.c: New test. It looks reasonable to me. jeff >