From 9398d12b1ec956d2bc15d2e49d9e4c997fc974d1 Mon Sep 17 00:00:00 2001
From: hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Thu, 11 Jan 2007 16:44:56 +0000
Subject: [PATCH] 	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
---
 gcc/testsuite/ChangeLog                       | 15 ++++++++++++
 gcc/testsuite/gcc.dg/always_inline3.c         |  2 ++
 gcc/testsuite/gcc.dg/tree-ssa/pr15349.c       |  4 ++--
 gcc/testsuite/gcc.dg/tree-ssa/pr20701.c       | 23 +++++++++++++------
 gcc/testsuite/gcc.dg/tree-ssa/pr21658.c       |  4 ++--
 gcc/testsuite/gcc.dg/tree-ssa/pr25501.c       |  2 +-
 .../gcc.dg/tree-ssa/tailrecursion-1.c         |  4 ++--
 .../gcc.dg/tree-ssa/tailrecursion-2.c         |  4 ++--
 .../gcc.dg/tree-ssa/tailrecursion-3.c         |  4 ++--
 .../gcc.dg/tree-ssa/tailrecursion-4.c         |  4 ++--
 gcc/testsuite/gcc.dg/tree-ssa/vrp05.c         | 18 +++++++++++----
 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 9f52d1015e21..c63f07418b73 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 b183770adc00..e1a337c2864b 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 5c440e607751..080aa81b504e 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 708bee19d32f..6721155fc9a2 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 2fa45b40a71b..16893b071f34 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 aa70994756c5..7fb2bcc8ac6d 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 8802bc8bc69f..64de788ec6df 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 9fe3af9855ad..9ef4fdb6d2e3 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 ca727df391d4..37b19af0e540 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 bb43d76aca90..34689e641682 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 201f8ee5a00f..7b8b61b44431 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 d21985626fa3..69e3e74d8097 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" } } */
-- 
GitLab