https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70359
--- Comment #14 from kugan at gcc dot gnu.org --- (In reply to Jeffrey A. Law from comment #13) > The change to the assignment of p_22 is made by forwprop1. > > It does create a situation where p_2 is live outside the loop and hides the > CSE opportunity, which may be the cause of the more significant differences > at expansion time. Indeed. This is what I see: gcc 5 branch with -O2 t2.c -S -Os -marm -mcpu=arm966e-s 96 Bytes trunk with -O2 t2.c -c -Os -marm -mcpu=arm966e-s 112 Bytes trunk with -O2 t2.c -c -Os -marm 108 Bytes trunk with -O2 t2.c -c -Os -marm -mcpu=arm966e-s -fno-tree-forwprop 96 Bytes trunk with -O2 t2.c -c -Os -marm -mcpu=arm966e-s and Jakub's changes in c# 5 - 100 Bytes