aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJozef Lawrynowicz <jozef.l@mittosystems.com>2020-04-09 20:52:20 +0100
committerJozef Lawrynowicz <jozef.l@mittosystems.com>2020-04-09 20:59:50 +0100
commit07432a807ede1c629f0f52aa5f8bf00012929e88 (patch)
tree9eb97c0826e1acaa454bbf5e3a977f87475d6452
parent33c45e51b4914008064d9b77f2c1fc0eea1ad060 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/config/msp430/msp430.c2
-rw-r--r--gcc/config/msp430/msp430.md4
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"
)