https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118996
--- Comment #9 from H.J. Lu <hjl.tools at gmail dot com> --- (In reply to H.J. Lu from comment #8) > Created attachment 60607 [details] > A patch > > Here is the patch to change TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P to > return false for x86-64. This doesn't work: /export/build/gnu/tools-build/gcc-gitlab/build-x86_64-linux/./prev-gcc/xgcc -B/export/build/gnu/tools-build/gcc-gitlab/build-x86_64-linux/./prev-gcc/ -B/usr/gcc-15.0.1-x86-64/x86_64-pc-linux-gnu/bin/ -B/usr/gcc-15.0.1-x86-64/x86_64-pc-linux-gnu/bin/ -B/usr/gcc-15.0.1-x86-64/x86_64-pc-linux-gnu/lib/ -isystem /usr/gcc-15.0.1-x86-64/x86_64-pc-linux-gnu/include -isystem /usr/gcc-15.0.1-x86-64/x86_64-pc-linux-gnu/sys-include -fno-checking -c -g -O2 -fno-checking -gtoggle -gnatpg -gnata -W -Wall -fno-PIE -nostdinc -I- -I. -Iada/generated -Iada -I/export/gnu/import/git/gitlab/x86-gcc/gcc/ada -Iada/libgnat -I/export/gnu/import/git/gitlab/x86-gcc/gcc/ada/libgnat -Iada/gcc-interface -I/export/gnu/import/git/gitlab/x86-gcc/gcc/ada/gcc-interface /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/sem_dim.adb -S -o /tmp/x.s /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/sem_dim.adb: In function ‘Sem_Dim.Analyze_Dimension_Call’: /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/sem_dim.adb:1804:8: error: unable to find a register to spill /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/sem_dim.adb:1804:8: error: this is the insn: (insn 115 777 6 13 (parallel [ (set (reg:DI 208) (const_int 0 [0])) (set (reg/f:DI 384 [206]) (plus:DI (ashift:DI (reg:DI 208) (const_int 2 [0x2])) (reg/f:DI 384 [206]))) (set (reg:DI 385) (plus:DI (ashift:DI (reg:DI 208) (const_int 2 [0x2])) (reg:DI 385))) (set (mem/c:BLK (reg/f:DI 384 [206]) [19 MEM[(struct sem_dim__rational[1:7] *)_146]+0 S56 A128]) (mem/c:BLK (reg:DI 385) [19 MEM[(struct sem_dim__rational[1:7] *)_254]+0 S56 A128])) (use (reg:DI 208)) ]) "/export/gnu/import/git/gitlab/x86-gcc/gcc/ada/sem_dim.adb":1710:38 discrim 2 1766 {*rep_movsi} (expr_list:REG_UNUSED (reg:DI 208) (expr_list:REG_UNUSED (reg:DI 385) (expr_list:REG_UNUSED (reg/f:DI 384 [206]) (nil))))) during RTL pass: reload +===========================GNAT BUG DETECTED==============================+ | 15.0.1 20250228 (experimental) (x86_64-pc-linux-gnu) GCC error: | | in lra_split_hard_reg_for, at lra-assigns.cc:1863 | | Error detected around /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/sem_dim.adb:1804:8| | Compiling /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/sem_dim.adb | | Please submit a bug report; see https://gcc.gnu.org/bugs/ . | | Use a subject line meaningful to you and us to track the bug. | | Include the entire contents of this bug box in the report. | | Include the exact command that you entered. | | Also include sources listed below. | +==========================================================================+ Please include these source files with error report Note that list may not be accurate in some cases, so please double check that the problem can still be reproduced with the set of files listed. Consider also -gnatd.n switch (see debug.adb). /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/gcc-interface/system.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/sem_dim.adb /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/sem_dim.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/types.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/libgnat/ada.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/libgnat/a-unccon.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/libgnat/a-uncdea.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/atree.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/alloc.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/sinfo.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/namet.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/hostparm.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/table.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/uintp.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/urealp.ads ada/sinfo-nodes.ads ada/seinfo.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/output.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/libgnat/s-os_lib.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/libgnat/s-string.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/einfo.ads ada/snames.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/stand.ads ada/einfo-entities.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/einfo-utils.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/errout.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/err_vars.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/erroutc.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/exp_util.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/exp_tss.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/rtsfind.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/lib.ads ada/gnat.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/libgnat/g-htable.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/libgnat/s-htable.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/nlists.ads ada/nmake.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/opt.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/libgnat/s-wchcon.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/sem.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/sem_aux.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/sem_eval.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/sem_res.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/sem_util.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/aspects.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/sinfo-utils.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/stringt.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/tbuild.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/libgnat/s-stalib.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/libgnat/s-exctab.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/libgnat/s-unstyp.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/libgnat/s-conca2.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/libgnat/s-assert.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/libgnat/a-assert.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/libgnat/s-secsta.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/libgnat/s-parame.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/libgnat/s-stoele.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/table.adb /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/debug.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/libgnat/s-memory.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/libgnat/a-except.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/libgnat/s-traent.ads /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/libgnat/s-htable.adb /export/gnu/import/git/gitlab/x86-gcc/gcc/ada/libgnat/s-strhas.ads raised TYPES.UNRECOVERABLE_ERROR : comperr.adb:422