diff options
author | Jozef Lawrynowicz <jozef.l@mittosystems.com> | 2020-04-09 20:52:20 +0100 |
---|---|---|
committer | Jozef Lawrynowicz <jozef.l@mittosystems.com> | 2020-04-09 20:59:50 +0100 |
commit | 07432a807ede1c629f0f52aa5f8bf00012929e88 (patch) | |
tree | 9eb97c0826e1acaa454bbf5e3a977f87475d6452 | |
parent | 33c45e51b4914008064d9b77f2c1fc0eea1ad060 (diff) | |
download | gcc-07432a807ede1c629f0f52aa5f8bf00012929e88.zip gcc-07432a807ede1c629f0f52aa5f8bf00012929e88.tar.gz gcc-07432a807ede1c629f0f52aa5f8bf00012929e88.tar.bz2 |
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.
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/msp430/msp430.c | 2 | ||||
-rw-r--r-- | gcc/config/msp430/msp430.md | 4 |
3 files changed, 11 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e5e2290..bce700e 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 cde14c8..e0d2d73 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 815d122..b6602fb 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" ) |