https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71343
--- Comment #4 from CVS Commits <cvs-commit at gcc dot gnu.org> --- The master branch has been updated by Roger Sayle <sa...@gcc.gnu.org>: https://gcc.gnu.org/g:98837d6e79dd27c15f5218f3f1ddf838cda4796c commit r13-5111-g98837d6e79dd27c15f5218f3f1ddf838cda4796c Author: Roger Sayle <ro...@nextmovesoftware.com> Date: Wed Jan 11 16:54:58 2023 +0000 PR tree-optimization/71343: Value number X<<2 as X*4. This patch is the second part of a fix for PR tree-optimization/71343, that implements Richard Biener's suggestion of using tree-ssa's value numbering instead of match.pd. The change is that when assigning a value number for the expression X<<C, we actually look-up or insert the value number for the multiplication X*(1<<C). This elegantly handles the fact that we (intentionally) don't canonicalize these as equivalent in GIMPLE, and the optimization/equivalence in PR 71343 now happens by (tree-ssa SCCVN) magic. 2023-01-11 Roger Sayle <ro...@nextmovesoftware.com> gcc/ChangeLog PR tree-optimization/71343 * tree-ssa-sccvn.cc (visit_nary_op) <case LSHIFT_EXPR>: Make the value number of the expression X << C the same as the value number for the multiplication X * (1<<C). gcc/testsuite/ChangeLog PR tree-optimization/71343 * gcc.dg/pr71343-2.c: New test case.