AVR: Detect more skip opportunities.

The transparent call insns like "*parityhi2.libgcc" output a single
[R]CALL instruction that can be skipped by the skip instructions.
Such insns have attribute "type" of "xcall" and can therefore
be easily recognized.  Same applies when "adjust_len" is "call".

gcc/
	* config/avr/avr.cc (avr_2word_insn_p): Return true for
	transparent calls: When insn attribute "type" is "xcall"
	or when "adjust_len" is "call".
This commit is contained in:
Georg-Johann Lay 2024-09-13 18:06:57 +02:00
parent 8ed8c342fb
commit 4ffca9966a

View File

@ -12972,7 +12972,7 @@ test_hard_reg_class (enum reg_class rclass, rtx x)
}
/* Helper for jump_over_one_insn_p: Test if INSN is a 2-word instruction
/* Helper for `jump_over_one_insn_p': Test if INSN is a 2-word instruction
and thus is suitable to be skipped by CPSE, SBRC, etc. */
static bool
@ -12986,7 +12986,10 @@ avr_2word_insn_p (rtx_insn *insn)
switch (INSN_CODE (insn))
{
default:
return false;
return (recog_memoized (insn) >= 0
// Transparent calls may be skipped.
&& (get_attr_type (insn) == TYPE_XCALL
|| get_attr_adjust_len (insn) == ADJUST_LEN_CALL));
case CODE_FOR_movqi_insn:
case CODE_FOR_movuqq_insn: