[gcc/devel/ranger] MSP430: Indiciate that the epilogue_helper insn does not fallthru

Aldy Hernandez aldyh@gcc.gnu.org
Wed Jun 17 20:20:44 GMT 2020


https://gcc.gnu.org/g:07432a807ede1c629f0f52aa5f8bf00012929e88

commit 07432a807ede1c629f0f52aa5f8bf00012929e88
Author: Jozef Lawrynowicz <jozef.l@mittosystems.com>
Date:   Thu Apr 9 20:52:20 2020 +0100

    MSP430: Indiciate that the epilogue_helper insn does not fallthru
    
    This fixes an ICE in rtl_verify_fallthru, at cfgrtl.c:2970
    gcc.c-torture/execute/20071210-1.c for -mcpu=msp430 at -O2
    and above.
    
    The epilogue_helper insn was treated as a regular insn which will
    fallthru, so when a barrier is emitted after it, RTL verification failed
    as rtl_verify_fallthru.
    
    gcc/ChangeLog:
    
    2020-04-09  Jozef Lawrynowicz  <jozef.l@mittosystems.com>
    
            * config/msp430/msp430.c (msp430_expand_epilogue): Use emit_jump_insn
            when to emit the epilogue_helper insn.
            * config/msp430/msp430.md (epilogue_helper): Add a return insn to the
            RTL pattern.

Diff:
---
 gcc/ChangeLog               | 7 +++++++
 gcc/config/msp430/msp430.c  | 2 +-
 gcc/config/msp430/msp430.md | 4 +++-
 3 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e5e2290ab1a..bce700e472e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2020-04-09  Jozef Lawrynowicz  <jozef.l@mittosystems.com>
+
+	* config/msp430/msp430.c (msp430_expand_epilogue): Use emit_jump_insn
+	when to emit the epilogue_helper insn.
+	* config/msp430/msp430.md (epilogue_helper): Add a return insn to the
+	RTL pattern.
+
 2020-04-09  Jakub Jelinek  <jakub@redhat.com>
 
 	PR debug/94495
diff --git a/gcc/config/msp430/msp430.c b/gcc/config/msp430/msp430.c
index cde14c83812..e0d2d732ade 100644
--- a/gcc/config/msp430/msp430.c
+++ b/gcc/config/msp430/msp430.c
@@ -2587,7 +2587,7 @@ msp430_expand_epilogue (int is_eh)
 		 && helper_n > 1
 		 && !is_eh)
 	  {
-	    emit_insn (gen_epilogue_helper (GEN_INT (helper_n)));
+	    emit_jump_insn (gen_epilogue_helper (GEN_INT (helper_n)));
 	    return;
 	  }
 	else
diff --git a/gcc/config/msp430/msp430.md b/gcc/config/msp430/msp430.md
index 815d122d8a8..b6602fbca66 100644
--- a/gcc/config/msp430/msp430.md
+++ b/gcc/config/msp430/msp430.md
@@ -1130,7 +1130,9 @@
   )
 
 (define_insn "epilogue_helper"
-  [(unspec_volatile [(match_operand 0 "immediate_operand" "i")] UNS_EPILOGUE_HELPER)]
+  [(set (pc)
+        (unspec_volatile [(match_operand 0 "immediate_operand" "i")] UNS_EPILOGUE_HELPER))
+   (return)]
   ""
   "BR%Q0\t#__mspabi_func_epilog_%J0"
   )


More information about the Gcc-cvs mailing list