Commit a30c5ca4 by Andrew Burgess Committed by Joern Rennecke

arc.c (arc_loop_hazard): Don't convert the jump label rtx to an rtx_insn until…

arc.c (arc_loop_hazard): Don't convert the jump label rtx to an rtx_insn until we confirm it's not a...

2015-12-17  Andrew Burgess  <andrew.burgess@embecosm.com>
gcc:
        * config/arc/arc.c (arc_loop_hazard): Don't convert the jump label
        rtx to an rtx_insn until we confirm it's not a return rtx.
gcc/testsuite:
        * gcc.target/arc/loop-hazard-1.c: New file

From-SVN: r231752
parent 38fc3edc
2015-12-17 Andrew Burgess <andrew.burgess@embecosm.com>
* config/arc/arc.c (arc_loop_hazard): Don't convert the jump label
rtx to an rtx_insn until we confirm it's not a return rtx.
2015-12-17 Richard Biener <rguenther@suse.de>
* gimple-ssa.h (struct gimple_df): Remove modified_noreturn_calls
......@@ -8041,6 +8041,7 @@ static bool
arc_loop_hazard (rtx_insn *pred, rtx_insn *succ)
{
rtx_insn *jump = NULL;
rtx label_rtx = NULL_RTX;
rtx_insn *label = NULL;
basic_block succ_bb;
......@@ -8067,22 +8068,22 @@ arc_loop_hazard (rtx_insn *pred, rtx_insn *succ)
else
return false;
label = JUMP_LABEL_AS_INSN (jump);
if (!label)
return false;
/* Phase 2b: Make sure is not a millicode jump. */
if ((GET_CODE (PATTERN (jump)) == PARALLEL)
&& (XVECEXP (PATTERN (jump), 0, 0) == ret_rtx))
return false;
/* Phase 2c: Make sure is not a simple_return. */
if ((GET_CODE (PATTERN (jump)) == SIMPLE_RETURN)
|| (GET_CODE (label) == SIMPLE_RETURN))
label_rtx = JUMP_LABEL (jump);
if (!label_rtx)
return false;
/* Phase 2c: Make sure is not a return. */
if (ANY_RETURN_P (label_rtx))
return false;
/* Pahse 2d: Go to the target of the jump and check for aliveness of
LP_COUNT register. */
label = safe_as_a <rtx_insn *> (label_rtx);
succ_bb = BLOCK_FOR_INSN (label);
if (!succ_bb)
{
......
......@@ -12,6 +12,10 @@
2015-12-17 Andrew Burgess <andrew.burgess@embecosm.com>
* gcc.target/arc/loop-hazard-1.c: New file.
2015-12-17 Andrew Burgess <andrew.burgess@embecosm.com>
* gcc.target/arc/jump-around-jump.c (rtc_set_time): Declare.
2015-12-17 Thomas Preud'homme <thomas.preudhomme@arm.com>
......
/* { dg-do compile } */
/* { dg-options "-Os" } */
/* This caused an assertion within arc_loop_hazard. */
unsigned a, b;
long fn1()
{
long c = 1, d = 0;
while (a && c && b)
c <<= 1;
while (c)
d |= c;
return d;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment