Andrew Pinski <pins...@gmail.com> writes: > On Sun, Mar 9, 2025 at 1:35 PM Andrew Pinski <quic_apin...@quicinc.com> wrote: >> >> LLVM folks noticed that GCC was shrink wrapping the call to >> vector<int>::push_back. >> So I thought it was a good idea to commit a testcase to make sure GCC does >> not regress >> in this area unknowning. >> >> Note the shrink wrapping started with r15-1619-g3b9b8d6cfdf593. >> Note this enables the testcase for x86_64 (!ia32), powerpc, aarch64 and >> riscv which I tested >> via godbolt to see the shrink wrapping occurs. Also tested the testcase for >> both >> x86_64-linux-gnu and aarch64-linux-gnu to make sure I got the target selects >> correct. > > Ping?
OK, thanks. Richard > >> >> Changes since v1: >> * v2: Fix some comments typos that was mentioned in the bug report. >> >> PR rtl-optimization/118502 >> >> gcc/testsuite/ChangeLog: >> >> * g++.dg/opt/shrink-wrapping-vector-1.C: New test. >> >> Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com> >> --- >> .../g++.dg/opt/shrink-wrapping-vector-1.C | 17 +++++++++++++++++ >> 1 file changed, 17 insertions(+) >> create mode 100644 gcc/testsuite/g++.dg/opt/shrink-wrapping-vector-1.C >> >> diff --git a/gcc/testsuite/g++.dg/opt/shrink-wrapping-vector-1.C >> b/gcc/testsuite/g++.dg/opt/shrink-wrapping-vector-1.C >> new file mode 100644 >> index 00000000000..8b1ad53fa80 >> --- /dev/null >> +++ b/gcc/testsuite/g++.dg/opt/shrink-wrapping-vector-1.C >> @@ -0,0 +1,17 @@ >> +// { dg-do compile { target { { { i?86-*-* x86_64-*-* } && { ! ia32 } } || >> { powerpc*-*-* aarch64*-*-* riscv*-*-* } } } } >> +// { dg-options "-O2 -fdump-rtl-pro_and_epilogue" } >> +// { dg-skip-if "requires hosted libstdc++ for vector" { ! hostedlib } } >> + >> +// PR rtl-optimization/118502 >> + >> +// The shrink-wrapping should happen around the slow path of >> vector<int>::push_back, >> +// The fast path is just checking if there is enough space and doing a few >> stores. >> +// We want to verify that shrink wrapping always happens. >> + >> +#include <vector> >> + >> +void push_back(std::vector<int>& xs, unsigned char x) { >> + xs.push_back(x); >> +} >> + >> +/* { dg-final { scan-rtl-dump "Performing shrink-wrapping" >> "pro_and_epilogue" } } */ >> -- >> 2.43.0 >>