[PATCH] Fix redundant load missed by fre [tree-optimization 92980]
Andrew Pinski
pinskia@gmail.com
Wed Dec 18 02:57:00 GMT 2019
On Tue, Dec 17, 2019 at 6:33 PM Hongtao Liu <crazylht@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.
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
More information about the Gcc-patches
mailing list