This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

fix 15108


We handle casts inside the process_assignment call there.


r~


        PR opt/15108
        * tree-tailcall.c (find_tail_calls): Don't check early for
        tail_recursion failure.

Index: tree-tailcall.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-tailcall.c,v
retrieving revision 2.6
diff -c -p -d -r2.6 tree-tailcall.c
*** tree-tailcall.c	9 Jun 2004 15:07:03 -0000	2.6
--- tree-tailcall.c	9 Jun 2004 23:44:05 -0000
*************** find_tail_calls (basic_block bb, struct 
*** 460,470 ****
        if (TREE_CODE (stmt) != MODIFY_EXPR)
  	return;
  
-       /* Unless this is a tail recursive call, we cannot do anything with
- 	 the statement anyway.  */
-       if (!tail_recursion)
- 	return;
- 
        if (!process_assignment (stmt, stmt, bsi, &m, &a, &ass_var))
  	return;
      }
--- 460,465 ----
*************** find_tail_calls (basic_block bb, struct 
*** 491,496 ****
--- 486,496 ----
        && (ret_var != ass_var))
      return;
  
+   /* If this is not a tail recursive call, we cannot handle addends or
+      multiplicands.  */
+   if (!tail_recursion && (m || a))
+     return;
+ 
    nw = xmalloc (sizeof (struct tailcall));
  
    nw->call_block = bb;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]