From: Richard Sandiford <richard.sandiford@arm.com>
To: Surya Kumari Jangala via Gcc-patches <gcc-patches@gcc.gnu.org>
Cc: bergner@linux.ibm.com,
Segher Boessenkool <segher@kernel.crashing.org>,
pthaugen@us.ibm.com,
Surya Kumari Jangala <jskumari@linux.vnet.ibm.com>
Subject: Re: [PATCH] sched1: Fix -fcompare-debug issue in schedule_region [PR105586]
Date: Tue, 30 Aug 2022 13:27:12 +0100 [thread overview]
Message-ID: <mptr10xex27.fsf@arm.com> (raw)
In-Reply-To: <eb7f49a5-7e58-4a02-e4d1-f2d0cc0061e1@linux.vnet.ibm.com> (Surya Kumari Jangala via Gcc-patches's message of "Tue, 23 Aug 2022 17:19:39 +0530")
Surya Kumari Jangala via Gcc-patches <gcc-patches@gcc.gnu.org> writes:
> sched1: Fix -fcompare-debug issue in schedule_region [PR105586]
>
> In schedule_region(), a basic block that does not contain any real insns
> is not scheduled and the dfa state at the entry of the bb is not copied
> to the fallthru basic block. However a DEBUG insn is treated as a real
> insn, and if a bb contains non-real insns and a DEBUG insn, it's dfa
> state is copied to the fallthru bb. This was resulting in
> -fcompare-debug failure as the incoming dfa state of the fallthru block
> is different with -g. We should always copy the dfa state of a bb to
> it's fallthru bb even if the bb does not contain real insns.
>
> 2022-08-22 Surya Kumari Jangala <jskumari@linux.ibm.com>
>
> gcc/
> PR rtl-optimization/105586
> * sched-rgn.cc (schedule_region): Always copy dfa state to
> fallthru block.
>
> gcc/testsuite/
> PR rtl-optimization/105586
> * gcc.target/powerpc/pr105586.c: New test.
>
>
> diff --git a/gcc/sched-rgn.cc b/gcc/sched-rgn.cc
> index 0dc2a8f2851..6c9202c0b2b 100644
> --- a/gcc/sched-rgn.cc
> +++ b/gcc/sched-rgn.cc
> @@ -3082,6 +3082,24 @@ free_bb_state_array (void)
> bb_state = NULL;
> }
>
> +static void
> +save_state_for_fallthru_edge (basic_block last_bb, state_t state)
The convention (not always followed) is to have a comment above each
function explaining what it does. How about something like:
/* If LAST_BB falls through to another block B, record that B should
start with DFA start STATE. */
OK for trunk with that change (and with the new changelog).
Thanks,
Richard
> +{
> + edge f = find_fallthru_edge (last_bb->succs);
> + if (f
> + && (!f->probability.initialized_p ()
> + || (f->probability.to_reg_br_prob_base () * 100
> + / REG_BR_PROB_BASE
> + >= param_sched_state_edge_prob_cutoff)))
> + {
> + memcpy (bb_state[f->dest->index], state,
> + dfa_state_size);
> + if (sched_verbose >= 5)
> + fprintf (sched_dump, "saving state for edge %d->%d\n",
> + f->src->index, f->dest->index);
> + }
> +}
> +
> /* Schedule a region. A region is either an inner loop, a loop-free
> subroutine, or a single basic block. Each bb in the region is
> scheduled after its flow predecessors. */
> @@ -3155,6 +3173,7 @@ schedule_region (int rgn)
> if (no_real_insns_p (head, tail))
> {
> gcc_assert (first_bb == last_bb);
> + save_state_for_fallthru_edge (last_bb, bb_state[first_bb->index]);
> continue;
> }
>
> @@ -3173,26 +3192,13 @@ schedule_region (int rgn)
> curr_bb = first_bb;
> if (dbg_cnt (sched_block))
> {
> - edge f;
> int saved_last_basic_block = last_basic_block_for_fn (cfun);
>
> schedule_block (&curr_bb, bb_state[first_bb->index]);
> gcc_assert (EBB_FIRST_BB (bb) == first_bb);
> sched_rgn_n_insns += sched_n_insns;
> realloc_bb_state_array (saved_last_basic_block);
> - f = find_fallthru_edge (last_bb->succs);
> - if (f
> - && (!f->probability.initialized_p ()
> - || (f->probability.to_reg_br_prob_base () * 100
> - / REG_BR_PROB_BASE
> - >= param_sched_state_edge_prob_cutoff)))
> - {
> - memcpy (bb_state[f->dest->index], curr_state,
> - dfa_state_size);
> - if (sched_verbose >= 5)
> - fprintf (sched_dump, "saving state for edge %d->%d\n",
> - f->src->index, f->dest->index);
> - }
> + save_state_for_fallthru_edge (last_bb, curr_state);
> }
> else
> {
> diff --git a/gcc/testsuite/gcc.target/powerpc/pr105586.c b/gcc/testsuite/gcc.target/powerpc/pr105586.c
> new file mode 100644
> index 00000000000..bd397f58bc0
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/pr105586.c
> @@ -0,0 +1,19 @@
> +/* { dg-options "-mdejagnu-tune=power4 -O2 -fcompare-debug -fno-if-conversion -fno-guess-branch-probability" } */
> +
> +extern int bar(int i);
> +
> +typedef unsigned long u64;
> +int g;
> +
> +__int128 h;
> +
> +void
> +foo(int a, int b) {
> + int i;
> + char u8_1 = g, u8_3 = a;
> + u64 u64_1 = bar(0), u64_3 = u8_3 * u64_1;
> + __int128 u128_1 = h ^ __builtin_expect(i, 0);
> + u64 u64_4 = u64_1 << ((__builtin_sub_overflow_p(0, u8_1, (u64)0) ^ u128_1) & 8);
> + u64 u64_r = b + u64_3 + u64_4;
> + bar((short)u64_r + u8_3);
> +}
next prev parent reply other threads:[~2022-08-30 12:27 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-23 11:49 Surya Kumari Jangala
2022-08-23 12:55 ` Peter Bergner
2022-08-23 13:28 ` Segher Boessenkool
2022-08-24 8:10 ` Surya Kumari Jangala
2022-08-30 12:27 ` Richard Sandiford [this message]
2022-08-31 15:39 ` Jeff Law
2022-09-20 7:17 ` Surya Kumari Jangala
2022-09-21 7:33 ` Richard Biener
2022-11-08 16:36 ` Surya Kumari Jangala
2022-11-08 17:32 ` Richard Biener
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=mptr10xex27.fsf@arm.com \
--to=richard.sandiford@arm.com \
--cc=bergner@linux.ibm.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=jskumari@linux.vnet.ibm.com \
--cc=pthaugen@us.ibm.com \
--cc=segher@kernel.crashing.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: link
Be 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).