re PR tree-optimization/79740 (ICE on -Os and above in both 32-bit and 64-bit modes on x86_64-linux-gnu (internal compiler error: in VN_INFO_GET, at tree-ssa-sccvn.c:407 }))
2017-02-28 Richard Biener <rguenther@suse.de> PR tree-optimization/79740 * tree-ssa-sccvn.c (vn_nary_op_insert_into): Allow redundant inserts. (visit_nary_op): Insert the nary into the hashtable if we pattern-matched sth. * tree-ssa-pre.c (eliminate_insert): Robustify. * gcc.dg/torture/pr79740.c: New testcase. From-SVN: r245780
This commit is contained in:
parent
587240d249
commit
41aa3a3857
|
@ -1,3 +1,12 @@
|
|||
2017-02-28 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/79740
|
||||
* tree-ssa-sccvn.c (vn_nary_op_insert_into): Allow redundant
|
||||
inserts.
|
||||
(visit_nary_op): Insert the nary into the hashtable if we
|
||||
pattern-matched sth.
|
||||
* tree-ssa-pre.c (eliminate_insert): Robustify.
|
||||
|
||||
2017-02-28 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR middle-end/79731
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2017-02-28 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/79740
|
||||
* gcc.dg/torture/pr79740.c: New testcase.
|
||||
|
||||
2017-02-28 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR middle-end/79731
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
/* { dg-do compile } */
|
||||
|
||||
int a;
|
||||
short b;
|
||||
short fn1(unsigned short p1) { return p1 << a; }
|
||||
|
||||
int main()
|
||||
{
|
||||
short c;
|
||||
int d = 4;
|
||||
for (; b;)
|
||||
{
|
||||
c = d + 1;
|
||||
fn1(c);
|
||||
d = 0;
|
||||
}
|
||||
d++;
|
||||
return 0;
|
||||
}
|
|
@ -4099,8 +4099,12 @@ eliminate_push_avail (tree op)
|
|||
static tree
|
||||
eliminate_insert (gimple_stmt_iterator *gsi, tree val)
|
||||
{
|
||||
gimple *stmt = gimple_seq_first_stmt (VN_INFO (val)->expr);
|
||||
if (!is_gimple_assign (stmt)
|
||||
/* We can insert a sequence with a single assignment only. */
|
||||
gimple_seq stmts = VN_INFO (val)->expr;
|
||||
if (!gimple_seq_singleton_p (stmts))
|
||||
return NULL_TREE;
|
||||
gassign *stmt = dyn_cast <gassign *> (gimple_seq_first_stmt (stmts));
|
||||
if (!stmt
|
||||
|| (!CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (stmt))
|
||||
&& gimple_assign_rhs_code (stmt) != VIEW_CONVERT_EXPR
|
||||
&& gimple_assign_rhs_code (stmt) != BIT_FIELD_REF
|
||||
|
@ -4116,8 +4120,8 @@ eliminate_insert (gimple_stmt_iterator *gsi, tree val)
|
|||
if (!leader)
|
||||
return NULL_TREE;
|
||||
|
||||
gimple_seq stmts = NULL;
|
||||
tree res;
|
||||
stmts = NULL;
|
||||
if (gimple_assign_rhs_code (stmt) == BIT_FIELD_REF)
|
||||
res = gimple_build (&stmts, BIT_FIELD_REF,
|
||||
TREE_TYPE (val), leader,
|
||||
|
|
|
@ -2820,6 +2820,15 @@ vn_nary_op_insert_into (vn_nary_op_t vno, vn_nary_op_table_type *table,
|
|||
vno->hashcode = vn_nary_op_compute_hash (vno);
|
||||
|
||||
slot = table->find_slot_with_hash (vno, vno->hashcode, INSERT);
|
||||
/* While we do not want to insert things twice it's awkward to
|
||||
avoid it in the case where visit_nary_op pattern-matches stuff
|
||||
and ends up simplifying the replacement to itself. We then
|
||||
get two inserts, one from visit_nary_op and one from
|
||||
vn_nary_build_or_lookup.
|
||||
So allow inserts with the same value number. */
|
||||
if (*slot && (*slot)->result == vno->result)
|
||||
return *slot;
|
||||
|
||||
gcc_assert (!*slot);
|
||||
|
||||
*slot = vno;
|
||||
|
@ -3544,7 +3553,11 @@ visit_nary_op (tree lhs, gassign *stmt)
|
|||
result = vn_nary_build_or_lookup (NOP_EXPR,
|
||||
type, ops);
|
||||
if (result)
|
||||
return set_ssa_val_to (lhs, result);
|
||||
{
|
||||
bool changed = set_ssa_val_to (lhs, result);
|
||||
vn_nary_op_insert_stmt (stmt, result);
|
||||
return changed;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -3555,7 +3568,11 @@ visit_nary_op (tree lhs, gassign *stmt)
|
|||
TREE_TYPE (lhs),
|
||||
ops);
|
||||
if (result)
|
||||
return set_ssa_val_to (lhs, result);
|
||||
{
|
||||
bool changed = set_ssa_val_to (lhs, result);
|
||||
vn_nary_op_insert_stmt (stmt, result);
|
||||
return changed;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue