[Bug target/88282] ICE in df_install_refs at gcc/df-scan.c:2379
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88282 --- Comment #5 from Uroš Bizjak --- (In reply to Tamar Christina from comment #3) > This is caused by the change in r266385 for PR87718. > > That causes the cost model to go completely off the rail and also changes > the register classes. FTR, there are also some new inconsistencies w.r.t cost model on x86, as reported here [1]. [1] https://gcc.gnu.org/ml/gcc-patches/2018-11/msg02419.html
[Bug target/88282] ICE in df_install_refs at gcc/df-scan.c:2379
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88282 --- Comment #4 from Vladimir Makarov --- (In reply to Tamar Christina from comment #3) > This is caused by the change in r266385 for PR87718. > > That causes the cost model to go completely off the rail and also changes > the register classes. > Sorry for this. It was a very sensitive code change and I think it will take some time until the code stabilize. But I believe that what patch for PR87718 solves is the right direction for RA. > Previously out costs were 0 in most cases, now we have large numbers like > 65540004. > > ``` I'll investigate this too. The biggest problem with RA cost calculations is that machine-dependent code for register move cost is not defined correctly for all combinations of mode, regclass, regclass. Unfortunately, the documentation says nothing about it. RA tries to solve this in some ways but not always successfully. In the current case the combination is DImode, SP_REG, GENERAL_REGS. I'll see what can I do in RA. I have an idea. If it works the patch will be ready on the next week.
[Bug target/88282] ICE in df_install_refs at gcc/df-scan.c:2379
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88282 Tamar Christina changed: What|Removed |Added Status|ASSIGNED|NEW CC||vmakarov at gcc dot gnu.org Assignee|tnfchris at gcc dot gnu.org|unassigned at gcc dot gnu.org --- Comment #3 from Tamar Christina --- This is caused by the change in r266385 for PR87718. That causes the cost model to go completely off the rail and also changes the register classes. Previously out costs were 0 in most cases, now we have large numbers like 65540004. ``` r93 costs: GENERAL_REGS:0 FP_LO_REGS:1 FP_REGS:1 POINTER_AND_FP_REGS:1 MEM:8000 r92 costs: GENERAL_REGS:0 FP_LO_REGS:1 FP_REGS:1 POINTER_AND_FP_REGS:1 MEM:8000 ``` was before and now ``` r93 costs: GENERAL_REGS:65540004 FP_LO_REGS:65544004 FP_REGS:65544004 POINTER_AND_FP_REGS:65544004 MEM:8000 r92 costs: TAILCALL_ADDR_REGS:131074004 GENERAL_REGS:131074004 FP_LO_REGS:131074004 FP_REGS:131074004 POINTER_AND_FP_REGS:131074004 MEM:8000 ``` The reason this crashes with stack clash enabled is because the alloca code emits a probe at SP. The costing now makes it think it has to spill the hard register Creating newreg=98 from oldreg=92, assigning class GENERAL_REGS to r98 16: sp:DI=r98:DI REG_DEAD r92:DI REG_ARGS_SIZE 0 Inserting insn reload before: 27: r98:DI=r92:DI it can't do it so it crashes in reload.
[Bug target/88282] ICE in df_install_refs at gcc/df-scan.c:2379
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88282 Tamar Christina changed: What|Removed |Added Status|UNCONFIRMED |ASSIGNED Last reconfirmed||2018-11-30 Assignee|unassigned at gcc dot gnu.org |tnfchris at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #2 from Tamar Christina --- Confirmed, something broke in between upstreaming and now. Taking a look.
[Bug target/88282] ICE in df_install_refs at gcc/df-scan.c:2379
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88282 --- Comment #1 from Martin Liška --- One related testcase that fails: $ aarch64-linux-gnu-gcc /home/marxin/Programming/gcc/gcc/testsuite/gcc.dg/pr41470.c -fstack-clash-protection -O2 -fno-tree-ccp during RTL pass: reload /home/marxin/Programming/gcc/gcc/testsuite/gcc.dg/pr41470.c: In function ‘bf’: /home/marxin/Programming/gcc/gcc/testsuite/gcc.dg/pr41470.c:22:1: internal compiler error: Segmentation fault 22 | } | ^ 0xa88a2f crash_signal /home/marxin/BIG/buildbot/buildworker/marxinbox-gcc-trunk-aarch64/build/gcc/toplev.c:326 0x76bc310f ??? /usr/src/debug/glibc-2.27-6.1.x86_64/signal/../sysdeps/unix/sysv/linux/x86_64/sigaction.c:0 0x7329b1 df_install_refs /home/marxin/BIG/buildbot/buildworker/marxinbox-gcc-trunk-aarch64/build/gcc/df-scan.c:2379 0x732a94 df_install_refs /home/marxin/BIG/buildbot/buildworker/marxinbox-gcc-trunk-aarch64/build/gcc/df-scan.c:2425 0x732a94 df_refs_add_to_chains /home/marxin/BIG/buildbot/buildworker/marxinbox-gcc-trunk-aarch64/build/gcc/df-scan.c:2425 0x738fae df_bb_refs_record(int, bool) /home/marxin/BIG/buildbot/buildworker/marxinbox-gcc-trunk-aarch64/build/gcc/df-scan.c:3350 0x7391bc df_scan_blocks() /home/marxin/BIG/buildbot/buildworker/marxinbox-gcc-trunk-aarch64/build/gcc/df-scan.c:588 0x8f127d do_reload /home/marxin/BIG/buildbot/buildworker/marxinbox-gcc-trunk-aarch64/build/gcc/ira.c:5533 0x8f127d execute /home/marxin/BIG/buildbot/buildworker/marxinbox-gcc-trunk-aarch64/build/gcc/ira.c:5653