mirror of git://gcc.gnu.org/git/gcc.git
re PR tree-optimization/80974 (wrong code (generated code hangs) at -O2 on x86_64-linux-gnu)
2017-06-06 Richard Biener <rguenther@suse.de> PR tree-optimization/80974 * tree-ssa-sccvn.c (set_ssa_val_to): Do not change but only keep or clear leaders SSA info. * gcc.dg/torture/pr80974.c: New testcase. From-SVN: r248919
This commit is contained in:
parent
38827811dd
commit
331dc84013
|
|
@ -1,3 +1,9 @@
|
||||||
|
2017-06-06 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR tree-optimization/80974
|
||||||
|
* tree-ssa-sccvn.c (set_ssa_val_to): Do not change but only
|
||||||
|
keep or clear leaders SSA info.
|
||||||
|
|
||||||
2017-06-06 Tom de Vries <tom@codesourcery.com>
|
2017-06-06 Tom de Vries <tom@codesourcery.com>
|
||||||
|
|
||||||
* config/nvptx/nvptx.c (split_mode_p): New function.
|
* config/nvptx/nvptx.c (split_mode_p): New function.
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
2017-06-06 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR tree-optimization/80974
|
||||||
|
* gcc.dg/torture/pr80974.c: New testcase.
|
||||||
|
|
||||||
2017-06-06 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
2017-06-06 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
||||||
|
|
||||||
* gcc.dg/utf16-4.c: Accept "long unsigned int" as well as
|
* gcc.dg/utf16-4.c: Accept "long unsigned int" as well as
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
/* { dg-do run } */
|
||||||
|
|
||||||
|
int a, b, c, d, e, f, g[4];
|
||||||
|
|
||||||
|
static int fn1 ()
|
||||||
|
{
|
||||||
|
int h, i;
|
||||||
|
if (b)
|
||||||
|
goto L1;
|
||||||
|
L2:;
|
||||||
|
int m = a;
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
int n = 2;
|
||||||
|
e = !f && (n = 5);
|
||||||
|
if (e)
|
||||||
|
for (h = 0; h < 9; h++)
|
||||||
|
for (i = 0; i < 6; i++)
|
||||||
|
if (a)
|
||||||
|
g[h] = 4;
|
||||||
|
if (d)
|
||||||
|
goto L2;
|
||||||
|
a & n || b;
|
||||||
|
L1:
|
||||||
|
if (a)
|
||||||
|
L3:
|
||||||
|
c = m;
|
||||||
|
if (a)
|
||||||
|
goto L3;
|
||||||
|
if (b < 5)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main ()
|
||||||
|
{
|
||||||
|
fn1 ();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
@ -3328,6 +3328,9 @@ set_ssa_val_to (tree from, tree to)
|
||||||
== get_addr_base_and_unit_offset (TREE_OPERAND (to, 0), &toff))
|
== get_addr_base_and_unit_offset (TREE_OPERAND (to, 0), &toff))
|
||||||
&& coff == toff))
|
&& coff == toff))
|
||||||
{
|
{
|
||||||
|
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||||
|
fprintf (dump_file, " (changed)\n");
|
||||||
|
|
||||||
/* If we equate two SSA names we have to make the side-band info
|
/* If we equate two SSA names we have to make the side-band info
|
||||||
of the leader conservative (and remember whatever original value
|
of the leader conservative (and remember whatever original value
|
||||||
was present). */
|
was present). */
|
||||||
|
|
@ -3342,22 +3345,6 @@ set_ssa_val_to (tree from, tree to)
|
||||||
gimple_bb (SSA_NAME_DEF_STMT (to))))
|
gimple_bb (SSA_NAME_DEF_STMT (to))))
|
||||||
/* Keep the info from the dominator. */
|
/* Keep the info from the dominator. */
|
||||||
;
|
;
|
||||||
else if (SSA_NAME_IS_DEFAULT_DEF (from)
|
|
||||||
|| dominated_by_p_w_unex
|
|
||||||
(gimple_bb (SSA_NAME_DEF_STMT (to)),
|
|
||||||
gimple_bb (SSA_NAME_DEF_STMT (from))))
|
|
||||||
{
|
|
||||||
/* Save old info. */
|
|
||||||
if (! VN_INFO (to)->info.range_info)
|
|
||||||
{
|
|
||||||
VN_INFO (to)->info.range_info = SSA_NAME_RANGE_INFO (to);
|
|
||||||
VN_INFO (to)->range_info_anti_range_p
|
|
||||||
= SSA_NAME_ANTI_RANGE_P (to);
|
|
||||||
}
|
|
||||||
/* Use that from the dominator. */
|
|
||||||
SSA_NAME_RANGE_INFO (to) = SSA_NAME_RANGE_INFO (from);
|
|
||||||
SSA_NAME_ANTI_RANGE_P (to) = SSA_NAME_ANTI_RANGE_P (from);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Save old info. */
|
/* Save old info. */
|
||||||
|
|
@ -3369,6 +3356,12 @@ set_ssa_val_to (tree from, tree to)
|
||||||
}
|
}
|
||||||
/* Rather than allocating memory and unioning the info
|
/* Rather than allocating memory and unioning the info
|
||||||
just clear it. */
|
just clear it. */
|
||||||
|
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||||
|
{
|
||||||
|
fprintf (dump_file, "clearing range info of ");
|
||||||
|
print_generic_expr (dump_file, to);
|
||||||
|
fprintf (dump_file, "\n");
|
||||||
|
}
|
||||||
SSA_NAME_RANGE_INFO (to) = NULL;
|
SSA_NAME_RANGE_INFO (to) = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -3381,17 +3374,6 @@ set_ssa_val_to (tree from, tree to)
|
||||||
gimple_bb (SSA_NAME_DEF_STMT (to))))
|
gimple_bb (SSA_NAME_DEF_STMT (to))))
|
||||||
/* Keep the info from the dominator. */
|
/* Keep the info from the dominator. */
|
||||||
;
|
;
|
||||||
else if (SSA_NAME_IS_DEFAULT_DEF (from)
|
|
||||||
|| dominated_by_p_w_unex
|
|
||||||
(gimple_bb (SSA_NAME_DEF_STMT (to)),
|
|
||||||
gimple_bb (SSA_NAME_DEF_STMT (from))))
|
|
||||||
{
|
|
||||||
/* Save old info. */
|
|
||||||
if (! VN_INFO (to)->info.ptr_info)
|
|
||||||
VN_INFO (to)->info.ptr_info = SSA_NAME_PTR_INFO (to);
|
|
||||||
/* Use that from the dominator. */
|
|
||||||
SSA_NAME_PTR_INFO (to) = SSA_NAME_PTR_INFO (from);
|
|
||||||
}
|
|
||||||
else if (! SSA_NAME_PTR_INFO (from)
|
else if (! SSA_NAME_PTR_INFO (from)
|
||||||
/* Handle the case of trivially equivalent info. */
|
/* Handle the case of trivially equivalent info. */
|
||||||
|| memcmp (SSA_NAME_PTR_INFO (to),
|
|| memcmp (SSA_NAME_PTR_INFO (to),
|
||||||
|
|
@ -3403,14 +3385,18 @@ set_ssa_val_to (tree from, tree to)
|
||||||
VN_INFO (to)->info.ptr_info = SSA_NAME_PTR_INFO (to);
|
VN_INFO (to)->info.ptr_info = SSA_NAME_PTR_INFO (to);
|
||||||
/* Rather than allocating memory and unioning the info
|
/* Rather than allocating memory and unioning the info
|
||||||
just clear it. */
|
just clear it. */
|
||||||
|
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||||
|
{
|
||||||
|
fprintf (dump_file, "clearing points-to info of ");
|
||||||
|
print_generic_expr (dump_file, to);
|
||||||
|
fprintf (dump_file, "\n");
|
||||||
|
}
|
||||||
SSA_NAME_PTR_INFO (to) = NULL;
|
SSA_NAME_PTR_INFO (to) = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VN_INFO (from)->valnum = to;
|
VN_INFO (from)->valnum = to;
|
||||||
if (dump_file && (dump_flags & TDF_DETAILS))
|
|
||||||
fprintf (dump_file, " (changed)\n");
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (dump_file && (dump_flags & TDF_DETAILS))
|
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue