re PR rtl-optimization/49912 (ICE from -freorder-blocks-and-partition : verify_flow_info failed)

PR rtl-optimization/49912
	* cfgrtl.c (rtl_verify_flow_info_1): Ignore also EDGE_PRESERVE bit
	when counting n_branch.

	* g++.dg/other/pr49912.C: New test.

From-SVN: r181743
This commit is contained in:
Jakub Jelinek 2011-11-26 21:50:28 +01:00 committed by Jakub Jelinek
parent a1c63c5fb9
commit 7e872b900f
4 changed files with 51 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2011-11-26 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/49912
* cfgrtl.c (rtl_verify_flow_info_1): Ignore also EDGE_PRESERVE bit
when counting n_branch.
2011-11-26 Uros Bizjak <ubizjak@gmail.com>
* config/i386/sync.md (movdi_via_fpu): Add %Z insn suffixes.

View File

@ -1875,7 +1875,8 @@ rtl_verify_flow_info_1 (void)
| EDGE_CAN_FALLTHRU
| EDGE_IRREDUCIBLE_LOOP
| EDGE_LOOP_EXIT
| EDGE_CROSSING)) == 0)
| EDGE_CROSSING
| EDGE_PRESERVE)) == 0)
n_branch++;
if (e->flags & EDGE_ABNORMAL_CALL)

View File

@ -1,3 +1,8 @@
2011-11-26 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/49912
* g++.dg/other/pr49912.C: New test.
2011-11-26 Uros Bizjak <ubizjak@gmail.com>
* gcc.dg/vect/fast-math-vect-call-2.c: Require vect_double

View File

@ -0,0 +1,38 @@
// PR rtl-optimization/49912
// { dg-do compile }
// { dg-require-effective-target freorder }
// { dg-options "-O -freorder-blocks-and-partition" }
int foo (int *);
struct S
{
int *m1 ();
S (int);
~S () { foo (m1 ()); }
};
template <int>
struct V
{
S *v1;
void m2 (const S &);
S *base ();
};
template <int N>
void V<N>::m2 (const S &x)
{
S a = x;
S *l = base ();
while (l)
*v1 = *--l;
}
V<0> v;
void
foo ()
{
v.m2 (0);
}