re PR c++/59813 (tail-call elimination didn't fire for left-shift of char to cout)
authorJakub Jelinek <jakub@redhat.com>
Wed, 8 May 2019 17:06:46 +0000 (19:06 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 8 May 2019 17:06:46 +0000 (19:06 +0200)
commitab87ac8d53f3d903bfc9eeb0f0b5e7eed1f38cbc
tree82cfaff6222e92d237be7a60aa9a5c1f2f835b38
parent69708e0afbf3a3757b9f689bb54acff1d7e8d9ec
re PR c++/59813 (tail-call elimination didn't fire for left-shift of char to cout)

PR c++/59813
PR tree-optimization/89060
* tree-ssa-live.h (live_vars_map): New typedef.
(compute_live_vars, live_vars_at_stmt, destroy_live_vars): Declare.
* tree-ssa-live.c: Include gimple-walk.h and cfganal.h.
(struct compute_live_vars_data): New type.
(compute_live_vars_visit, compute_live_vars_1, compute_live_vars,
live_vars_at_stmt, destroy_live_vars): New functions.
* tree-tailcall.c: Include tree-ssa-live.h.
(live_vars, live_vars_vec): New global variables.
(find_tail_calls): Perform variable life analysis before punting.
(tree_optimize_tail_calls_1): Clean up live_vars and live_vars_vec.
* tree-inline.h (struct copy_body_data): Add eh_landing_pad_dest
member.
* tree-inline.c (add_clobbers_to_eh_landing_pad): Remove BB argument.
Perform variable life analysis to select variables that really need
clobbers added.
(copy_edges_for_bb): Don't call add_clobbers_to_eh_landing_pad here,
instead set id->eh_landing_pad_dest and assert it is the same.
(copy_cfg_body): Call it here if id->eh_landing_pad_dest is non-NULL.

* gcc.dg/tree-ssa/pr89060.c: New test.

From-SVN: r271013
gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/pr89060.c [new file with mode: 0644]
gcc/tree-inline.c
gcc/tree-inline.h
gcc/tree-ssa-live.c
gcc/tree-ssa-live.h
gcc/tree-tailcall.c