From: "Martin Liška" <mliska@suse.cz>
To: Richard Biener <rguenther@suse.de>, Li Jia He <helijia@linux.ibm.com>
Cc: Andrew Pinski <pinskia@gmail.com>, Jeff Law <law@redhat.com>,
GCC Patches <gcc-patches@gcc.gnu.org>,
Segher Boessenkool <segher@kernel.crashing.org>,
wschmidt@linux.ibm.com, Martin Liska <mliska@suse.de>
Subject: Re: [PATCH 5/5] Rewrite second part of or_comparisons_1 into match.pd.
Date: Wed, 11 Sep 2019 13:57:00 -0000 [thread overview]
Message-ID: <a97b7a31-9e51-64e3-e946-bcc4ea857d4d@suse.cz> (raw)
In-Reply-To: <409be66d-fc77-ece0-2c41-84191ac530b4@suse.cz>
[-- Attachment #1: Type: text/plain, Size: 84 bytes --]
Hi.
Updated version of the patch that drops GENERIC
support in TREE codes.
Martin
[-- Attachment #2: 0005-Rewrite-second-part-of-or_comparisons_1-into-match.p.patch --]
[-- Type: text/x-patch, Size: 4442 bytes --]
From 548ff649ae56e2f60ba4b2537d97c5bf085248d5 Mon Sep 17 00:00:00 2001
From: Martin Liska <mliska@suse.cz>
Date: Fri, 6 Sep 2019 12:59:36 +0200
Subject: [PATCH 5/5] Rewrite second part of or_comparisons_1 into match.pd.
gcc/ChangeLog:
2019-09-09 Martin Liska <mliska@suse.cz>
* gimple-fold.c (or_comparisons_1): Remove rules moved
to ...
* match.pd: ... here.
---
gcc/gimple-fold.c | 45 ---------------------------------------------
gcc/match.pd | 38 ++++++++++++++++++++++++++++++++++++++
2 files changed, 38 insertions(+), 45 deletions(-)
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c
index dc8e8eef45c..5b79ebd711f 100644
--- a/gcc/gimple-fold.c
+++ b/gcc/gimple-fold.c
@@ -6043,51 +6043,6 @@ or_comparisons_1 (tree type, enum tree_code code1, tree op1a, tree op1b,
return t;
}
- /* If both comparisons are of the same value against constants, we might
- be able to merge them. */
- if (operand_equal_p (op1a, op2a, 0)
- && TREE_CODE (op1b) == INTEGER_CST
- && TREE_CODE (op2b) == INTEGER_CST)
- {
- int cmp = tree_int_cst_compare (op1b, op2b);
-
- /* Chose the less restrictive of two < or <= comparisons. */
- if ((code1 == LT_EXPR || code1 == LE_EXPR)
- && (code2 == LT_EXPR || code2 == LE_EXPR))
- {
- if ((cmp < 0) || (cmp == 0 && code1 == LT_EXPR))
- return fold_build2 (code2, boolean_type_node, op2a, op2b);
- else
- return fold_build2 (code1, boolean_type_node, op1a, op1b);
- }
-
- /* Likewise chose the less restrictive of two > or >= comparisons. */
- else if ((code1 == GT_EXPR || code1 == GE_EXPR)
- && (code2 == GT_EXPR || code2 == GE_EXPR))
- {
- if ((cmp > 0) || (cmp == 0 && code1 == GT_EXPR))
- return fold_build2 (code2, boolean_type_node, op2a, op2b);
- else
- return fold_build2 (code1, boolean_type_node, op1a, op1b);
- }
-
- /* Check for singleton ranges. */
- else if (cmp == 0
- && ((code1 == LT_EXPR && code2 == GT_EXPR)
- || (code1 == GT_EXPR && code2 == LT_EXPR)))
- return fold_build2 (NE_EXPR, boolean_type_node, op1a, op2b);
-
- /* Check for less/greater pairs that don't restrict the range at all. */
- else if (cmp >= 0
- && (code1 == LT_EXPR || code1 == LE_EXPR)
- && (code2 == GT_EXPR || code2 == GE_EXPR))
- return boolean_true_node;
- else if (cmp <= 0
- && (code1 == GT_EXPR || code1 == GE_EXPR)
- && (code2 == LT_EXPR || code2 == LE_EXPR))
- return boolean_true_node;
- }
-
/* Perhaps the first comparison is (NAME != 0) or (NAME == 1) where
NAME's definition is a truth value. See if there are any simplifications
that can be done against the NAME's definition. */
diff --git a/gcc/match.pd b/gcc/match.pd
index c465eabbb89..08b382fd2b9 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -2051,6 +2051,44 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(if (code1 == NE_EXPR && val) { constant_boolean_node (true, type); })
(if (code1 == NE_EXPR && !val) @3))))))
+/* Convert (X OP1 CST1) || (X OP2 CST2). */
+
+(for code1 (lt le gt ge)
+ (for code2 (lt le gt ge)
+ (simplify
+ (bit_ior (code1:c@3 @0 INTEGER_CST@1) (code2:c@4 @0 INTEGER_CST@2))
+ (with
+ {
+ int cmp = tree_int_cst_compare (@1, @2);
+ }
+ (switch
+ /* Choose the more restrictive of two < or <= comparisons. */
+ (if ((code1 == LT_EXPR || code1 == LE_EXPR)
+ && (code2 == LT_EXPR || code2 == LE_EXPR))
+ (if ((cmp < 0) || (cmp == 0 && code1 == LT_EXPR))
+ @4
+ @3))
+ /* Likewise chose the more restrictive of two > or >= comparisons. */
+ (if ((code1 == GT_EXPR || code1 == GE_EXPR)
+ && (code2 == GT_EXPR || code2 == GE_EXPR))
+ (if ((cmp > 0) || (cmp == 0 && code1 == GT_EXPR))
+ @4
+ @3))
+ /* Check for singleton ranges. */
+ (if (cmp == 0
+ && ((code1 == LT_EXPR && code2 == GT_EXPR)
+ || (code1 == GT_EXPR && code2 == LT_EXPR)))
+ (ne @0 @2))
+ /* Check for disjoint ranges. */
+ (if (cmp >= 0
+ && (code1 == LT_EXPR || code1 == LE_EXPR)
+ && (code2 == GT_EXPR || code2 == GE_EXPR))
+ { constant_boolean_node (true, type); })
+ (if (cmp <= 0
+ && (code1 == GT_EXPR || code1 == GE_EXPR)
+ && (code2 == LT_EXPR || code2 == LE_EXPR))
+ { constant_boolean_node (true, type); })
+ )))))
/* We can't reassociate at all for saturating types. */
(if (!TYPE_SATURATING (type))
--
2.23.0
next prev parent reply other threads:[~2019-09-11 13:57 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-27 6:12 [PATCH][middle-end/88784] Middle end is missing some optimizations about unsigned Li Jia He
2019-06-27 15:48 ` Jeff Law
2019-06-28 4:55 ` Li Jia He
2019-06-28 17:02 ` Andrew Pinski
2019-07-01 7:31 ` Richard Biener
2019-07-02 7:41 ` Li Jia He
2019-07-02 8:09 ` Richard Biener
2019-07-02 8:51 ` Richard Biener
2019-07-16 6:54 ` Li Jia He
2019-08-30 11:16 ` Martin Liška
2019-09-05 13:01 ` Richard Biener
2019-09-05 18:47 ` Martin Liška
2019-09-06 8:01 ` Richard Biener
2019-09-06 8:04 ` Martin Liška
2019-09-06 10:13 ` [PATCH 1/2] Auto-generate maybe_fold_and/or_comparisons from match.pd Martin Liška
2019-09-09 12:23 ` Martin Liška
2019-09-09 13:10 ` Richard Biener
2019-09-09 13:40 ` Martin Liška
2019-09-09 13:42 ` Richard Biener
2019-09-09 13:45 ` Martin Liška
2019-09-09 13:55 ` Richard Biener
2019-09-10 7:40 ` Martin Liška
[not found] ` <ba4ec7b3-0d0d-ca7b-b2d9-2f34478a23f4@linux.ibm.com>
2019-09-11 8:51 ` Martin Liška
2019-09-11 11:16 ` Martin Liška
2019-09-11 12:23 ` Richard Biener
2019-09-11 13:55 ` Martin Liška
2019-09-09 13:10 ` Marc Glisse
2019-09-09 13:30 ` Martin Liška
2019-09-09 13:39 ` Richard Biener
2019-09-09 12:24 ` [PATCH 4/5] Rewrite first part of or_comparisons_1 into match.pd Martin Liška
2019-09-11 11:19 ` Martin Liška
2019-09-11 13:57 ` Martin Liška
2019-09-16 9:05 ` Richard Biener
2019-09-09 12:24 ` [PATCH 3/5] Rewrite part of and_comparisons_1 " Martin Liška
2019-09-09 13:41 ` Martin Liška
2019-09-10 7:41 ` Martin Liška
2019-09-10 11:19 ` Marc Glisse
2019-09-11 8:27 ` Martin Liška
2019-09-11 11:18 ` Martin Liška
2019-09-11 12:44 ` Richard Biener
2019-09-11 13:19 ` Martin Liška
2019-09-11 13:57 ` Martin Liška
2019-09-16 9:04 ` Richard Biener
2019-09-16 13:47 ` Martin Liška
2019-09-10 8:52 ` Bernhard Reutner-Fischer
2019-09-11 8:11 ` Martin Liška
2019-09-09 12:25 ` [PATCH 5/5] Rewrite second part of or_comparisons_1 " Martin Liška
2019-09-11 11:19 ` Martin Liška
2019-09-11 13:57 ` Martin Liška [this message]
2019-09-16 9:07 ` Richard Biener
2019-09-16 14:23 ` Martin Liška
2019-09-05 13:17 ` [PATCH][middle-end/88784] Middle end is missing some optimizations about unsigned Richard Biener
2019-09-05 18:47 ` Martin Liška
2019-09-06 10:14 ` [PATCH 2/2] Fix PR88784, middle " Martin Liška
2019-09-11 13:08 ` Richard Biener
2019-09-11 13:56 ` Martin Liška
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=a97b7a31-9e51-64e3-e946-bcc4ea857d4d@suse.cz \
--to=mliska@suse.cz \
--cc=gcc-patches@gcc.gnu.org \
--cc=helijia@linux.ibm.com \
--cc=law@redhat.com \
--cc=mliska@suse.de \
--cc=pinskia@gmail.com \
--cc=rguenther@suse.de \
--cc=segher@kernel.crashing.org \
--cc=wschmidt@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).