public inbox for gcc-cvs@sourceware.org help / color / mirror / Atom feed
From: Martin Jambor <jamborm@gcc.gnu.org> To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-6003] ipa: Avoid IPA confusing scalar values and single-field aggregates (PR 108679) Date: Wed, 15 Feb 2023 10:38:46 +0000 (GMT) [thread overview] Message-ID: <20230215103846.285D83858CDB@sourceware.org> (raw) https://gcc.gnu.org/g:8b1b1b2d691d5cee4ebc40a01974ad5bccab22f9 commit r13-6003-g8b1b1b2d691d5cee4ebc40a01974ad5bccab22f9 Author: Martin Jambor <mjambor@suse.cz> Date: Wed Feb 15 11:38:01 2023 +0100 ipa: Avoid IPA confusing scalar values and single-field aggregates (PR 108679) PR 108679 testcase shows a situation when IPA-CP is able to track a scalar constant in a single-field structure that is part of a bigger structure. This smaller structure is however also passed in a few calls to other functions, but the two same-but-different entities, originally placed at the same offset and with the same size, confuse the mechanism that takes care of handling call statements after IPA-SRA. I think that in stage 4 it is best to revert to GCC 12 behavior in this particular case (when IPA-CP detects a constant in a single-field structure or a single element array that is part of a bigger aggregate) and the patch below does that. If accepted, I plan to file a missed-optimization bug to track that we could use the IPA-CP propagated value to re-construct the small aggregate arguments. gcc/ChangeLog: 2023-02-13 Martin Jambor <mjambor@suse.cz> PR ipa/108679 * ipa-sra.cc (push_param_adjustments_for_index): Do not omit creation of non-scalar replacements even if IPA-CP knows their contents. gcc/testsuite/ChangeLog: 2023-02-13 Martin Jambor <mjambor@suse.cz> PR ipa/108679 * gcc.dg/ipa/pr108679.c: New test. Diff: --- gcc/ipa-sra.cc | 2 +- gcc/testsuite/gcc.dg/ipa/pr108679.c | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/gcc/ipa-sra.cc b/gcc/ipa-sra.cc index 0495f446bf4..3de7d426b7e 100644 --- a/gcc/ipa-sra.cc +++ b/gcc/ipa-sra.cc @@ -3989,7 +3989,7 @@ push_param_adjustments_for_index (isra_func_summary *ifs, unsigned base_index, { ipa_argagg_value_list avl (ipcp_ts); tree value = avl.get_value (base_index, pa->unit_offset); - if (value) + if (value && !AGGREGATE_TYPE_P (pa->type)) { if (dump_file) fprintf (dump_file, " - omitting component at byte " diff --git a/gcc/testsuite/gcc.dg/ipa/pr108679.c b/gcc/testsuite/gcc.dg/ipa/pr108679.c new file mode 100644 index 00000000000..b1ed50bb831 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/pr108679.c @@ -0,0 +1,25 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +struct S1 { + signed f0; +}; +struct S2 { + struct S1 f2; + short f8; +} g_18; +void safe_lshift_func_int16_t_s_u(); +void safe_unary_minus_func_uint64_t_u(); +int safe_mul_func_uint8_t_u_u(int, struct S1 p_14); +int g_732, func_6_l_17; +static int *func_12(); +static int func_6(struct S2 p_7) { func_12(func_6_l_17, p_7.f2, g_18, 0); } +static int *func_12(int, struct S1 p_14) { + safe_lshift_func_int16_t_s_u(); + safe_unary_minus_func_uint64_t_u(); + g_732 = safe_mul_func_uint8_t_u_u(0, p_14); +} +int main() { + struct S2 l_10 = {3}; + func_6(l_10); +}
reply other threads:[~2023-02-15 10:38 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20230215103846.285D83858CDB@sourceware.org \ --to=jamborm@gcc.gnu.org \ --cc=gcc-cvs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).