re PR middle-end/45415 (ICE in partition_view_bitmap, at tree-ssa-live.c:334)
PR middle-end/45415 * tree-sra.c (sra_modify_assign): If we modify the statement, say so. * tree-ssa.c (verify_ssa): Check number of operands and links per statement to agree. testsuite/ PR middle-end/45415 * gcc.dg/pr45415.c: New test. From-SVN: r163822
This commit is contained in:
parent
ed6e090eb2
commit
15a54c10cb
|
@ -1,3 +1,12 @@
|
|||
2010-09-03 Michael Matz <matz@suse.de>
|
||||
|
||||
PR middle-end/45415
|
||||
* tree-sra.c (sra_modify_assign): If we modify the statement,
|
||||
say so.
|
||||
|
||||
* tree-ssa.c (verify_ssa): Check number of operands and links
|
||||
per statement to agree.
|
||||
|
||||
2010-09-03 Uros Bizjak <ubizjak@gmail.com>
|
||||
Iain Sandoe <iains@gcc.gnu.org>
|
||||
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2010-09-03 Michael Matz <matz@suse.de>
|
||||
|
||||
PR middle-end/45415
|
||||
* gcc.dg/pr45415.c: New test.
|
||||
|
||||
2010-09-03 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR tree-optimization/45506
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O1 -fno-tree-dominator-opts" } */
|
||||
|
||||
typedef unsigned long int st;
|
||||
typedef unsigned long long dt;
|
||||
typedef union
|
||||
{
|
||||
dt d;
|
||||
struct
|
||||
{
|
||||
st h, l;
|
||||
}
|
||||
s;
|
||||
} t_be;
|
||||
|
||||
typedef union
|
||||
{
|
||||
dt d;
|
||||
struct
|
||||
{
|
||||
st l, h;
|
||||
}
|
||||
s;
|
||||
} t_le;
|
||||
|
||||
#define df(f, t) \
|
||||
int \
|
||||
f (t afh, t bfh) \
|
||||
{ \
|
||||
t hh; \
|
||||
t hp, lp, dp, m; \
|
||||
st ad, bd; \
|
||||
int s; \
|
||||
s = 0; \
|
||||
ad = afh.s.h - afh.s.l; \
|
||||
bd = bfh.s.l - bfh.s.h; \
|
||||
if (bd > bfh.s.l) \
|
||||
{ \
|
||||
bd = -bd; \
|
||||
s = ~s; \
|
||||
} \
|
||||
lp.d = (dt) afh.s.l * bfh.s.l; \
|
||||
hp.d = (dt) afh.s.h * bfh.s.h; \
|
||||
dp.d = (dt) ad *bd; \
|
||||
dp.d ^= s; \
|
||||
hh.d = hp.d + hp.s.h + lp.s.h + dp.s.h; \
|
||||
m.d = (dt) lp.s.h + hp.s.l + lp.s.l + dp.s.l; \
|
||||
return hh.s.l + m.s.l; \
|
||||
}
|
||||
|
||||
df(f_le, t_le)
|
||||
df(f_be, t_be)
|
||||
|
||||
void abort (void);
|
||||
void exit (int);
|
||||
main ()
|
||||
{
|
||||
t_be x;
|
||||
x.s.h = 0x10000000U;
|
||||
x.s.l = 0xe0000000U;
|
||||
if (x.d == 0x10000000e0000000ULL
|
||||
&& f_be ((t_be) 0x100000000ULL, (t_be) 0x100000000ULL) != -1)
|
||||
abort ();
|
||||
if (x.d == 0xe000000010000000ULL
|
||||
&& f_le ((t_le) 0x100000000ULL, (t_le) 0x100000000ULL) != -1)
|
||||
abort ();
|
||||
exit (0);
|
||||
}
|
|
@ -2783,6 +2783,7 @@ sra_modify_assign (gimple *stmt, gimple_stmt_iterator *gsi)
|
|||
true, GSI_SAME_STMT);
|
||||
if (gimple_assign_rhs1 (*stmt) != rhs)
|
||||
{
|
||||
modify_this_stmt = true;
|
||||
gimple_assign_set_rhs_from_tree (&orig_gsi, rhs);
|
||||
gcc_assert (*stmt == gsi_stmt (orig_gsi));
|
||||
}
|
||||
|
|
|
@ -938,6 +938,8 @@ verify_ssa (bool check_modified_stmt)
|
|||
gimple stmt = gsi_stmt (gsi);
|
||||
use_operand_p use_p;
|
||||
bool has_err;
|
||||
int count;
|
||||
unsigned i;
|
||||
|
||||
if (check_modified_stmt && gimple_modified_p (stmt))
|
||||
{
|
||||
|
@ -1007,6 +1009,7 @@ verify_ssa (bool check_modified_stmt)
|
|||
goto err;
|
||||
}
|
||||
|
||||
count = 0;
|
||||
FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_USE|SSA_OP_DEF)
|
||||
{
|
||||
if (verify_ssa_name (op, false))
|
||||
|
@ -1015,6 +1018,19 @@ verify_ssa (bool check_modified_stmt)
|
|||
print_gimple_stmt (stderr, stmt, 0, TDF_VOPS|TDF_MEMSYMS);
|
||||
goto err;
|
||||
}
|
||||
count++;
|
||||
}
|
||||
|
||||
for (i = 0; i < gimple_num_ops (stmt); i++)
|
||||
{
|
||||
op = gimple_op (stmt, i);
|
||||
if (op && TREE_CODE (op) == SSA_NAME && --count < 0)
|
||||
{
|
||||
error ("nr of operands and imm-links doesn't agree");
|
||||
error ("in statement");
|
||||
print_gimple_stmt (stderr, stmt, 0, TDF_VOPS|TDF_MEMSYMS);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, SSA_OP_USE|SSA_OP_VUSE)
|
||||
|
|
Loading…
Reference in New Issue