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