https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69943
--- Comment #2 from ktkachov at gcc dot gnu.org --- On second thought, reassociating signed addition is not legal in general because we might introduce signed overflow where one didn't exist before. Changing your integer example to use unsigned int instead produces the reassociation you want (subject to TARGET_SCHED_REASSOCIATION_WIDTH limits): sumi: add w6, w6, w7 add w5, w4, w5 add w2, w2, w3 add w6, w6, w5 add w0, w0, w1 add w6, w6, w2 add w0, w6, w0 ret