diff options
author | Jan Hubicka <jh@suse.cz> | 2007-01-11 17:44:56 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2007-01-11 16:44:56 +0000 |
commit | 18d5e416f8b6ca75796803e6957aaa513fcf51dc (patch) | |
tree | 40aa32737d2e736bae72a8df68748c9a126108d1 /gcc | |
parent | 78392049f6da9177ce36eb354b8e65f24e602112 (diff) | |
download | gcc-18d5e416f8b6ca75796803e6957aaa513fcf51dc.zip gcc-18d5e416f8b6ca75796803e6957aaa513fcf51dc.tar.gz gcc-18d5e416f8b6ca75796803e6957aaa513fcf51dc.tar.bz2 |
re PR tree-optimization/1046 (gcc less efficient than jdk for recursion with -finline-functions)
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.
From-SVN: r120680
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 15 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/always_inline3.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/pr15349.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/pr20701.c | 23 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/pr21658.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/pr25501.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-1.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-2.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-3.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-4.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/vrp05.c | 18 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/vrp11.c | 14 |
12 files changed, 70 insertions, 28 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9f52d10..c63f074 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,18 @@ +2007-01-11 Jan Hubicka <jh@suse.cz> + + * 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 <mark@codesourcery.com> PR c++/28999 diff --git a/gcc/testsuite/gcc.dg/always_inline3.c b/gcc/testsuite/gcc.dg/always_inline3.c index b183770..e1a337c 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 5c440e6..080aa81 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 708bee1..6721155 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 2fa45b4..16893b0 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 aa70994..7fb2bcc 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 8802bc8..64de788 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 9fe3af9..9ef4fdb 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 ca727df..37b19af 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 bb43d76..34689e6 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 201f8ee..7b8b61b 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 d219856..69e3e74 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" } } */ |