On Fri, Jul 1, 2022 at 1:00 AM Roger Sayle <ro...@nextmovesoftware.com> wrote: > > > When optimizing for size with -Oz, setting a register can be minimized by > pushing an immediate value to the stack and popping it to the destination. > Alas the one general register that shouldn't be updated via the stack is > the stack pointer itself, where "pop %esp" can't be represented in GCC's > RTL ("use of a register mentioned in pre_inc, pre_dec, post_inc or > post_dec is not permitted within the same instruction"). This patch > fixes PR target/106122 by explicitly checking for SP_REG in the > problematic peephole2. > > This patch has been tested on x86_64-pc-linux-gnu with make bootstrap > and make -k check, both with and without --target_board=unix{-m32} > with no new failures. Ok for mainline? > > > 2022-06-30 Roger Sayle <ro...@nextmovesoftware.com> > > gcc/ChangeLog > PR target/106122 > * config/i386/i386.md (peephole2): Avoid generating pop %esp > when optimizing for size. > > gcc/testsuite/ChangeLog > PR target/106122 > * gcc.target/i386/pr106122.c: New test case.
OK for mainline and backport. Thanks, Uros. > > > Thanks in advance, > Roger > -- >