mirror of git://gcc.gnu.org/git/gcc.git
re PR tree-optimization/81003 (ICE: tree check: expected ssa_name, have integer_cst in optimize_range_tests_to_bit_test, at tree-ssa-reassoc.c:2782)
PR tree-optimization/81003 * tree-ssa-reassoc.c (force_into_ssa_name): New function. (update_range_test): Use it instead of force_gimple_operand_gsi. * gcc.c-torture/compile/pr81003.c: New test. From-SVN: r249114
This commit is contained in:
parent
3fd7fe218b
commit
aebce39694
|
|
@ -1,3 +1,9 @@
|
||||||
|
2017-06-12 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR tree-optimization/81003
|
||||||
|
* tree-ssa-reassoc.c (force_into_ssa_name): New function.
|
||||||
|
(update_range_test): Use it instead of force_gimple_operand_gsi.
|
||||||
|
|
||||||
2017-06-12 Richard Biener <rguenther@suse.de>
|
2017-06-12 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
PR tree-optimization/81053
|
PR tree-optimization/81053
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
2017-06-12 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR tree-optimization/81003
|
||||||
|
* gcc.c-torture/compile/pr81003.c: New test.
|
||||||
|
|
||||||
2017-06-12 Richard Biener <rguenther@suse.de>
|
2017-06-12 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
PR tree-optimization/81053
|
PR tree-optimization/81053
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
/* PR tree-optimization/81003 */
|
||||||
|
|
||||||
|
unsigned int a, b;
|
||||||
|
|
||||||
|
void
|
||||||
|
foo (void)
|
||||||
|
{
|
||||||
|
for (b = 0; b < 13; b += 2)
|
||||||
|
a &= !!b;
|
||||||
|
}
|
||||||
|
|
@ -2282,6 +2282,26 @@ range_entry_cmp (const void *a, const void *b)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Helper function for update_range_test. Force EXPR into an SSA_NAME,
|
||||||
|
insert needed statements BEFORE or after GSI. */
|
||||||
|
|
||||||
|
static tree
|
||||||
|
force_into_ssa_name (gimple_stmt_iterator *gsi, tree expr, bool before)
|
||||||
|
{
|
||||||
|
enum gsi_iterator_update m = before ? GSI_SAME_STMT : GSI_CONTINUE_LINKING;
|
||||||
|
tree ret = force_gimple_operand_gsi (gsi, expr, true, NULL_TREE, before, m);
|
||||||
|
if (TREE_CODE (ret) != SSA_NAME)
|
||||||
|
{
|
||||||
|
gimple *g = gimple_build_assign (make_ssa_name (TREE_TYPE (ret)), ret);
|
||||||
|
if (before)
|
||||||
|
gsi_insert_before (gsi, g, GSI_SAME_STMT);
|
||||||
|
else
|
||||||
|
gsi_insert_after (gsi, g, GSI_CONTINUE_LINKING);
|
||||||
|
ret = gimple_assign_lhs (g);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/* Helper routine of optimize_range_test.
|
/* Helper routine of optimize_range_test.
|
||||||
[EXP, IN_P, LOW, HIGH, STRICT_OVERFLOW_P] is a merged range for
|
[EXP, IN_P, LOW, HIGH, STRICT_OVERFLOW_P] is a merged range for
|
||||||
RANGE and OTHERRANGE through OTHERRANGE + COUNT - 1 ranges,
|
RANGE and OTHERRANGE through OTHERRANGE + COUNT - 1 ranges,
|
||||||
|
|
@ -2393,15 +2413,13 @@ update_range_test (struct range_entry *range, struct range_entry *otherrange,
|
||||||
else if (op != range->exp)
|
else if (op != range->exp)
|
||||||
{
|
{
|
||||||
gsi_insert_seq_before (&gsi, seq, GSI_SAME_STMT);
|
gsi_insert_seq_before (&gsi, seq, GSI_SAME_STMT);
|
||||||
tem = force_gimple_operand_gsi (&gsi, tem, true, NULL_TREE, true,
|
tem = force_into_ssa_name (&gsi, tem, true);
|
||||||
GSI_SAME_STMT);
|
|
||||||
gsi_prev (&gsi);
|
gsi_prev (&gsi);
|
||||||
}
|
}
|
||||||
else if (gimple_code (stmt) != GIMPLE_PHI)
|
else if (gimple_code (stmt) != GIMPLE_PHI)
|
||||||
{
|
{
|
||||||
gsi_insert_seq_after (&gsi, seq, GSI_CONTINUE_LINKING);
|
gsi_insert_seq_after (&gsi, seq, GSI_CONTINUE_LINKING);
|
||||||
tem = force_gimple_operand_gsi (&gsi, tem, true, NULL_TREE, false,
|
tem = force_into_ssa_name (&gsi, tem, false);
|
||||||
GSI_CONTINUE_LINKING);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -2419,8 +2437,7 @@ update_range_test (struct range_entry *range, struct range_entry *otherrange,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
gsi_insert_seq_before (&gsi, seq, GSI_SAME_STMT);
|
gsi_insert_seq_before (&gsi, seq, GSI_SAME_STMT);
|
||||||
tem = force_gimple_operand_gsi (&gsi, tem, true, NULL_TREE, true,
|
tem = force_into_ssa_name (&gsi, tem, true);
|
||||||
GSI_SAME_STMT);
|
|
||||||
if (gsi_end_p (gsi))
|
if (gsi_end_p (gsi))
|
||||||
gsi = gsi_last_bb (gimple_bb (stmt));
|
gsi = gsi_last_bb (gimple_bb (stmt));
|
||||||
else
|
else
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue