diff options
author | Martin Jambor <mjambor@suse.cz> | 2023-08-07 19:13:41 +0200 |
---|---|---|
committer | Martin Jambor <mjambor@suse.cz> | 2023-08-07 19:13:57 +0200 |
commit | da1a888b524d620c7a17f368b69c46934b69495c (patch) | |
tree | c404240998c4f970617678d617fa25580b10ab06 /gcc/rust/resolve | |
parent | 8ae83274d8cc60547e8c92a41a4f4716b045f57a (diff) | |
download | gcc-da1a888b524d620c7a17f368b69c46934b69495c.zip gcc-da1a888b524d620c7a17f368b69c46934b69495c.tar.gz gcc-da1a888b524d620c7a17f368b69c46934b69495c.tar.bz2 |
ipa-sra: Don't consider CLOBBERS as writes preventing splitting
When IPA-SRA detects whether a parameter passed by reference is
written to, it does not special case CLOBBERs which means it often
bails out unnecessarily, especially when dealing with C++ destructors.
Fixed by the obvious continue in the two relevant loops and by adding
a simple function that marks the clobbers in the transformation code
as statements to be removed.
gcc/ChangeLog:
2023-08-04 Martin Jambor <mjambor@suse.cz>
PR ipa/110378
* ipa-param-manipulation.h (class ipa_param_body_adjustments): New
members get_ddef_if_exists_and_is_used and mark_clobbers_dead.
* ipa-sra.cc (isra_track_scalar_value_uses): Ignore clobbers.
(ptr_parm_has_nonarg_uses): Likewise.
* ipa-param-manipulation.cc
(ipa_param_body_adjustments::get_ddef_if_exists_and_is_used): New.
(ipa_param_body_adjustments::mark_dead_statements): Move initial
checks to get_ddef_if_exists_and_is_used.
(ipa_param_body_adjustments::mark_clobbers_dead): New.
(ipa_param_body_adjustments::common_initialization): Call
mark_clobbers_dead when splitting.
gcc/testsuite/ChangeLog:
2023-07-31 Martin Jambor <mjambor@suse.cz>
PR ipa/110378
* g++.dg/ipa/pr110378-1.C: New test.
Diffstat (limited to 'gcc/rust/resolve')
0 files changed, 0 insertions, 0 deletions