Commit ea7d7da8 by Richard Biener Committed by Richard Biener

re PR ipa/78644 (ICE: SIGSEGV in is_gimple_reg_type with -Og -fipa-cp)

2017-03-28  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/78644
	* tree-ssa-ccp.c (evaluate_stmt): When we may not use the value
	of a simplification result we may not use it at all.

	* gcc.dg/pr78644-1.c: New testcase.
	* gcc.dg/pr78644-2.c: Likewise.

From-SVN: r246534
parent 498173ef
2017-03-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/78644
* tree-ssa-ccp.c (evaluate_stmt): When we may not use the value
of a simplification result we may not use it at all.
2017-03-28 Richard Biener <rguenther@suse.de>
PR ipa/80205
* tree-inline.c (copy_phis_for_bb): Do not create PHI node
without arguments, generate default definition of a SSA name.
......
2017-03-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/78644
* gcc.dg/pr78644-1.c: New testcase.
* gcc.dg/pr78644-2.c: Likewise.
2017-03-28 Toma Tabacu <toma.tabacu@imgtec.com>
* gcc.dg/pic-3.c: Skip for mips*-*-linux-*.
......
/* { dg-do compile { target int128 } } */
/* { dg-options "-Og -fipa-cp -w -Wno-psabi" } */
typedef unsigned __int128 u128;
typedef unsigned __int128 V __attribute__ ((vector_size (64)));
V x4;
static V
bar (u128 x2, u128 x3)
{
while (x4[0]--)
x2 /= x3 >>= 1;
return x2 + x3 + x4;
}
void
foo (void)
{
bar (0, 0);
}
/* { dg-do compile { target int128 } } */
/* { dg-options "-Og -finline-functions-called-once -w -Wno-psabi" } */
typedef unsigned V __attribute__ ((vector_size (64)));
typedef unsigned __int128 U __attribute__ ((vector_size (64)));
U
bar4 (U u0, U u1)
{
if (u1[0])
u1 <<= 1;
return u0 + u1;
}
V
foo (U u, V v)
{
v |= (unsigned)bar4(u, (U){})[0];
return v;
}
......@@ -1749,18 +1749,24 @@ evaluate_stmt (gimple *stmt)
fold_defer_overflow_warnings ();
simplified = ccp_fold (stmt);
if (simplified
&& TREE_CODE (simplified) == SSA_NAME
&& TREE_CODE (simplified) == SSA_NAME)
{
/* We may not use values of something that may be simulated again,
see valueize_op_1. */
&& (SSA_NAME_IS_DEFAULT_DEF (simplified)
|| ! prop_simulate_again_p (SSA_NAME_DEF_STMT (simplified))))
{
ccp_prop_value_t *val = get_value (simplified);
if (val && val->lattice_val != VARYING)
if (SSA_NAME_IS_DEFAULT_DEF (simplified)
|| ! prop_simulate_again_p (SSA_NAME_DEF_STMT (simplified)))
{
fold_undefer_overflow_warnings (true, stmt, 0);
return *val;
ccp_prop_value_t *val = get_value (simplified);
if (val && val->lattice_val != VARYING)
{
fold_undefer_overflow_warnings (true, stmt, 0);
return *val;
}
}
else
/* We may also not place a non-valueized copy in the lattice
as that might become stale if we never re-visit this stmt. */
simplified = NULL_TREE;
}
is_constant = simplified && is_gimple_min_invariant (simplified);
fold_undefer_overflow_warnings (is_constant, stmt, 0);
......
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