From: hubicka Date: Thu, 11 Jan 2007 16:44:56 +0000 (+0000) Subject: PR tree-optimization/1046 X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=9398d12b1ec956d2bc15d2e49d9e4c997fc974d1;hp=f41e06edf2dfdd93a5c6053f807828b58a2e6be6 PR tree-optimization/1046 * tree-tailcall.c (suitable_for_tail_call_opt_p): Use TREE_ADDRESSABLE when alias info is not ready. (pass_tail_recursion): Do not require aliasing. * tree-ssa-copyrename.c (pass_rename_ssa_cop): Likewise. * tree-ssa-ccp.c (pass_ccp, pass_fold_builtins): Likewise. * tree-ssa-copy.c (pass_copy_prop): Likewise. * tree-ssa-forwprop.c (pass_forwprop): Likewise. * tree-ssa-dce.c (pass_dce, pass_dce_loop, pass_cd_dce): Likewise. * passes.c (init_optimization_passes): Execute rename_ssa_copies, ccp, forwprop, copy_prop, merge_phi, copy_prop, dce and tail recursion before inlining. * tree-ssa-operands.c (add_virtual_operand, get_indirect_ref_operand): When aliasing is not build, mark statement as volatile. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@120680 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9f52d1015e2..c63f07418b7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,18 @@ +2007-01-11 Jan Hubicka + + * gcc.dg/tree-ssa/tailrecursion-4.c: Update dump file. + * gcc.dg/tree-ssa/tailrecursion-1.c: Update dump file. + * gcc.dg/tree-ssa/tailrecursion-2.c: Update dump file. + * gcc.dg/tree-ssa/tailrecursion-3.c: Update dump file. + * gcc.dg/tree-ssa/pr21658.c: Likewise. + * gcc.dg/tree-ssa/pr15349.c: Likewise. + * gcc.dg/tree-ssa/pr25501.c: Likewise. + * gcc.dg/tree-ssa/vrp11.c: Make more complex so it still test + transformation in question. + * gcc.dg/tree-ssa/vrp05.c: Likewise. + * gcc.dg/tree-ssa/pr20701.c: Likewise. + * gcc.dg/always_inline3.c: Likewise. + 2007-01-10 Mark Mitchell PR c++/28999 diff --git a/gcc/testsuite/gcc.dg/always_inline3.c b/gcc/testsuite/gcc.dg/always_inline3.c index b183770adc0..e1a337c2864 100644 --- a/gcc/testsuite/gcc.dg/always_inline3.c +++ b/gcc/testsuite/gcc.dg/always_inline3.c @@ -1,8 +1,10 @@ /* { dg-do compile } */ /* { dg-options "-Winline -O2" } */ +void do_something_evil (void); inline __attribute__ ((always_inline)) void q2(void) { /* { dg-error "recursive" "" } */ + do_something_evil (); q2(); /* { dg-error "called from here" "" } */ q2(); /* { dg-error "called from here" "" } */ } diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr15349.c b/gcc/testsuite/gcc.dg/tree-ssa/pr15349.c index 5c440e60775..080aa81b504 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr15349.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr15349.c @@ -22,5 +22,5 @@ foo (int a, int b) return t; } -/* { dg-final { scan-tree-dump-times "PHI" 1 "mergephi"} } */ -/* { dg-final { cleanup-tree-dump "mergephi" } } */ +/* { dg-final { scan-tree-dump-times "PHI" 1 "mergephi2"} } */ +/* { dg-final { cleanup-tree-dump "mergephi2" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr20701.c b/gcc/testsuite/gcc.dg/tree-ssa/pr20701.c index 708bee19d32..6721155fc9a 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr20701.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr20701.c @@ -1,30 +1,39 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-vrp1" } */ +/* { dg-options "-O2 -fdump-tree-vrp2 -fno-early-inlining" } */ typedef struct { int code; } *rtx; +static inline void *zero () +{ + return 0; +} +static inline int three () +{ + return 3; +} + int can_combine_p (rtx insn, rtx elt) { rtx set; - set = 0; - if (insn->code == 3) + set = zero (); + if (insn->code == three ()) set = insn; else { set = elt; - if (set == 0) + if (set == zero ()) return 0; } - if (set == 0) + if (set == zero ()) return 1; return 0; } -/* { dg-final { scan-tree-dump-times "Folding predicate.*to 0" 1 "vrp1" } } */ -/* { dg-final { cleanup-tree-dump "vrp1" } } */ +/* { dg-final { scan-tree-dump-times "Folding predicate.*to 0" 1 "vrp2" } } */ +/* { dg-final { cleanup-tree-dump "vrp2" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr21658.c b/gcc/testsuite/gcc.dg/tree-ssa/pr21658.c index 2fa45b40a71..16893b071f3 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr21658.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr21658.c @@ -17,5 +17,5 @@ f (void) link_error (); } -/* { dg-final { scan-tree-dump-times "Folded statement: if " 1 "ccp"} } */ -/* { dg-final { cleanup-tree-dump "ccp" } } */ +/* { dg-final { scan-tree-dump-times "Folded statement: if " 1 "ccp1"} } */ +/* { dg-final { cleanup-tree-dump "ccp1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr25501.c b/gcc/testsuite/gcc.dg/tree-ssa/pr25501.c index aa70994756c..7fb2bcc8ac6 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr25501.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr25501.c @@ -32,5 +32,5 @@ foo (int a) return 13; } -/* { dg-final { scan-tree-dump-times "Removing basic block" 0 "mergephi"} } */ +/* { dg-final { scan-tree-dump-times "Removing basic block" 0 "mergephi1"} } */ /* { dg-final { cleanup-tree-dump "mergephi" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-1.c b/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-1.c index 8802bc8bc69..64de788ec6d 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-1.c @@ -8,5 +8,5 @@ t(int a) else return 0; } -/* { dg-final { scan-tree-dump-times "Eliminated tail recursion" 1 "tailr"} } */ -/* { dg-final { cleanup-tree-dump "tailr" } } */ +/* { dg-final { scan-tree-dump-times "Eliminated tail recursion" 1 "tailr1"} } */ +/* { dg-final { cleanup-tree-dump "tailr1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-2.c b/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-2.c index 9fe3af9855a..9ef4fdb6d2e 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-2.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-2.c @@ -9,5 +9,5 @@ t(char *a) else return 0; } -/* { dg-final { scan-tree-dump-times "Eliminated tail recursion" 1 "tailr"} } */ -/* { dg-final { cleanup-tree-dump "tailr" } } */ +/* { dg-final { scan-tree-dump-times "Eliminated tail recursion" 1 "tailr1"} } */ +/* { dg-final { cleanup-tree-dump "tailr1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-3.c b/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-3.c index ca727df391d..37b19af0e54 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-3.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-3.c @@ -12,5 +12,5 @@ t(int a) r=r; return r; } -/* { dg-final { scan-tree-dump-times "Eliminated tail recursion" 1 "tailr"} } */ -/* { dg-final { cleanup-tree-dump "tailr" } } */ +/* { dg-final { scan-tree-dump-times "Eliminated tail recursion" 1 "tailr1"} } */ +/* { dg-final { cleanup-tree-dump "tailr1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-4.c b/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-4.c index bb43d76aca9..34689e64168 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-4.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-4.c @@ -14,5 +14,5 @@ t(int a) r=r; return r; } -/* { dg-final { scan-tree-dump-times "Eliminated tail recursion" 2 "tailr"} } */ -/* { dg-final { cleanup-tree-dump "tailr" } } */ +/* { dg-final { scan-tree-dump-times "Eliminated tail recursion" 2 "tailr1"} } */ +/* { dg-final { cleanup-tree-dump "tailr1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp05.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp05.c index 201f8ee5a00..7b8b61b4443 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/vrp05.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp05.c @@ -1,19 +1,29 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-vrp1" } */ +/* { dg-options "-O2 -fdump-tree-vrp1 -fno-early-inlining" } */ + + +inline int ten() +{ + return 10; +} +inline int zero() +{ + return 0; +} foo (int k, int j) { - if (k >= 10) + if (k >= ten()) { if (j > k) { /* We should fold this to if (1). */ - if (j > 0) + if (j > zero()) return j; } } - return j; + return j+1; } /* { dg-final { scan-tree-dump-times "Folding predicate j_.*to 1" 1 "vrp1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp11.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp11.c index d21985626fa..69e3e74d809 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/vrp11.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp11.c @@ -1,5 +1,11 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-vrp1" } */ +/* { dg-options "-O2 -fdump-tree-vrp1 -fno-early-inlining" } */ + +int +bounce (int arg) +{ + return arg; +} foo (int k, int j, int z) { @@ -8,13 +14,13 @@ foo (int k, int j, int z) if (j > k) { /* We should fold this to if (1). */ - if (j > z) + if (j > bounce (z)) return j; } } - return j; + return j+1; } -/* { dg-final { scan-tree-dump-times "Folding predicate.*to 1" 1 "vrp1" } } */ +/* { dg-final { scan-tree-dump-times "Folding predicate.*to 1" 1 "vrp2" } } */ /* { dg-final { cleanup-tree-dump "vrp1" } } */