-
- Downloads
ipa-sra: Introduce a mini-DCE to tree-inline.c (PR 93385)
I was asked by Richi to split my fix for PR 93385 for easier review into IPA-SRA materialization refactoring and the actual DCE addition. This is the second part that actually contains the DCE of statements that IPA-SRA should not leave behind because they can have problematic side effects, even if they are useless, so that we do not depend on tree-dce to remove them for correctness. The patch fixes the problem by doing a def-use walk when materializing clones, marking which statements should not be copied and which SSA_NAMEs do not need to be computed because eventually they would be DCEd. We do this on the original function body and tree-inline simply does not copy statements which are "dead." The only complication is removing dead argument calls because that needs to be communicated to callee redirection code using the infrastructure introduced by the previous patch. I added all testcases of the original patch to this one, although some probably test behavior introduced in the previous patch. gcc/ChangeLog: 2021-05-12 Martin Jambor <mjambor@suse.cz> PR ipa/93385 * ipa-param-manipulation.h (class ipa_param_body_adjustments): New members m_dead_stmts and m_dead_ssas. * ipa-param-manipulation.c (ipa_param_body_adjustments::mark_dead_statements): New function. (ipa_param_body_adjustments::common_initialization): Call it on all removed but not split parameters. (ipa_param_body_adjustments::ipa_param_body_adjustments): Initialize new mwmbers. (ipa_param_body_adjustments::modify_call_stmt): Remove arguments that are dead. * tree-inline.c (remap_gimple_stmt): Do not copy dead statements, reset dead debug statements. (copy_phis_for_bb): Do not copy dead PHI nodes. gcc/testsuite/ChangeLog: 2021-03-22 Martin Jambor <mjambor@suse.cz> PR ipa/93385 * gcc.dg/ipa/pr93385.c: New test. * gcc.dg/ipa/ipa-sra-23.c: Likewise. * gcc.dg/ipa/ipa-sra-24.c: Likewise. * g++.dg/ipa/ipa-sra-4.C: Likewise.
Showing
- gcc/ipa-param-manipulation.c 114 additions, 15 deletionsgcc/ipa-param-manipulation.c
- gcc/ipa-param-manipulation.h 6 additions, 0 deletionsgcc/ipa-param-manipulation.h
- gcc/testsuite/g++.dg/ipa/ipa-sra-4.C 37 additions, 0 deletionsgcc/testsuite/g++.dg/ipa/ipa-sra-4.C
- gcc/testsuite/gcc.dg/ipa/ipa-sra-23.c 24 additions, 0 deletionsgcc/testsuite/gcc.dg/ipa/ipa-sra-23.c
- gcc/testsuite/gcc.dg/ipa/ipa-sra-24.c 20 additions, 0 deletionsgcc/testsuite/gcc.dg/ipa/ipa-sra-24.c
- gcc/testsuite/gcc.dg/ipa/pr93385.c 27 additions, 0 deletionsgcc/testsuite/gcc.dg/ipa/pr93385.c
- gcc/tree-inline.c 15 additions, 3 deletionsgcc/tree-inline.c
Loading
Please register or sign in to comment