toplev.c (rest_of_handle_addresof): Rename into rest_of_handle_addressof.
* toplev.c (rest_of_handle_addresof): Rename into rest_of_handle_addressof. Delete unreachable blocks if dead edges were purged after the addressof pass. From-SVN: r69545
This commit is contained in:
parent
b2e608ca7f
commit
f129791ccd
4 changed files with 52 additions and 5 deletions
|
@ -1,3 +1,10 @@
|
|||
2003-07-18 Eric Botcazou <ebotcazou@libertysurf.fr>
|
||||
|
||||
PR optimization/11083
|
||||
* toplev.c (rest_of_handle_addresof): Rename into
|
||||
rest_of_handle_addressof. Delete unreachable blocks
|
||||
if dead edges were purged after the addressof pass.
|
||||
|
||||
2003-07-18 Neil Booth <neil@daikokuya.co.uk>
|
||||
|
||||
* Makefile.in, configure, configure.in: Remove handling of
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2003-07-18 Eric Botcazou <ebotcazou@libertysurf.fr>
|
||||
|
||||
* g++.dg/opt/cfg1.C: New test.
|
||||
|
||||
2003-07-17 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR optimization/11557
|
||||
|
|
36
gcc/testsuite/g++.dg/opt/cfg1.C
Normal file
36
gcc/testsuite/g++.dg/opt/cfg1.C
Normal file
|
@ -0,0 +1,36 @@
|
|||
// PR optimization/11083
|
||||
// Origin: <nick@ilm.com>
|
||||
// Reduced testcase by Wolfgang Bangerth <bangerth@ticam.utexas.edu>
|
||||
|
||||
// The compiler used to keep unreachable basic blocks after dead edges
|
||||
// had been purged, which fooled the LCM code of the GCSE pass.
|
||||
|
||||
// { dg-do compile }
|
||||
// { dg-options "-O2 -fnon-call-exceptions" }
|
||||
|
||||
extern void *memmove (void *, const void *, unsigned int) throw ();
|
||||
|
||||
struct S {
|
||||
int *q;
|
||||
|
||||
S(int *i) : q(i) {}
|
||||
};
|
||||
|
||||
struct X {
|
||||
int *p;
|
||||
|
||||
void foo(S first, S last) {
|
||||
try { memmove(0, 0, last.q - first.q); }
|
||||
catch(...) { throw; }
|
||||
}
|
||||
|
||||
void bar (const X& x);
|
||||
};
|
||||
|
||||
void X::bar (const X& x)
|
||||
{
|
||||
const unsigned int xlen = S(x.p).q - S(x.p).q;
|
||||
|
||||
if (xlen > 0)
|
||||
foo(S(x.p), S(x.p));
|
||||
}
|
10
gcc/toplev.c
10
gcc/toplev.c
|
@ -134,7 +134,7 @@ static void rest_of_handle_loop2 (tree, rtx);
|
|||
static void rest_of_handle_jump_bypass (tree, rtx);
|
||||
static void rest_of_handle_sibling_calls (rtx);
|
||||
static void rest_of_handle_null_pointer (tree, rtx);
|
||||
static void rest_of_handle_addresof (tree, rtx);
|
||||
static void rest_of_handle_addressof (tree, rtx);
|
||||
static void rest_of_handle_cfg (tree, rtx);
|
||||
static void rest_of_handle_branch_prob (tree, rtx);
|
||||
static void rest_of_handle_if_conversion (tree, rtx);
|
||||
|
@ -2405,13 +2405,13 @@ rest_of_handle_cfg (tree decl, rtx insns)
|
|||
|
||||
/* Purge addressofs. */
|
||||
static void
|
||||
rest_of_handle_addresof (tree decl, rtx insns)
|
||||
rest_of_handle_addressof (tree decl, rtx insns)
|
||||
{
|
||||
open_dump_file (DFI_addressof, decl);
|
||||
|
||||
purge_addressof (insns);
|
||||
if (optimize)
|
||||
purge_all_dead_edges (0);
|
||||
if (optimize && purge_all_dead_edges (0))
|
||||
delete_unreachable_blocks ();
|
||||
reg_scan (insns, max_reg_num (), 1);
|
||||
|
||||
close_dump_file (DFI_addressof, print_rtl, insns);
|
||||
|
@ -3219,7 +3219,7 @@ rest_of_compilation (tree decl)
|
|||
if (optimize > 0)
|
||||
rest_of_handle_cse (decl, insns);
|
||||
|
||||
rest_of_handle_addresof (decl, insns);
|
||||
rest_of_handle_addressof (decl, insns);
|
||||
|
||||
ggc_collect ();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue