https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77836
--- Comment #2 from Marc Glisse <glisse at gcc dot gnu.org> --- (In reply to Andrew Pinski from comment #1) > The easy way to do this is to canonicalize the shift to a multiply or the > multiply to a shift which is what it is done on the RTL level. For unsigned types that seems fine, but for signed types, lshift looses information on (im)possible overflow compared to multiplication, so I am reluctant to turn mult into lshift, and turning lshift into mult requires VRP.