aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndrew Pinski <apinski@marvell.com>2023-06-07 07:43:50 -0700
committerAndrew Pinski <apinski@marvell.com>2023-06-09 07:14:53 -0700
commit52c92fb3f4005051e86bb3e9c70a13fb34954cd1 (patch)
tree0f22a2ce3f913b9b5fe5c05b09bd50d7e5008d4e /gcc
parent7ceed7e3e29c3375e3b8c4347d1985a72bbe7f11 (diff)
downloadgcc-52c92fb3f4005051e86bb3e9c70a13fb34954cd1.zip
gcc-52c92fb3f4005051e86bb3e9c70a13fb34954cd1.tar.gz
gcc-52c92fb3f4005051e86bb3e9c70a13fb34954cd1.tar.bz2
Change the `(zero_one ==/!= 0) ? y : z <op> y` patterns to use multiply rather than `(-zero_one) & z`
Since there is a pattern to convert `(-zero_one) & z` into `zero_one * z` already, it is better if we don't do a secondary transformation. This reduces the extra statements produced by match-and-simplify on the gimple level too. gcc/ChangeLog: * match.pd ((zero_one ==/!= 0) ? y : z <op> y): Use multiply rather than negation/bit_and.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/match.pd8
1 files changed, 4 insertions, 4 deletions
diff --git a/gcc/match.pd b/gcc/match.pd
index 77030b3..610668d 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -3695,7 +3695,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(cond (le @0 integer_zerop@1) (negate@2 @0) integer_zerop@1)
(max @2 @1))
-/* (zero_one == 0) ? y : z <op> y -> (-(typeof(y))zero_one & z) <op> y */
+/* (zero_one == 0) ? y : z <op> y -> ((typeof(y))zero_one * z) <op> y */
(for op (bit_xor bit_ior)
(simplify
(cond (eq zero_one_valued_p@0
@@ -3705,9 +3705,9 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(if (INTEGRAL_TYPE_P (type)
&& TYPE_PRECISION (type) > 1
&& (INTEGRAL_TYPE_P (TREE_TYPE (@0))))
- (op (bit_and (negate (convert:type @0)) @2) @1))))
+ (op (mult (convert:type @0) @2) @1))))
-/* (zero_one != 0) ? z <op> y : y -> (-(typeof(y))zero_one & z) <op> y */
+/* (zero_one != 0) ? z <op> y : y -> ((typeof(y))zero_one * z) <op> y */
(for op (bit_xor bit_ior)
(simplify
(cond (ne zero_one_valued_p@0
@@ -3717,7 +3717,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(if (INTEGRAL_TYPE_P (type)
&& TYPE_PRECISION (type) > 1
&& (INTEGRAL_TYPE_P (TREE_TYPE (@0))))
- (op (bit_and (negate (convert:type @0)) @2) @1))))
+ (op (mult (convert:type @0) @2) @1))))
/* Simplifications of shift and rotates. */