changeset 95:70c969e0d1dd

modify condition of tail call in expand_call method
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Tue, 17 Jan 2012 06:00:44 +0900
parents 8bd24be3a2df
children 506ac5e3963a
files gcc/calls.c gcc/calls.c~
diffstat 2 files changed, 12 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/gcc/calls.c	Tue Jan 17 05:01:16 2012 +0900
+++ b/gcc/calls.c	Tue Jan 17 06:00:44 2012 +0900
@@ -2335,7 +2335,12 @@
 #endif
       /* Check whether the target is able to optimize the call
 	 into a sibcall.  */
+#ifndef noCbC
+      || (!targetm.function_ok_for_sibcall (fndecl, exp)
+	  && (!fndecl || !CbC_IS_CODE_SEGMENT (TREE_TYPE (fndecl))))
+#else
       || !targetm.function_ok_for_sibcall (fndecl, exp)
+#endif
       /* Functions that do not return exactly once may not be sibcall
 	 optimized.  */
       || (flags & (ECF_RETURNS_TWICE | ECF_NORETURN))
@@ -2348,8 +2353,14 @@
 	 function, we cannot change it into a sibling call.
 	 crtl->args.pretend_args_size is not part of the
 	 stack allocated by our caller.  */
+#ifndef noCbC
+      || (args_size.constant > (crtl->args.size
+				- crtl->args.pretend_args_size)
+          && (!fndecl || !CbC_IS_CODE_SEGMENT (TREE_TYPE (fndecl))))
+#else
       || args_size.constant > (crtl->args.size
-			       - crtl->args.pretend_args_size)
+                               - crtl->args.pretend_args_size)
+#endif
       /* If the callee pops its own arguments, then it must pop exactly
 	 the same number of arguments as the current function.  */
       || (targetm.calls.return_pops_args (fndecl, funtype, args_size.constant)
--- a/gcc/calls.c~	Tue Jan 17 05:01:16 2012 +0900
+++ b/gcc/calls.c~	Tue Jan 17 06:00:44 2012 +0900
@@ -2335,12 +2335,7 @@
 #endif
       /* Check whether the target is able to optimize the call
 	 into a sibcall.  */
-#ifndef noCbC
-      || (!targetm.function_ok_for_sibcall (fndecl, exp)
-	 && (!fndecl || !CbC_IS_CODE_SEGMENT (TREE_TYPE (fndecl))))
-#else
       || !targetm.function_ok_for_sibcall (fndecl, exp)
-#endif 
       /* Functions that do not return exactly once may not be sibcall
 	 optimized.  */
       || (flags & (ECF_RETURNS_TWICE | ECF_NORETURN))
@@ -2353,14 +2348,8 @@
 	 function, we cannot change it into a sibling call.
 	 crtl->args.pretend_args_size is not part of the
 	 stack allocated by our caller.  */
-#ifndef noCbC
-      || (args_size.constant > (crtl->args.size
-			       - crtl->args.pretend_args_size)
-	  && (!fndecl || !CbC_IS_CODE_SEGMENT (TREE_TYPE (fndecl))))
-#else
       || args_size.constant > (crtl->args.size
 			       - crtl->args.pretend_args_size)
-#endif 
       /* If the callee pops its own arguments, then it must pop exactly
 	 the same number of arguments as the current function.  */
       || (targetm.calls.return_pops_args (fndecl, funtype, args_size.constant)