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.

Ok for trunk?

Johann

--
    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".

diff --git a/gcc/config/avr/avr.cc b/gcc/config/avr/avr.cc
index 48d1d0e7646..ef7e94dde2b 100644
--- a/gcc/config/avr/avr.cc
+++ b/gcc/config/avr/avr.cc
@@ -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:

Reply via email to