[Bug tree-optimization/77677] [7 Regression] ICE at -O1 and above in both 32-bit and 64-bit modes on x86_64-linux-gnu (internal compiler error: in set_value_range, at tree-vrp.c:361)
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Sep 22 08:47:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77677
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
#4 0x000000000189c86e in ipcp_vr_lattice::meet_with_1 (this=0x280a780,
other_vr=0x7ffff69a3e88) at /space/rguenther/src/svn/trunk/gcc/ipa-cp.c:987
987 vrp_meet (&m_vr, other_vr);
(gdb) l
982 return false;
983
984 if (other_vr->type == VR_VARYING)
985 return set_to_bottom ();
986
987 vrp_meet (&m_vr, other_vr);
988 if (type != m_vr.type
989 || min != m_vr.min
990 || max != m_vr.max)
991 return true;
(gdb) p debug_value_range(other_vr)
[-25536(OVF), -25536(OVF)]
those overflow bits are bogus. Ultimatively comes from the jump function VR:
else if (jfunc->type == IPA_JF_CONST)
{
tree val = ipa_get_jf_constant (jfunc);
if (TREE_CODE (val) == INTEGER_CST)
{
jfunc->vr_known = true;
jfunc->m_vr.type = VR_RANGE;
jfunc->m_vr.min = val;
jfunc->m_vr.max = val;
return dest_lat->meet_with (&jfunc->m_vr);
and basically means that IPA_JF_CONST should be stripping overflow flags.
The overflow flag is ultimatively introduced at FRE1:
main ()
{
int c$0;
int c[1];
<bb 2>:
fn1 (-25536(OVF));
Setting value number of _1 to 40000 (changed)
Value numbering _2 stmt = _2 = (short int) _1;
Match-and-simplified (short int) _1 to -25536(OVF)
RHS (short int) _1 simplified to -25536(OVF)
I have a patch to fix this particular source of overflow flags but given the
assert VRP routine users should make sure to strip overflow themselves.
Index: gcc/gimple-match-head.c
===================================================================
--- gcc/gimple-match-head.c (revision 240342)
+++ gcc/gimple-match-head.c (working copy)
@@ -89,6 +89,8 @@ gimple_resimplify1 (gimple_seq *seq,
if (tem != NULL_TREE
&& CONSTANT_CLASS_P (tem))
{
+ if (TREE_OVERFLOW_P (tem))
+ tem = drop_tree_overflow (tem);
res_ops[0] = tem;
res_ops[1] = NULL_TREE;
res_ops[2] = NULL_TREE;
@@ -134,6 +136,8 @@ gimple_resimplify2 (gimple_seq *seq,
if (tem != NULL_TREE
&& CONSTANT_CLASS_P (tem))
{
+ if (TREE_OVERFLOW_P (tem))
+ tem = drop_tree_overflow (tem);
res_ops[0] = tem;
res_ops[1] = NULL_TREE;
res_ops[2] = NULL_TREE;
@@ -194,6 +198,8 @@ gimple_resimplify3 (gimple_seq *seq,
if (tem != NULL_TREE
&& CONSTANT_CLASS_P (tem))
{
+ if (TREE_OVERFLOW_P (tem))
+ tem = drop_tree_overflow (tem);
res_ops[0] = tem;
res_ops[1] = NULL_TREE;
res_ops[2] = NULL_TREE;
More information about the Gcc-bugs
mailing list