From 603aeb87505e6777e159c0bfaee72a3708c8f6a1 Mon Sep 17 00:00:00 2001 From: Alexander Monakov Date: Fri, 10 Jun 2016 15:58:53 +0300 Subject: [PATCH] * match.pd (-1 / B < A): Use :c to avoid pattern duplication. From-SVN: r237307 --- gcc/ChangeLog | 4 ++++ gcc/match.pd | 14 ++------------ 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 73ba814f135..9696ad1b7a4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2016-06-10 Alexander Monakov + + * match.pd (-1 / B < A): Use :c to avoid pattern duplication. + 2016-06-10 Maxim Ostapenko PR sanitizer/71480 diff --git a/gcc/match.pd b/gcc/match.pd index fe711159df9..7d4beeaa4ed 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -2626,22 +2626,12 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) && types_match (TREE_TYPE (@0), TREE_TYPE (@1))) (out (imagpart @2) { build_zero_cst (TREE_TYPE (@0)); })))) -/* For unsigned operands, A > -1 / B checks whether A * B would overflow. +/* For unsigned operands, -1 / B < A checks whether A * B would overflow. Simplify it to __builtin_mul_overflow (A, B, ). */ -/* -1 / B < A */ (for cmp (lt ge) out (ne eq) (simplify - (cmp (trunc_div:s integer_all_onesp @1) @0) - (if (TYPE_UNSIGNED (TREE_TYPE (@0)) && !VECTOR_TYPE_P (TREE_TYPE (@0))) - (with { tree t = TREE_TYPE (@0), cpx = build_complex_type (t); } - (out (imagpart (IFN_MUL_OVERFLOW:cpx @0 @1)) { build_zero_cst (t); }))))) - -/* A > -1 / B */ -(for cmp (gt le) - out (ne eq) - (simplify - (cmp @0 (trunc_div:s integer_all_onesp @1)) + (cmp:c (trunc_div:s integer_all_onesp @1) @0) (if (TYPE_UNSIGNED (TREE_TYPE (@0)) && !VECTOR_TYPE_P (TREE_TYPE (@0))) (with { tree t = TREE_TYPE (@0), cpx = build_complex_type (t); } (out (imagpart (IFN_MUL_OVERFLOW:cpx @0 @1)) { build_zero_cst (t); })))))