[Bug tree-optimization/116024] [14/15 Regression] unnecessary integer comparison(s) for a simple loop since r14-5628-g53ba8d669550d3
artemiy at synopsys dot com
gcc-bugzilla@gcc.gnu.org
Mon Jul 22 09:23:53 GMT 2024
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116024
--- Comment #5 from Artemiy Volkov <artemiy at synopsys dot com> ---
Hi Andrew, thank you for the breakdown. For i1() (the case applicable to the
initial bug report) something like this seems to fix the issue:
diff --git a/gcc/match.pd b/gcc/match.pd
index cf359b0ec0f..8ab6d47e278 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -8773,2 +8773,10 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
+/* Transform comparisons of the form C1 - X CMP C2 to X - C1 CMP -C2. */
+(for cmp (lt le gt ge eq ne)
+ rcmp (gt ge lt le eq ne)
+ (simplify
+ (cmp (minus INTEGER_CST@0 @1) INTEGER_CST@2)
+ (if (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (@1)))
+ (rcmp (minus @1 @0) (negate @2)))))
+
/* Canonicalizations of BIT_FIELD_REFs. */
Would it make sense for this ticket to be assigned to me so I could refine and
post the above patch as well as tackle i2() and i3() (should those be extracted
to a separate PR or is it fine to fix all three under this PR)?
More information about the Gcc-bugs
mailing list