|
Lines 375-380
find_tail_calls (basic_block bb, struct tailcall **ret)
Link Here
|
| 375 |
tree m, a; |
375 |
tree m, a; |
| 376 |
basic_block abb; |
376 |
basic_block abb; |
| 377 |
size_t idx; |
377 |
size_t idx; |
|
|
378 |
tree var; |
| 379 |
referenced_var_iterator rvi; |
| 378 |
|
380 |
|
| 379 |
if (!single_succ_p (bb)) |
381 |
if (!single_succ_p (bb)) |
| 380 |
return; |
382 |
return; |
|
Lines 462-467
find_tail_calls (basic_block bb, struct tailcall **ret)
Link Here
|
| 462 |
tail_recursion = true; |
464 |
tail_recursion = true; |
| 463 |
} |
465 |
} |
| 464 |
|
466 |
|
|
|
467 |
/* Make sure the tail invocation of this function does not refer |
| 468 |
to local variables. */ |
| 469 |
FOR_EACH_REFERENCED_VAR (var, rvi) |
| 470 |
{ |
| 471 |
if (TREE_CODE (var) != PARM_DECL |
| 472 |
&& auto_var_in_fn_p (var, cfun->decl) |
| 473 |
&& ref_maybe_used_by_stmt_p (call, var)) |
| 474 |
return; |
| 475 |
} |
| 476 |
|
| 465 |
/* Now check the statements after the call. None of them has virtual |
477 |
/* Now check the statements after the call. None of them has virtual |
| 466 |
operands, so they may only depend on the call through its return |
478 |
operands, so they may only depend on the call through its return |
| 467 |
value. The return value should also be dependent on each of them, |
479 |
value. The return value should also be dependent on each of them, |