https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117914
Bug ID: 117914
Summary: [reload][avr] In function '__objc_add_class_to_hash
class-i.c:2162:1: error: insn does not satisfy its
constraints:
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: other
Assignee: unassigned at gcc dot gnu.org
Reporter: gjl at gcc dot gnu.org
Target Milestone: ---
Created attachment 59791
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=59791&action=edit
precompiled C test case
$ avr-gcc-15 class-i.c -S -Os -mmcu=avrtiny -w -da
class-i.c: In function '__objc_add_class_to_hash':
class-i.c:2162:1: error: insn does not satisfy its constraints:
2162 | }
| ^
(insn 46 153 154 8 (set (reg:SI 24 r24 [orig:52 _10 ] [52])
(ashift:SI (reg:SI 30 r30)
(const_int 16 [0x10]))) "class-i.c":2153:141 494 {ashlsi3}
(nil))
during RTL pass: postreload
class-i.c:2162:1: internal compiler error: in extract_constrain_insn, at
recog.cc:2770
0x7f2ed6359d8f __libc_start_call_main
../sysdeps/nptl/libc_start_call_main.h:58
reg30:SI is obviously invalid as a register, because the last GPR is reg31.QI,
and the maximal mode which reg30 can hold is HImode.
In .asmcons we have:
(insn 46 44 47 8 (set (reg:SI 52 [ _10 ])
(ashift:SI (subreg:SI (reg:HI 50 [ class_number.6_8 ]) 0)
(const_int 16 [0x10]))) "class-i.c":2153:141 494 {ashlsi3}
(nil))
which in .postreload has been turned into:
(insn 46 153 154 8 (set (reg:SI 24 r24 [orig:52 _10 ] [52])
(ashift:SI (reg:SI 30 r30)
(const_int 16 [0x10]))) "class-i.c":2153:141 494 {ashlsi3}
(nil))
So paradoxical subreg subreg:SI (reg:HI 50 [ class_number.6_8 ]) 0) is turned
into an invalid hard register.
FYI, the ICE goes away with -mlra.