[Bug middle-end/70359] [6/7/8 Regression] Code size increase for x86/ARM/others compared to gcc-5.3.0

aldyh at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Mar 19 17:58:00 GMT 2018


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70359

--- Comment #42 from Aldy Hernandez <aldyh at gcc dot gnu.org> ---
(In reply to Jeffrey A. Law from comment #36)
> WRT the division removal.  That seems so profitable that a slight increase
> in codesize is warranted.  So if we fix the other issue  and the source of
> the remaining codesize regressions is the removal of the division, I would
> consider this BZ resolved.

Richi.  Jeff.

Limiting the single_use with optimize_size as well may give us the best of both
worlds.  Would you like me to post the [untested] patch below upstream?  With
this patch code size is even smaller than GCC 5.3.

I really don't care.  Actually, I'd prefer to do nothing and close the PR ;-). 
Up to y'all.

diff --git a/gcc/match.pd b/gcc/match.pd
index f61c4d7440a..5d29bf62dc9 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -1290,11 +1290,12 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
 /* X / C1 op C2 into a simple range test.  */
 (for cmp (simple_comparison)
  (simplify
-  (cmp (trunc_div:s @0 INTEGER_CST@1) INTEGER_CST@2)
+  (cmp (trunc_div:s@3 @0 INTEGER_CST@1) INTEGER_CST@2)
   (if (INTEGRAL_TYPE_P (TREE_TYPE (@0))
        && integer_nonzerop (@1)
        && !TREE_OVERFLOW (@1)
-       && !TREE_OVERFLOW (@2))
+       && !TREE_OVERFLOW (@2)
+       && (!optimize_size || single_use (@3)))
    (with { tree lo, hi; bool neg_overflow;
           enum tree_code code = fold_div_compare (cmp, @1, @2, &lo, &hi,
                                                   &neg_overflow); }
@@ -1456,9 +1457,10 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
 (for cmp (eq ne)
      ocmp (lt ge)
  (simplify
-  (cmp (trunc_div @0 @1) integer_zerop)
+  (cmp (trunc_div@2 @0 @1) integer_zerop)
   (if (TYPE_UNSIGNED (TREE_TYPE (@0))
-       && (VECTOR_TYPE_P (type) || !VECTOR_TYPE_P (TREE_TYPE (@0))))
+       && (VECTOR_TYPE_P (type) || !VECTOR_TYPE_P (TREE_TYPE (@0)))
+       && (!optimize_size || single_use (@2)))
    (ocmp @0 @1))))

 /* X == C - X can never be true if C is odd.  */


More information about the Gcc-bugs mailing list