Simplify (B * v + C) * D -> BD* v + CD when B,C,D are all INTEGER_CST.
authorliuhongt <hongtao.liu@intel.com>
Tue, 31 May 2022 09:13:21 +0000 (17:13 +0800)
committerliuhongt <hongtao.liu@intel.com>
Thu, 16 Jun 2022 01:26:36 +0000 (09:26 +0800)
commit1089d083117f28f3518f5ec3c7a153236cb92334
treeef3527ef21d4ba082be241674924b1ce96d6ead6
parent499b9c5f099c1b3e1ec14977abafe62a4c712bdd
Simplify (B * v + C) * D -> BD* v + CD when B,C,D are all INTEGER_CST.

Similar for (v + B) * C + D -> C * v + BCD.
Don't simplify it when there's overflow and overflow is UB for type v.

gcc/ChangeLog:

PR tree-optimization/53533
* match.pd: Simplify (B * v + C) * D -> BD * v + CD and
(v + B) * C + D -> C * v + BCD when B,C,D are all INTEGER_CST,
and there's no overflow or !TYPE_OVERFLOW_UNDEFINED.

gcc/testsuite/ChangeLog:

* gcc.target/i386/pr53533-1.c: New test.
* gcc.target/i386/pr53533-2.c: New test.
* gcc.target/i386/pr53533-3.c: New test.
* gcc.target/i386/pr53533-4.c: New test.
* gcc.target/i386/pr53533-5.c: New test.
* gcc.dg/vect/slp-11a.c: Adjust testcase.
gcc/match.pd
gcc/testsuite/gcc.dg/vect/slp-11a.c
gcc/testsuite/gcc.target/i386/pr53533-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr53533-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr53533-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr53533-4.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr53533-5.c [new file with mode: 0644]