MSP430: Indiciate that the epilogue_helper insn does not fallthru
authorJozef Lawrynowicz <jozef.l@mittosystems.com>
Thu, 9 Apr 2020 19:52:20 +0000 (20:52 +0100)
committerJozef Lawrynowicz <jozef.l@mittosystems.com>
Thu, 9 Apr 2020 19:59:50 +0000 (20:59 +0100)
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.

gcc/ChangeLog
gcc/config/msp430/msp430.c
gcc/config/msp430/msp430.md

index e5e2290ab1a3641c4103dd01390080e14ede0b02..bce700e472efe230c4dbcdc1e0337307e979fcab 100644 (file)
@@ -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
index cde14c838124e32ab8a2a913ba67e22e31d88751..e0d2d732adee466da7198af282831da950c41306 100644 (file)
@@ -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
index 815d122d8a875503f064a229820883bbaaf76b12..b6602fbca66acab35e95795c56b9d5992a36af7b 100644 (file)
   )
 
 (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"
   )