On 11/11/26 3:15 PM, Matt Turner wrote:
input_operand accepts an arbitrary integer constant only once register
allocation is under way, since before that a constant that needs more
than one instruction has to stay in its unsplit form. It tested
reload_in_progress, which LRA never sets, so under LRA the predicate
fell back to add_operand and rejected constants that only the
post-allocation splitter can handle.
LRA re-materializing an invariant (lra_undo_inheritance) then emitted an
unrecognizable (set (reg:DI) (const_int 0xffffffff00000000)) and tripped
the USE/CLOBBER/ASM_INPUT assertion in lra_set_insn_recog_data. Test
for lra_in_progress as well; the constant is split as before, into
lda + sll here. Seen compiling glibc's nss/nss_module.c at -O2
-mcpu=ev67 with LRA.
This has no effect until LRA is enabled by the next patch.
gcc/ChangeLog:
* config/alpha/predicates.md (input_operand): Test lra_in_progress
in the CONST_INT and CONST_VECTOR cases.
OK
jeff