https://gcc.gnu.org/bugzilla/show_bug.cgi?id=41244
--- Comment #12 from Andrew Pinski <pinskia at gcc dot gnu.org> --- So basically the biggest issue is we do the sign extend and then do the multiply in an unsigned type; this causes all negative values causing a wrapping which is not correct really but we don't know any better. I tried to change pass_laddress::execute to do the multiply in a signed type but that still is not able to optimize find in comment #6 to work and the IR is so much more complex.