]> git.ipfire.org Git - thirdparty/gcc.git/commit - gcc/ipa-param-manipulation.h
ipa-sra: Introduce a mini-DCE to tree-inline.c (PR 93385)
authorMartin Jambor <mjambor@suse.cz>
Mon, 28 Jun 2021 16:20:00 +0000 (18:20 +0200)
committerMartin Jambor <mjambor@suse.cz>
Mon, 28 Jun 2021 16:24:54 +0000 (18:24 +0200)
commit2902991a6b61d473f7cb996a2b80eef4a90f8eda
tree5bd9b5d3e2e57229b505509d6e054efd0f1a780a
parent87467f45e831e8e943efdae8920453741986d355
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.
gcc/ipa-param-manipulation.c
gcc/ipa-param-manipulation.h
gcc/testsuite/g++.dg/ipa/ipa-sra-4.C [new file with mode: 0644]
gcc/testsuite/gcc.dg/ipa/ipa-sra-23.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/ipa/ipa-sra-24.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/ipa/pr93385.c [new file with mode: 0644]
gcc/tree-inline.c