https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116845
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |missed-optimization --- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Actually the differene comes from frowprop: LP64 does: Applying pattern match.pd:4328, gimple-match-8.cc:1208 gimple_simplified to _16 = j.0_1 + 18446744073709551615; _3 = _16 * 4; Matching expression match.pd:160, gimple-match-10.cc:33 Matching expression match.pd:160, gimple-match-10.cc:33 Matching expression match.pd:160, gimple-match-10.cc:33 ... Removing dead stmt:_2 = j.0_1 * 4; So why did it match in LP64 but not ILP32. Because the upper 2 bits are zero.