https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84067
Bug ID: 84067 Summary: [8 regression] gcc.dg/wmul-1.c regression on aarch64 after r257077 Product: gcc Version: 8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: clyon at gcc dot gnu.org Target Milestone: --- After r257077, I have noticed a regression on aarch64: FAIL: gcc.dg/wmul-1.c scan-tree-dump-not widening_mul "WIDEN_MULT_PLUS_EXPR" Richi said: Late forwprop does @@ -75,7 +21,7 @@ _1 = (long unsigned int) Idx_6(D); _2 = _1 * 40; _12 = _1 * 4; - _17 = _2 + _12; + _17 = _1 * 44; _13 = Arr_7(D) + _17; MEM[(int[10] *)_13] = 1; _4 = _2 + 400; _18 = _4 + _12; _16 = Arr_7(D) + _18; MEM[(int[10] *)_16] = 2; which I'm not sure ends up profitable at the end. It makes _12 dead so the total number of multiplications stays the same. For this we then apply the WIDEN_MULT_PLUS_EXPR two times given _2 is no longer used multiple times. The reason the above transform happens is the match.pd :s behavior which "ignores" :s in case the resulting expression is "simple".