diff options
author | Andrew Pinski <apinski@marvell.com> | 2021-11-13 04:16:55 +0000 |
---|---|---|
committer | Andrew Pinski <apinski@marvell.com> | 2021-11-16 15:07:39 +0000 |
commit | 11c4a06a6c1a9db0bfdb3ee8509392dd7163709c (patch) | |
tree | 80270fb57c185187dd247904448330e62acadb8b /gcc/gimple-fold.c | |
parent | 8d8e8f3ad567c7bd1de708fcc841f691d9686c4d (diff) | |
download | gcc-11c4a06a6c1a9db0bfdb3ee8509392dd7163709c.zip gcc-11c4a06a6c1a9db0bfdb3ee8509392dd7163709c.tar.gz gcc-11c4a06a6c1a9db0bfdb3ee8509392dd7163709c.tar.bz2 |
tree-optimization: [PR103218] Fold ((type)(a<0)) << SIGNBITOFA into ((type)a) & signbit
This folds Fold ((type)(a<0)) << SIGNBITOFA into ((type)a) & signbit inside match.pd.
This was already handled in fold-cost by:
/* A < 0 ? <sign bit of A> : 0 is simply (A & <sign bit of A>). */
I have not removed as we only simplify "a ? POW2 : 0" at the gimple level to "a << CST1"
and fold actually does the reverse of folding "(a<0)<<CST" into "(a<0) ? 1<<CST : 0".
OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.
PR tree-optimization/103218
gcc/ChangeLog:
* match.pd: New pattern for "((type)(a<0)) << SIGNBITOFA".
gcc/testsuite/ChangeLog:
* gcc.dg/tree-ssa/pr103218-1.c: New test.
Diffstat (limited to 'gcc/gimple-fold.c')
0 files changed, 0 insertions, 0 deletions