https://gcc.gnu.org/g:c1729df6ec1eff4815a9cdd71392691ce21da028

commit r15-6826-gc1729df6ec1eff4815a9cdd71392691ce21da028
Author: Andrew Pinski <quic_apin...@quicinc.com>
Date:   Fri Jan 10 20:04:09 2025 -0800

    final: Fix get_attr_length for asm goto [PR118411]
    
    The problem is for inline-asm goto, the outer rtl insn type
    is a jump_insn and get_attr_length does not handle ASM specially
    unlike if the outer rtl insn type was just insn.
    
    This fixes the issue by adding support for both CALL_INSN and JUMP_INSN
    with asm.
    
    OK? Bootstrapped and tested on x86_64-linux-gnu.
    
            PR middle-end/118411
    
    gcc/ChangeLog:
    
            * final.cc (get_attr_length_1): Handle asm for CALL_INSN
            and JUMP_INSNs.
    
    Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com>

Diff:
---
 gcc/final.cc | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/gcc/final.cc b/gcc/final.cc
index 19c5d390c78a..12c6eb0ac09c 100644
--- a/gcc/final.cc
+++ b/gcc/final.cc
@@ -363,7 +363,11 @@ get_attr_length_1 (rtx_insn *insn, int (*fallback_fn) 
(rtx_insn *))
 
       case CALL_INSN:
       case JUMP_INSN:
-       length = fallback_fn (insn);
+       body = PATTERN (insn);
+       if (GET_CODE (body) == ASM_INPUT || asm_noperands (body) >= 0)
+         length = asm_insn_count (body) * fallback_fn (insn);
+       else
+         length = fallback_fn (insn);
        break;
 
       case INSN:

Reply via email to