On Wed, Dec 18, 2019 at 10:50 AM Andrew Pinski <pins...@gmail.com> wrote: > > On Tue, Dec 17, 2019 at 6:33 PM Hongtao Liu <crazy...@gmail.com> wrote: > > > > Hi: > > This patch is to simplify A * C + (-D) -> (A - D/C) * C when C is a > > power of 2 and D mod C == 0. > > bootstrap and make check is ok. > > I don't see why D has to be negative here. > > > >TREE_CODE (TREE_TYPE (@0)) == INTEGER_TYPE > + && TYPE_UNSIGNED (TREE_TYPE (@0)) > > This is the wrong check here. > Use INTEGRAL_TYPE_P . > > >+ (plus (mult @0 integer_pow2p@1) INTEGER_CST@2) > > You might want a :s here for the mult and/or plus. > > unsigned HOST_WIDE_INT d = tree_to_uhwi (@2); > ... > Maybe use wide_int math instead of HOST_WIDE_INT here, then you don't > need the tree_fits_uhwi_p check. > > Add a testcase should tests the pattern directly rather than indirectly. > > Also we are in stage 3 which means bug fixes only so this might/should > wait until stage 1.
Yes, thanks. > > Thanks, > Andrew Pinski > > > > > changelog > > gcc/ > > * gcc/match.pd (A * C + (-D) = (A - D/C) * C. when C is a > > power of 2 and D mod C == 0): Add new simplification. > > > > gcc/testsuite > > * gcc.dg/pr92980.c: New test. > > > > -- > > BR, > > Hongtao -- BR, Hongtao