re PR rtl-optimization/87475 (ICE in patch_jump_insn, at cfgrtl.c:1275)
PR rtl-optimization/87475 * cfgrtl.c (patch_jump_insn): Allow redirection failure for CROSSING_JUMP_P insns. (cfg_layout_redirect_edge_and_branch): Don't ICE if ret is NULL. * g++.dg/opt/pr87475.C: New test. From-SVN: r266219
This commit is contained in:
parent
b41835733b
commit
a09ad34709
@ -1,3 +1,10 @@
|
||||
2018-11-16 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/87475
|
||||
* cfgrtl.c (patch_jump_insn): Allow redirection failure for
|
||||
CROSSING_JUMP_P insns.
|
||||
(cfg_layout_redirect_edge_and_branch): Don't ICE if ret is NULL.
|
||||
|
||||
2018-11-16 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR target/88051
|
||||
|
@ -1268,11 +1268,13 @@ patch_jump_insn (rtx_insn *insn, rtx_insn *old_label, basic_block new_bb)
|
||||
|
||||
/* If the substitution doesn't succeed, die. This can happen
|
||||
if the back end emitted unrecognizable instructions or if
|
||||
target is exit block on some arches. */
|
||||
target is exit block on some arches. Or for crossing
|
||||
jumps. */
|
||||
if (!redirect_jump (as_a <rtx_jump_insn *> (insn),
|
||||
block_label (new_bb), 0))
|
||||
{
|
||||
gcc_assert (new_bb == EXIT_BLOCK_PTR_FOR_FN (cfun));
|
||||
gcc_assert (new_bb == EXIT_BLOCK_PTR_FOR_FN (cfun)
|
||||
|| CROSSING_JUMP_P (insn));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -4460,6 +4462,9 @@ cfg_layout_redirect_edge_and_branch (edge e, basic_block dest)
|
||||
else
|
||||
ret = redirect_branch_edge (e, dest);
|
||||
|
||||
if (!ret)
|
||||
return NULL;
|
||||
|
||||
fixup_partition_crossing (ret);
|
||||
/* We don't want simplejumps in the insn stream during cfglayout. */
|
||||
gcc_assert (!simplejump_p (BB_END (src)) || CROSSING_JUMP_P (BB_END (src)));
|
||||
|
@ -1,3 +1,8 @@
|
||||
2018-11-16 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/87475
|
||||
* g++.dg/opt/pr87475.C: New test.
|
||||
|
||||
2018-11-16 Matthew Malcomson <matthew.malcomson@arm.com>
|
||||
|
||||
* gcc.c-torture/execute/printf-2.c: Skip on wrapped boards.
|
||||
|
7
gcc/testsuite/g++.dg/opt/pr87475.C
Normal file
7
gcc/testsuite/g++.dg/opt/pr87475.C
Normal file
@ -0,0 +1,7 @@
|
||||
// PR rtl-optimization/87475
|
||||
// { dg-do compile { target freorder } }
|
||||
// { dg-options "-O2 -freorder-blocks-and-partition -fmodulo-sched" }
|
||||
|
||||
struct A { A (); ~A (); };
|
||||
int foo (A, A);
|
||||
void bar (bool x) { x ? foo (A (), A ()) : 0; }
|
Loading…
Reference in New Issue
Block a user