This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/35692] New: DSE not removing redundant stores
- From: "rguenth at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 25 Mar 2008 12:50:50 -0000
- Subject: [Bug tree-optimization/35692] New: DSE not removing redundant stores
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
Extracted from what tree-ssa/20030731-2.c probably really wanted to test:
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-optimized" } */
int offset;
extern void foo (void);
void
bar (int i, int partial, int args_addr)
{
offset = 0;
if (args_addr == 0)
offset = 0;
if (i >= offset)
foo ();
}
/* There should be only one IF conditional since the first does nothing
useful. */
/* { dg-final { scan-tree-dump-times "if " 1 "optimized"} } */
/* { dg-final { cleanup-tree-dump "optimized" } } */
SCCVN figures the load from offset is zero so DSE is left with
<bb 2>:
offset = 0;
if (args_addr_1(D) == 0)
goto <bb 3>;
else
goto <bb 4>;
<bb 3>:
offset = 0;
<bb 4>:
where it should figure that the store to offset in BB3 is redundant.
This works later on the RTL level.
--
Summary: DSE not removing redundant stores
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Keywords: missed-optimization, TREE
Severity: normal
Priority: P3
Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: rguenth at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35692