[Bug tree-optimization/50577] New: IPA-PTA context insensitivity confuses pure-const analysis
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Sep 30 11:48:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50577
Bug #: 50577
Summary: IPA-PTA context insensitivity confuses pure-const
analysis
Classification: Unclassified
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: rguenth@gcc.gnu.org
For gcc.c-torture/execute/20000412-2.c, slightly changed to
static int f(int a,int *y)
{
int x = a;
if (a==0)
return *y;
return f(a-1,&x);
}
int main(int argc,char **argv)
{
if (f (100, (int *) 0) != 1)
abort ();
exit (0);
}
IPA-PTA computes that in f(), y points to { 0, x }, and when the late
local pure-const pass comes along it sees f():
scanning: D.2734_4 = *y_3(D);
Indirect ref to local memory is OK
making f() const. That causes RTL DSE to delete the store x = a.
This triggers with
Index: tree-ssa-structalias.c
===================================================================
--- tree-ssa-structalias.c (revision 179378)
+++ tree-ssa-structalias.c (working copy)
@@ -6010,11 +6043,13 @@ pt_solution_includes_global (struct pt_s
if (pt->ipa_escaped)
return pt_solution_includes_global (&ipa_escaped_pt);
+#if 0
/* ??? This predicate is not correct for the IPA-PTA solution
as we do not properly distinguish between unit escape points
and global variables. */
if (cfun->gimple_df->ipa_pta)
return true;
+#endif
return false;
}
only (obviously).
More information about the Gcc-bugs
mailing list