Bug 34172 - Missed store ccp optimization
Summary: Missed store ccp optimization
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: tree-optimization (show other bugs)
Version: 4.3.0
: P3 enhancement
Target Milestone: 4.4.0
Assignee: Richard Biener
URL:
Keywords: missed-optimization
Depends on:
Blocks:
 
Reported: 2007-11-21 11:26 UTC by revital eres
Modified: 2008-03-14 17:25 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2007-11-30 10:25:34


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description revital eres 2007-11-21 11:26:21 UTC
#define N 256

struct
{
  int x;
  int y;
} S[100];

int z[100];

int
foo (int y)
{
  int x;

  S[5].x = 4;
  S[5].y = 0;

  x = S[5].x;

  return (x);
}

On powerpc64-linux, r130275 with -O2 we get:
(taken from .store_ccp dump file)

foo (y)
{
  int x;

<bb 2>:
  S[5].x = 4;
  S[5].y = 0;
  x_1 = S[5].x;
  return x_1;

}

[A patch was submitted (http://gcc.gnu.org/ml/gcc-patches/2007-06/msg01901.html) which is no longer relevant because of -http://gcc.gnu.org/ml/gcc-patches/2007-08/msg01370.html.]
Comment 1 Richard Biener 2007-11-21 12:04:28 UTC
Note that only store _copyprop_ was removed for now.  But yes, store ccp removal
is on the plate.  Note that this and similar bugs should be fixed by extending
value-numbering to disambiguate memory accesses itself and not only relying on
virtual operands.

Confirmed.
Comment 2 Richard Biener 2007-11-30 10:25:34 UTC
Mine.  I have a patch.
Comment 3 Richard Biener 2008-03-14 17:06:37 UTC
Subject: Bug 34172

Author: rguenth
Date: Fri Mar 14 17:05:48 2008
New Revision: 133222

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=133222
Log:
2008-03-14  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/34172
	* tree-flow.h (refs_may_alias_p): Declare.
	(get_single_def_stmt): Likewise.
	(get_single_def_stmt_from_phi): Likewise.
	(get_single_def_stmt_with_phi): Likewise.
	* tree-dfa.c (refs_may_alias_p): New function.
	(get_single_def_stmt): Likewise.
	(get_single_def_stmt_from_phi): Likewise.
	(get_single_def_stmt_with_phi): Likewise.
	* tree-ssa-sccvn.c (get_def_ref_stmt_vuses): New function.
	(vn_reference_lookup_1): New helper function.
	(vn_reference_lookup): Walk the virtual use-def chain to
	continue searching for a match if the def does not alias the
	reference we are looking for.

	* gcc.dg/tree-ssa/ssa-fre-11.c: New testcase.
	* gcc.dg/tree-ssa/ssa-fre-12.c: Likewise.
	* gcc.dg/tree-ssa/ssa-fre-13.c: Likewise.
	* gcc.dg/tree-ssa/ssa-fre-14.c: Likewise.
	* gcc.dg/tree-ssa/ssa-fre-15.c: Likewise.
	* gcc.dg/tree-ssa/20031106-4.c: Remove XFAIL.

Added:
    trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-11.c
    trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-12.c
    trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-13.c
    trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-14.c
    trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-15.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gcc.dg/tree-ssa/20031106-4.c
    trunk/gcc/tree-dfa.c
    trunk/gcc/tree-flow.h
    trunk/gcc/tree-ssa-sccvn.c

Comment 4 Richard Biener 2008-03-14 17:25:36 UTC
Fixed.