https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62025
--- Comment #13 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Just verified the trunk and it is the same thing there, also sched2 generating: al %r3,252(%r8) ahi %r8,128 alc %r2,120(%r8) where the first insn is cc setter, second cc clobber and third cc user and clobber, so the r8=r8+128 insn should not have been scheduled in between those two. It seems scheduler has some code to adjust the address (248 -> 120) based on the r8 adjustment, otherwise it would be wrong to move it even because of r8 register, perhaps if we take that path we don't fully check other side effects (cc clobber in this case). s390 AFAIK doesn't have addition which doesn't clobber flags, unlike many other architectures.