mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-11 05:54:31 +08:00
re PR rtl-optimization/23454 (ICE in invert_exp_1, at jump.c:1719)
PR rtl-optimization/23454 * reorg.c (relax_delay_slots): Only call invert_jump if any_condjump_p is true. * g++.dg/opt/pr23454.C: New test. From-SVN: r103810
This commit is contained in:
parent
f7e4e4847c
commit
7a6b752853
@ -1,3 +1,9 @@
|
||||
2005-09-03 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/23454
|
||||
* reorg.c (relax_delay_slots): Only call invert_jump if any_condjump_p
|
||||
is true.
|
||||
|
||||
2005-09-03 Richard Henderson <rth@redhat.com>
|
||||
John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
|
||||
|
||||
|
@ -3123,10 +3123,11 @@ relax_delay_slots (rtx first)
|
||||
if (target_label && target_label != JUMP_LABEL (insn))
|
||||
reorg_redirect_jump (insn, target_label);
|
||||
|
||||
/* See if this jump branches around an unconditional jump.
|
||||
If so, invert this jump and point it to the target of the
|
||||
/* See if this jump conditionally branches around an unconditional
|
||||
jump. If so, invert this jump and point it to the target of the
|
||||
second jump. */
|
||||
if (next && JUMP_P (next)
|
||||
&& any_condjump_p (insn)
|
||||
&& (simplejump_p (next) || GET_CODE (PATTERN (next)) == RETURN)
|
||||
&& target_label
|
||||
&& next_active_insn (target_label) == next_active_insn (next)
|
||||
@ -3172,7 +3173,7 @@ relax_delay_slots (rtx first)
|
||||
if (JUMP_P (insn)
|
||||
&& (simplejump_p (insn) || GET_CODE (PATTERN (insn)) == RETURN)
|
||||
&& (other = prev_active_insn (insn)) != 0
|
||||
&& (condjump_p (other) || condjump_in_parallel_p (other))
|
||||
&& any_condjump_p (other)
|
||||
&& no_labels_between_p (other, insn)
|
||||
&& 0 > mostly_true_jump (other,
|
||||
get_branch_condition (other,
|
||||
|
@ -1,3 +1,8 @@
|
||||
2005-09-03 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/23454
|
||||
* g++.dg/opt/pr23454.C: New test.
|
||||
|
||||
2005-09-03 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/23699
|
||||
|
41
gcc/testsuite/g++.dg/opt/pr23454.C
Normal file
41
gcc/testsuite/g++.dg/opt/pr23454.C
Normal file
@ -0,0 +1,41 @@
|
||||
/* PR rtl-optimization/23454 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2" } */
|
||||
|
||||
void foo ();
|
||||
int a, b;
|
||||
char c;
|
||||
long long d, e;
|
||||
|
||||
static inline int
|
||||
bar (const long long s, const long long t)
|
||||
{
|
||||
return ((s < t) ? -1 : s > t ? 1 : 0);
|
||||
}
|
||||
|
||||
int fn ();
|
||||
int f;
|
||||
|
||||
void
|
||||
baz (int x)
|
||||
{
|
||||
long long g = fn ();
|
||||
if (f)
|
||||
{
|
||||
b++;
|
||||
return;
|
||||
}
|
||||
if (g == 0)
|
||||
a++;
|
||||
if (x)
|
||||
foo ();
|
||||
if (!c)
|
||||
c = 1;
|
||||
else if (g != 0)
|
||||
{
|
||||
if (bar (g, d) < 0)
|
||||
d = g;
|
||||
if (bar (g, e) > 0)
|
||||
e = g;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user