[Bug tree-optimization/36373] [4.2/4.3/4.4 Regression] Wrong code with struct return

2008-06-27 Thread rguenth at gcc dot gnu dot org


--- Comment #7 from rguenth at gcc dot gnu dot org  2008-06-27 21:55 ---
Subject: Bug 36373

Author: rguenth
Date: Fri Jun 27 21:54:42 2008
New Revision: 137204

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=137204
Log:
2008-06-27  Richard Guenther  <[EMAIL PROTECTED]>

PR tree-optimization/36400
PR tree-optimization/36373
PR tree-optimization/36344
* tree-ssa-structalias.c (var_escaped, escaped_tree, escaped_id,
var_nonlocal, nonlocal_tree, nonlocal_id): New globals
(update_alias_info): Remove call clobbering code.
(make_constraint_to): New helper function.
(make_escape_constraint): Likewise.
(handle_rhs_call): Use it on all pointer containing arguments.
Also mark the static chain escaped.
(handle_lhs_call): Make constraints from NONLOCAL and ESCAPED
instead of ANYTHING.
(make_constraint_from): New helper split out from ...
(make_constraint_from_anything): ... here.
(find_func_aliases): Add constraints for escape sites.
(intra_create_variable_infos): Make constraints from NONLOCAL
for parameters.
(find_what_p_points_to): Interpret NONLOCAL and ESCAPED the same
as ANYTHING.
(clobber_what_p_points_to): Remove.
(clobber_what_escaped): New function.
(init_base_vars): Init NONLOCAL and ESCAPED.
(do_sd_constraint): Do not propagate the solution from ESCAPED
but use ESCAPED as a placeholder.
(solve_graph): Likewise.
* tree-flow.h (clobber_what_p_points_to): Remove.
(clobber_what_escaped): Declare.
* tree-ssa-alias.c (set_initial_properties): Call it.
Remove code clobbering escaped pointers.

* gcc.dg/torture/pr36373-1.c: New testcase.
* gcc.dg/torture/pr36373-2.c: Likewise.
* gcc.dg/torture/pr36373-3.c: Likewise.
* gcc.dg/torture/pr36373-4.c: Likewise.
* gcc.dg/torture/pr36373-5.c: Likewise.
* gcc.dg/torture/pr36373-6.c: Likewise.
* gcc.dg/torture/pr36373-7.c: Likewise.
* gcc.dg/torture/pr36373-8.c: Likewise.
* gcc.dg/torture/pr36373-9.c: Likewise.
* gcc.dg/torture/pr36373-10.c: Likewise.
* gcc.dg/torture/pr36400.c: Likewise.
* gcc.c-torture/execute/pta-field-1.c: Likewise.
* gcc.c-torture/execute/pta-field-2.c: Likewise.
* gcc.dg/tree-ssa/loadpre8.c: Remove XFAIL.
* gcc.dg/tree-ssa/pr24287.c: XFAIL.

Added:
trunk/gcc/testsuite/gcc.c-torture/execute/pta-field-1.c
trunk/gcc/testsuite/gcc.c-torture/execute/pta-field-2.c
trunk/gcc/testsuite/gcc.dg/torture/pr36373-1.c
trunk/gcc/testsuite/gcc.dg/torture/pr36373-10.c
trunk/gcc/testsuite/gcc.dg/torture/pr36373-2.c
trunk/gcc/testsuite/gcc.dg/torture/pr36373-3.c
trunk/gcc/testsuite/gcc.dg/torture/pr36373-4.c
trunk/gcc/testsuite/gcc.dg/torture/pr36373-5.c
trunk/gcc/testsuite/gcc.dg/torture/pr36373-6.c
trunk/gcc/testsuite/gcc.dg/torture/pr36373-7.c
trunk/gcc/testsuite/gcc.dg/torture/pr36373-8.c
trunk/gcc/testsuite/gcc.dg/torture/pr36373-9.c
trunk/gcc/testsuite/gcc.dg/torture/pr36400.c


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36373



[Bug tree-optimization/36373] [4.2/4.3/4.4 Regression] Wrong code with struct return

2008-06-27 Thread rguenth at gcc dot gnu dot org


--- Comment #6 from rguenth at gcc dot gnu dot org  2008-06-27 18:54 ---
Subject: Bug 36373

Author: rguenth
Date: Fri Jun 27 18:53:43 2008
New Revision: 137197

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=137197
Log:
2008-06-27  Richard Guenther  <[EMAIL PROTECTED]>

PR tree-optimization/36400
PR tree-optimization/36373
PR tree-optimization/36344
* tree-ssa-structalias.c (var_escaped, escaped_tree, escaped_id,
var_nonlocal, nonlocal_tree, nonlocal_id): New globals
(update_alias_info): Remove call clobbering code.
(make_constraint_to): New helper function.
(make_escape_constraint): Likewise.
(handle_rhs_call): Use it on all pointer containing arguments.
Also mark the static chain escaped.
(handle_lhs_call): Make constraints from NONLOCAL and ESCAPED
instead of ANYTHING.
(make_constraint_from): New helper split out from ...
(make_constraint_from_anything): ... here.
(find_func_aliases): Add constraints for escape sites.
(intra_create_variable_infos): Make constraints from NONLOCAL
for parameters.
(find_what_p_points_to): Interpret NONLOCAL and ESCAPED the same
as ANYTHING.
(clobber_what_p_points_to): Remove.
(clobber_what_escaped): New function.
(init_base_vars): Init NONLOCAL and ESCAPED.
(do_sd_constraint): Do not propagate the solution from ESCAPED
but use ESCAPED as a placeholder.
(solve_graph): Likewise.
* tree-flow.h (clobber_what_p_points_to): Remove.
(clobber_what_escaped): Declare.
* tree-ssa-alias.c (set_initial_properties): Call it.
Remove code clobbering escaped pointers.

* gcc.dg/torture/pr36373-1.c: New testcase.
* gcc.dg/torture/pr36373-2.c: Likewise.
* gcc.dg/torture/pr36373-3.c: Likewise.
* gcc.dg/torture/pr36373-4.c: Likewise.
* gcc.dg/torture/pr36373-5.c: Likewise.
* gcc.dg/torture/pr36373-6.c: Likewise.
* gcc.dg/torture/pr36373-7.c: Likewise.
* gcc.dg/torture/pr36373-8.c: Likewise.
* gcc.dg/torture/pr36373-9.c: Likewise.
* gcc.dg/torture/pr36373-10.c: Likewise.
* gcc.dg/torture/pr36400.c: Likewise.
* gcc.c-torture/execute/pta-field-1.c: Likewise.
* gcc.c-torture/execute/pta-field-2.c: Likewise.
* gcc.dg/tree-ssa/loadpre8.c: Remove XFAIL.
* gcc.dg/tree-ssa/pr24287.c: XFAIL.

Modified:
trunk/gcc/ChangeLog
trunk/gcc/testsuite/ChangeLog
trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre8.c
trunk/gcc/testsuite/gcc.dg/tree-ssa/pr24287.c
trunk/gcc/tree-flow.h
trunk/gcc/tree-ssa-alias.c
trunk/gcc/tree-ssa-structalias.c


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36373



[Bug tree-optimization/36373] [4.2/4.3/4.4 Regression] Wrong code with struct return

2008-06-25 Thread cnstar9988 at gmail dot com


--- Comment #5 from cnstar9988 at gmail dot com  2008-06-26 06:51 ---
ping...


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36373



[Bug tree-optimization/36373] [4.2/4.3/4.4 Regression] Wrong code with struct return

2008-06-13 Thread mmitchel at gcc dot gnu dot org


-- 

mmitchel at gcc dot gnu dot org changed:

   What|Removed |Added

   Priority|P3  |P1


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36373



[Bug tree-optimization/36373] [4.2/4.3/4.4 Regression] Wrong code with struct return

2008-05-30 Thread rguenth at gcc dot gnu dot org


--- Comment #4 from rguenth at gcc dot gnu dot org  2008-05-30 10:58 ---
Umm.  It's worse.

With -O2 -fno-tree-sra:

extern void abort (void);
struct Foo {
int *p;
} x;
struct Foo __attribute__((noinline))
bar(int *p)
{
  struct Foo f;
  f.p = p;
  return f;
}
void __attribute__((noinline))
foo()
{
  *x.p = 0;
}
int main()
{
  int b;
  b = 1;
  struct Foo g = bar (&b);
  x = g;
  foo();
  if (b != 0)
abort ();
  return 0;
}


the escape through the global x doesn't work either.  SRA "fixes" this by

  # g_7 = VDEF 
  g = bar (&b);
  # VUSE 
  g$p_2 = g.p; 
  # x_9 = VDEF 
  x.p = g$p_2;

where we (after partial fixes) compute the points-to set of g$p_2 correctly
and thus mark that pointer as escaping to a global in the next stmt.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36373



[Bug tree-optimization/36373] [4.2/4.3/4.4 Regression] Wrong code with struct return

2008-05-29 Thread rguenth at gcc dot gnu dot org


--- Comment #3 from rguenth at gcc dot gnu dot org  2008-05-29 15:44 ---
I have a patch.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36373



[Bug tree-optimization/36373] [4.2/4.3/4.4 Regression] Wrong code with struct return

2008-05-29 Thread rguenth at gcc dot gnu dot org


--- Comment #2 from rguenth at gcc dot gnu dot org  2008-05-29 15:23 ---
First we miss the constraint

  f = &ANYTHING

from

  f = bar (&b);

but then we also do not handle at all the case of escaping pointers through
by-value passed structures

  foo (f);

and thus we end up not clobbering b for that call.  The first part is easy
to fix.  I have to think about the second one ...


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36373



[Bug tree-optimization/36373] [4.2/4.3/4.4 Regression] Wrong code with struct return

2008-05-29 Thread rguenth at gcc dot gnu dot org


--- Comment #1 from rguenth at gcc dot gnu dot org  2008-05-29 15:07 ---
Mine.


-- 

rguenth at gcc dot gnu dot org changed:

   What|Removed |Added

 AssignedTo|unassigned at gcc dot gnu   |rguenth at gcc dot gnu dot
   |dot org |org
 Status|UNCONFIRMED |ASSIGNED
 Ever Confirmed|0   |1
  Known to work||4.1.2
   Last reconfirmed|-00-00 00:00:00 |2008-05-29 15:07:30
   date||
   Target Milestone|--- |4.2.5


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36373