From: Manolis Tsamis <manolis.tsamis@vrull.eu>
To: gcc-patches@gcc.gnu.org
Cc: Jakub Jelinek <jakub@redhat.com>,
Philipp Tomsich <philipp.tomsich@vrull.eu>,
Robin Dapp <rdapp@linux.ibm.com>,
Andrew Pinski <apinski@marvell.com>,
Manolis Tsamis <manolis.tsamis@vrull.eu>
Subject: [PATCH 0/2] ifcvt: Allow if conversion of arithmetic in basic blocks with multiple sets
Date: Sat, 1 Jul 2023 11:24:11 +0200 [thread overview]
Message-ID: <20230701092413.2488806-1-manolis.tsamis@vrull.eu> (raw)
noce_convert_multiple_sets has been introduced and extended over time to handle
if conversion for blocks with multiple sets. Currently this is focused on
register moves and rejects any sort of arithmetic operations.
This series is an extension to allow more sequences to take part in if
conversion. The first patch is a required change to emit correct code and the
second patch whitelists a larger number of operations through
bb_ok_for_noce_convert_multiple_sets.
For targets that have a rich selection of conditional instructions,
like aarch64, I have seen an ~5x increase of profitable if conversions for
multiple set blocks in SPEC benchmarks. Also tested with a wide variety of
benchmarks and I have not seen performance regressions on either x64 / aarch64.
Some samples that previously resulted in a branch but now better use these
instructions can be seen in the provided test case.
Tested on aarch64 and x64; On x64 some tests that use __builtin_rint are
failing with an ICE but I believe that it's not an issue of this change.
force_operand crashes when (and:DF (not:DF (reg:DF 88)) (reg/v:DF 83 [ x ]))
is provided through emit_conditional_move.
Manolis Tsamis (2):
ifcvt: handle sequences that clobber flags in
noce_convert_multiple_sets
ifcvt: Allow more operations in multiple set if conversion
gcc/ifcvt.cc | 109 ++++++++++--------
.../aarch64/ifcvt_multiple_sets_arithm.c | 67 +++++++++++
2 files changed, 127 insertions(+), 49 deletions(-)
create mode 100644 gcc/testsuite/gcc.target/aarch64/ifcvt_multiple_sets_arithm.c
--
2.34.1
next reply other threads:[~2023-07-01 9:42 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-01 9:24 Manolis Tsamis [this message]
2023-07-01 9:24 ` [PATCH 1/2] ifcvt: handle sequences that clobber flags in noce_convert_multiple_sets Manolis Tsamis
2023-07-01 9:24 ` [PATCH 2/2] ifcvt: Allow more operations in multiple set if conversion Manolis Tsamis
2023-07-03 9:12 ` Robin Dapp
2023-07-04 14:32 ` Manolis Tsamis
2023-07-13 14:11 ` Manolis Tsamis
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=20230701092413.2488806-1-manolis.tsamis@vrull.eu \
--to=manolis.tsamis@vrull.eu \
--cc=apinski@marvell.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=jakub@redhat.com \
--cc=philipp.tomsich@vrull.eu \
--cc=rdapp@linux.ibm.com \
/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).