Hi Segher, On 21/09/2020 18:35, Segher Boessenkool wrote: > Hi! > > So, I tested this patch. The test builds Linux for all targets, and the > number reported here is just binary size (usually a good indicator for > combine effectiveness). C0 is the unmodified compiler, C1 is with your > patch. A size of 0 means it did not build. > > C0 C1 > alpha 6403469 100.000% > arc 0 0 > arm 10196358 100.000% > arm64 0 20228766 > armhf 15042594 100.000% > c6x 2496218 100.000% > csky 0 0 > h8300 1217198 100.000% > i386 11966700 100.000% > ia64 18814277 100.000% > m68k 3856350 100.000% > microblaze 5864258 100.000% > mips 9142108 100.000% > mips64 7344744 100.000% > nds32 0 0 > nios2 3909477 100.000% > openrisc 4554446 100.000% > parisc 7721195 100.000% > parisc64 0 0 > powerpc 10447477 100.000% > powerpc64 22257111 100.000% > powerpc64le 19292786 100.000% > riscv32 1630934 100.000% > riscv64 7628058 100.000% > s390 15173928 100.000% > sh 3410671 100.000% > shnommu 1685616 100.000% > sparc 4737096 100.000% > sparc64 7167122 100.000% > x86_64 19718928 100.000% > xtensa 2639363 100.000%
Thanks for doing this testing. The results look good, then: no code size changes and no build regressions. > > So, there is no difference for most targets (I checked some targets and > there really is no difference). The only exception is aarch64 (which > the kernel calls "arm64"): the unpatched compiler ICEs! (At least three > times, even). Indeed, this is the intended purpose of the patch, see the PR (96998). > > during RTL pass: reload > /home/segher/src/kernel/kernel/cgroup/cgroup.c: In function > 'rebind_subsystems': > /home/segher/src/kernel/kernel/cgroup/cgroup.c:1777:1: internal compiler > error: in lra_set_insn_recog_data, at lra.c:1004 > 1777 | } > | ^ > 0x1096215f lra_set_insn_recog_data(rtx_insn*) > /home/segher/src/gcc/gcc/lra.c:1004 > 0x109625d7 lra_get_insn_recog_data > /home/segher/src/gcc/gcc/lra-int.h:488 > 0x109625d7 lra_update_insn_regno_info(rtx_insn*) > /home/segher/src/gcc/gcc/lra.c:1625 > 0x10962d03 lra_update_insn_regno_info(rtx_insn*) > /home/segher/src/gcc/gcc/lra.c:1623 > 0x10962d03 lra_push_insn_1 > /home/segher/src/gcc/gcc/lra.c:1780 > [etc] > > This means LRA found an unrecognised insn; and that insn is > > (insn 817 804 818 21 (set (reg:DI 324) > (sign_extract:DI (ashift:DI (subreg:DI (reg:SI 232) 0) > (const_int 3 [0x3])) > (const_int 35 [0x23]) > (const_int 0 [0]))) > "/home/segher/src/kernel/kernel/cgroup/cgroup.c":1747:3 -1 > (nil)) > > LRA created that as a reload for > > (insn 347 819 348 21 (parallel [ > (set (mem/f:DI (reg:DI 324) [233 *__p_84+0 S8 A64]) > (asm_operands/v:DI ("stlr %1, %0") ("=Q") 0 [ > (reg:DI 325 [orig:106 prephitmp_18 ] [106]) > ] > [ > (asm_input:DI ("r") > /home/segher/src/kernel/kernel/cgroup/cgroup.c:1747) > ] > [] /home/segher/src/kernel/kernel/cgroup/cgroup.c:1747)) > (clobber (mem:BLK (scratch) [0 A8])) > ]) "/home/segher/src/kernel/kernel/cgroup/cgroup.c":1747:3 -1 > (expr_list:REG_DEAD (reg:SI 232) > (expr_list:REG_DEAD (reg:DI 106 [ prephitmp_18 ]) > (nil)))) > > as > > 347: {[r324:DI]=asm_operands;clobber [scratch];} > REG_DEAD r232:SI > REG_DEAD r106:DI > Inserting insn reload before: > 817: r324:DI=sign_extract(r232:SI#0<<0x3,0x23,0) > 818: r324:DI=r324:DI+r284:DI > 819: r325:DI=r106:DI > > (and then it died). > > > Can you fix this first? There probably is something target-specific > wrong related to zero_extract. The intent is to fix this in combine here. See the earlier replies in this thread. > > > Segher Thanks, Alex