Commit e86087ee by Richard Biener

2018-10-22 Richard Biener <rguenther@suse.de>

	* gimple-ssa-evrp-analyze.c
	(evrp_range_analyzer::record_ranges_from_incoming_edge): Be
	smarter about what ranges to use.
	* tree-vrp.c (add_assert_info): Dump here.
	(register_edge_assert_for_2): Instead of here at multiple but
	not all places.

	* gcc.dg/tree-ssa/evrp12.c: New testcase.
	* gcc.dg/predict-6.c: Adjust.
	* gcc.dg/tree-ssa/vrp33.c: Disable EVRP.
	* gcc.dg/tree-ssa/vrp02.c: Likewise.
	* gcc.dg/tree-ssa/cunroll-9.c: Likewise.

From-SVN: r265391
parent d1e14d97
2018-10-22 Richard Biener <rguenther@suse.de>
* gimple-ssa-evrp-analyze.c
(evrp_range_analyzer::record_ranges_from_incoming_edge): Be
smarter about what ranges to use.
* tree-vrp.c (add_assert_info): Dump here.
(register_edge_assert_for_2): Instead of here at multiple but
not all places.
* gcc.dg/tree-ssa/evrp12.c: New testcase.
* gcc.dg/predict-6.c: Adjust.
* gcc.dg/tree-ssa/vrp33.c: Disable EVRP.
* gcc.dg/tree-ssa/vrp02.c: Likewise.
* gcc.dg/tree-ssa/cunroll-9.c: Likewise.
2018-10-22 Steven Bosscher <steven@gcc.gnu.org> 2018-10-22 Steven Bosscher <steven@gcc.gnu.org>
Richard Biener <rguenther@suse.de> Richard Biener <rguenther@suse.de>
...@@ -203,6 +203,16 @@ evrp_range_analyzer::record_ranges_from_incoming_edge (basic_block bb) ...@@ -203,6 +203,16 @@ evrp_range_analyzer::record_ranges_from_incoming_edge (basic_block bb)
ordering issues that can lead to worse ranges. */ ordering issues that can lead to worse ranges. */
for (unsigned i = 0; i < vrs.length (); ++i) for (unsigned i = 0; i < vrs.length (); ++i)
{ {
/* But make sure we do not weaken ranges like when
getting first [64, +INF] and then ~[0, 0] from
conditions like (s & 0x3cc0) == 0). */
value_range *old_vr = get_value_range (vrs[i].first);
value_range tem (old_vr->kind (), old_vr->min (), old_vr->max ());
tem.intersect (vrs[i].second);
if (tem.kind () == old_vr->kind ()
&& tem.min () == old_vr->min ()
&& tem.max () == old_vr->max ())
continue;
push_value_range (vrs[i].first, vrs[i].second); push_value_range (vrs[i].first, vrs[i].second);
if (is_fallthru if (is_fallthru
&& all_uses_feed_or_dominated_by_stmt (vrs[i].first, stmt)) && all_uses_feed_or_dominated_by_stmt (vrs[i].first, stmt))
......
2018-10-22 Richard Biener <rguenther@suse.de>
* gcc.dg/tree-ssa/evrp12.c: New testcase.
* gcc.dg/predict-6.c: Adjust.
* gcc.dg/tree-ssa/vrp33.c: Disable EVRP.
* gcc.dg/tree-ssa/vrp02.c: Likewise.
* gcc.dg/tree-ssa/cunroll-9.c: Likewise.
2018-10-22 Martin Liska <mliska@suse.cz> 2018-10-22 Martin Liska <mliska@suse.cz>
PR tree-optimization/87686 PR tree-optimization/87686
* g++.dg/tree-ssa/pr87686.C: New test. * g++.dg/tree-ssa/pr87686.C: New test.
2018-10-22 Jakub Jelinek <jakub@redhat.com> 2018-10-22 Jakub Jelinek <jakub@redhat.com>
......
...@@ -10,9 +10,9 @@ void foo (int base, int bound) ...@@ -10,9 +10,9 @@ void foo (int base, int bound)
int i, ret = 0; int i, ret = 0;
for (i = base; i <= bound; i++) for (i = base; i <= bound; i++)
{ {
if (i < base) if (i <= base)
global += bar (i); global += bar (i);
if (i < base + 1) if (i < base + 2)
global += bar (i); global += bar (i);
if (i <= base + 3) if (i <= base + 3)
global += bar (i); global += bar (i);
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-cunrolli-details" } */ /* { dg-options "-O2 -fdump-tree-cunrolli-details -fdisable-tree-evrp" } */
void abort (void); void abort (void);
int q (void); int q (void);
int a[10]; int a[10];
......
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-evrp" } */
extern void link_error ();
void
f3 (unsigned int s)
{
if ((s & 0x3cc0) == 0)
{
if (s >= -15552U)
link_error ();
}
else
{
if (s <= 0x3f)
link_error ();
}
}
/* { dg-final { scan-tree-dump-not "link_error" "evrp" } } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-vrp1 -fdelete-null-pointer-checks" } */ /* { dg-options "-O2 -fdump-tree-vrp1 -fdelete-null-pointer-checks -fdisable-tree-evrp" } */
struct A struct A
{ {
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-vrp1 -fno-tree-fre" } */ /* { dg-options "-O2 -fdump-tree-vrp1 -fno-tree-fre -fdisable-tree-evrp" } */
/* This is from PR14052. */ /* This is from PR14052. */
......
...@@ -2299,6 +2299,9 @@ add_assert_info (vec<assert_info> &asserts, ...@@ -2299,6 +2299,9 @@ add_assert_info (vec<assert_info> &asserts,
info.val = val; info.val = val;
info.expr = expr; info.expr = expr;
asserts.safe_push (info); asserts.safe_push (info);
dump_printf (MSG_NOTE | MSG_PRIORITY_INTERNALS,
"Adding assert for %T from %T %s %T\n",
name, expr, op_symbol_code (comp_code), val);
} }
/* If NAME doesn't have an ASSERT_EXPR registered for asserting /* If NAME doesn't have an ASSERT_EXPR registered for asserting
...@@ -2698,16 +2701,6 @@ register_edge_assert_for_2 (tree name, edge e, ...@@ -2698,16 +2701,6 @@ register_edge_assert_for_2 (tree name, edge e,
tmp = build1 (NOP_EXPR, TREE_TYPE (name), name3); tmp = build1 (NOP_EXPR, TREE_TYPE (name), name3);
if (cst2 != NULL_TREE) if (cst2 != NULL_TREE)
tmp = build2 (PLUS_EXPR, TREE_TYPE (name), tmp, cst2); tmp = build2 (PLUS_EXPR, TREE_TYPE (name), tmp, cst2);
if (dump_file)
{
fprintf (dump_file, "Adding assert for ");
print_generic_expr (dump_file, name3);
fprintf (dump_file, " from ");
print_generic_expr (dump_file, tmp);
fprintf (dump_file, "\n");
}
add_assert_info (asserts, name3, tmp, comp_code, val); add_assert_info (asserts, name3, tmp, comp_code, val);
} }
...@@ -2725,16 +2718,6 @@ register_edge_assert_for_2 (tree name, edge e, ...@@ -2725,16 +2718,6 @@ register_edge_assert_for_2 (tree name, edge e,
tmp = build1 (NOP_EXPR, TREE_TYPE (name), tmp); tmp = build1 (NOP_EXPR, TREE_TYPE (name), tmp);
if (cst2 != NULL_TREE) if (cst2 != NULL_TREE)
tmp = build2 (PLUS_EXPR, TREE_TYPE (name), tmp, cst2); tmp = build2 (PLUS_EXPR, TREE_TYPE (name), tmp, cst2);
if (dump_file)
{
fprintf (dump_file, "Adding assert for ");
print_generic_expr (dump_file, name2);
fprintf (dump_file, " from ");
print_generic_expr (dump_file, tmp);
fprintf (dump_file, "\n");
}
add_assert_info (asserts, name2, tmp, comp_code, val); add_assert_info (asserts, name2, tmp, comp_code, val);
} }
} }
...@@ -2857,16 +2840,6 @@ register_edge_assert_for_2 (tree name, edge e, ...@@ -2857,16 +2840,6 @@ register_edge_assert_for_2 (tree name, edge e,
cst = fold_build2 (MINUS_EXPR, TREE_TYPE (name2), cst, cst = fold_build2 (MINUS_EXPR, TREE_TYPE (name2), cst,
build_int_cst (TREE_TYPE (name2), 1)); build_int_cst (TREE_TYPE (name2), 1));
} }
if (dump_file)
{
fprintf (dump_file, "Adding assert for ");
print_generic_expr (dump_file, name2);
fprintf (dump_file, " from ");
print_generic_expr (dump_file, tmp);
fprintf (dump_file, "\n");
}
add_assert_info (asserts, name2, tmp, new_comp_code, cst); add_assert_info (asserts, name2, tmp, new_comp_code, cst);
} }
} }
...@@ -2931,18 +2904,7 @@ register_edge_assert_for_2 (tree name, edge e, ...@@ -2931,18 +2904,7 @@ register_edge_assert_for_2 (tree name, edge e,
} }
if (new_val) if (new_val)
{ add_assert_info (asserts, name2, tmp, new_comp_code, new_val);
if (dump_file)
{
fprintf (dump_file, "Adding assert for ");
print_generic_expr (dump_file, name2);
fprintf (dump_file, " from ");
print_generic_expr (dump_file, tmp);
fprintf (dump_file, "\n");
}
add_assert_info (asserts, name2, tmp, new_comp_code, new_val);
}
} }
/* Add asserts for NAME cmp CST and NAME being defined as /* Add asserts for NAME cmp CST and NAME being defined as
...@@ -3170,16 +3132,6 @@ register_edge_assert_for_2 (tree name, edge e, ...@@ -3170,16 +3132,6 @@ register_edge_assert_for_2 (tree name, edge e,
maxv2 = maxv - minv; maxv2 = maxv - minv;
} }
new_val = wide_int_to_tree (type, maxv2); new_val = wide_int_to_tree (type, maxv2);
if (dump_file)
{
fprintf (dump_file, "Adding assert for ");
print_generic_expr (dump_file, names[i]);
fprintf (dump_file, " from ");
print_generic_expr (dump_file, tmp);
fprintf (dump_file, "\n");
}
add_assert_info (asserts, names[i], tmp, LE_EXPR, new_val); add_assert_info (asserts, names[i], tmp, LE_EXPR, new_val);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment