Summary: | Improve tail call optimization | ||
---|---|---|---|
Product: | gcc | Reporter: | Jakub Jelinek <jakub> |
Component: | tree-optimization | Assignee: | Not yet assigned to anyone <unassigned> |
Status: | RESOLVED DUPLICATE | ||
Severity: | normal | CC: | amonakov, bugdal |
Priority: | P3 | Keywords: | missed-optimization |
Version: | 9.0 | ||
Target Milestone: | --- | ||
URL: | http://gcc.gnu.org/ml/gcc-patches/2019-02/msg00424.html | ||
Host: | Target: | ||
Build: | Known to work: | ||
Known to fail: | Last reconfirmed: |
Description
Jakub Jelinek
2019-01-25 11:33:28 UTC
This was previously reported as PR 87639, but this report has more analysis. Please close one or the other as a dup. I suspect there is even older bug which reports this. (In reply to Andrew Pinski from comment #2) > I suspect there is even older bug which reports this. PR 77938 *** Bug 87639 has been marked as a duplicate of this bug. *** . *** This bug has been marked as a duplicate of bug 59813 *** Author: jakub Date: Wed May 8 17:06:46 2019 New Revision: 271013 URL: https://gcc.gnu.org/viewcvs?rev=271013&root=gcc&view=rev Log: 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. Added: trunk/gcc/testsuite/gcc.dg/tree-ssa/pr89060.c Modified: trunk/gcc/ChangeLog trunk/gcc/testsuite/ChangeLog trunk/gcc/tree-inline.c trunk/gcc/tree-inline.h trunk/gcc/tree-ssa-live.c trunk/gcc/tree-ssa-live.h trunk/gcc/tree-tailcall.c With the above commit, should this problem be fixed? |