public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug target/103696] New: Lambda functions are not inlined under certain optimization pragmas @ 2021-12-13 20:30 imachug at gmail dot com 2021-12-13 20:33 ` [Bug target/103696] " imachug at gmail dot com ` (6 more replies) 0 siblings, 7 replies; 8+ messages in thread From: imachug at gmail dot com @ 2021-12-13 20:30 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103696 Bug ID: 103696 Summary: Lambda functions are not inlined under certain optimization pragmas Product: gcc Version: 11.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: imachug at gmail dot com Target Milestone: --- This seems like a very weird bug to me and I'm not even sure how to label it, so please fix the component if needed. Testcase (C++): #pragma GCC optimize("finite-math-only") #pragma GCC target("sse3") void fn() { } int global_var; int solve() { auto nested = []() { return global_var; }; return nested(); } When compiling this code via `g++ test.cpp -c -O2 -std=c++17`, I get the following assembly: $ objdump -d test.o ... 0000000000000000 <_ZZ5solvevENKUlvE_clEv.constprop.0>: 0: 8b 05 00 00 00 00 mov 0x0(%rip),%eax # 6 <_ZZ5solvevENKUlvE_clEv.constprop.0+0x6> 6: c3 retq 7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) e: 00 00 ... 0000000000000020 <_Z5solvev>: 20: f3 0f 1e fa endbr64 24: e8 d7 ff ff ff callq 0 <_ZZ5solvevENKUlvE_clEv.constprop.0> 29: c3 retq As you can see, the nested() lambda call was not inlined into solve(). However, if I do any of the following, the lambda is inlined as expected: - Remove `fn` definition - Move `fn` definition under `solve` - Replace reading `global_var` with a constant - Make `nested` a global function - Remove either of the two pragmas (or both) - Add -ffinite-math-only or -msse3 or both to the compilation line (regardless of whether the pragmas are still there) I have absolutely no idea why a floating point optimization affects inlining or how a pragma is different from a compilation line option wrt. this bug. ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug target/103696] Lambda functions are not inlined under certain optimization pragmas 2021-12-13 20:30 [Bug target/103696] New: Lambda functions are not inlined under certain optimization pragmas imachug at gmail dot com @ 2021-12-13 20:33 ` imachug at gmail dot com 2021-12-14 1:14 ` [Bug c++/103696] pragma optimization is not applying to Lambdas pinskia at gcc dot gnu.org ` (5 subsequent siblings) 6 siblings, 0 replies; 8+ messages in thread From: imachug at gmail dot com @ 2021-12-13 20:33 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103696 --- Comment #1 from Ivan Machugovskiy <imachug at gmail dot com> --- Obligatory info dump. I managed to reproduce this on G++ 9.3.0 and G++ 10.3.0 locally, and on G++ trunk on Godbolt (see https://godbolt.org/z/Y5Kr3KfjW). This is probably a longstanding bug. $ g++ -v Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper OFFLOAD_TARGET_NAMES=nvptx-none:hsa OFFLOAD_TARGET_DEFAULT=1 Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.3.0-17ubuntu1~20.04' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-HskZEa/gcc-9-9.3.0/debian/tmp-nvptx/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04) $ g++-10 -v Using built-in specs. COLLECT_GCC=g++-10 COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/10/lto-wrapper OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa:hsa OFFLOAD_TARGET_DEFAULT=1 Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 10.3.0-1ubuntu1~20.04' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-10 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-10-S4I5Pr/gcc-10-10.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-10-S4I5Pr/gcc-10-10.3.0/debian/tmp-gcn/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-mutex Thread model: posix Supported LTO compression algorithms: zlib zstd gcc version 10.3.0 (Ubuntu 10.3.0-1ubuntu1~20.04) ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/103696] pragma optimization is not applying to Lambdas 2021-12-13 20:30 [Bug target/103696] New: Lambda functions are not inlined under certain optimization pragmas imachug at gmail dot com 2021-12-13 20:33 ` [Bug target/103696] " imachug at gmail dot com @ 2021-12-14 1:14 ` pinskia at gcc dot gnu.org 2021-12-14 16:59 ` marxin at gcc dot gnu.org ` (4 subsequent siblings) 6 siblings, 0 replies; 8+ messages in thread From: pinskia at gcc dot gnu.org @ 2021-12-14 1:14 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103696 Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Last reconfirmed| |2021-12-14 Summary|Lambda functions are not |pragma optimization is not |inlined under certain |applying to Lambdas |optimization pragmas | Keywords| |wrong-code Blocks| |54367 Component|target |c++ Ever confirmed|0 |1 Status|UNCONFIRMED |NEW --- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- If I manually apply the attributes rather than use the pragma, I get the correct results. that is the following works: int global_var; [[gnu::optimize("finite-math-only"),gnu::target("sse3")]] int solve() { auto nested = [] [[gnu::optimize("finite-math-only"),gnu::target("sse")]] () { return global_var; }; return nested(); } Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54367 [Bug 54367] [meta-bug] lambda expressions ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/103696] pragma optimization is not applying to Lambdas 2021-12-13 20:30 [Bug target/103696] New: Lambda functions are not inlined under certain optimization pragmas imachug at gmail dot com 2021-12-13 20:33 ` [Bug target/103696] " imachug at gmail dot com 2021-12-14 1:14 ` [Bug c++/103696] pragma optimization is not applying to Lambdas pinskia at gcc dot gnu.org @ 2021-12-14 16:59 ` marxin at gcc dot gnu.org 2021-12-16 11:08 ` marxin at gcc dot gnu.org ` (3 subsequent siblings) 6 siblings, 0 replies; 8+ messages in thread From: marxin at gcc dot gnu.org @ 2021-12-14 16:59 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103696 Martin Liška <marxin at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Assignee|unassigned at gcc dot gnu.org |marxin at gcc dot gnu.org Status|NEW |ASSIGNED CC| |marxin at gcc dot gnu.org --- Comment #3 from Martin Liška <marxin at gcc dot gnu.org> --- Confirmed, debugging that right now. ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/103696] pragma optimization is not applying to Lambdas 2021-12-13 20:30 [Bug target/103696] New: Lambda functions are not inlined under certain optimization pragmas imachug at gmail dot com ` (2 preceding siblings ...) 2021-12-14 16:59 ` marxin at gcc dot gnu.org @ 2021-12-16 11:08 ` marxin at gcc dot gnu.org 2021-12-16 16:52 ` cvs-commit at gcc dot gnu.org ` (2 subsequent siblings) 6 siblings, 0 replies; 8+ messages in thread From: marxin at gcc dot gnu.org @ 2021-12-16 11:08 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103696 Martin Liška <marxin at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |patch --- Comment #4 from Martin Liška <marxin at gcc dot gnu.org> --- All right, I've got a patch candidate: https://gcc.gnu.org/pipermail/gcc-patches/2021-December/586999.html ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/103696] pragma optimization is not applying to Lambdas 2021-12-13 20:30 [Bug target/103696] New: Lambda functions are not inlined under certain optimization pragmas imachug at gmail dot com ` (3 preceding siblings ...) 2021-12-16 11:08 ` marxin at gcc dot gnu.org @ 2021-12-16 16:52 ` cvs-commit at gcc dot gnu.org 2021-12-16 16:53 ` marxin at gcc dot gnu.org 2024-04-17 7:12 ` pinskia at gcc dot gnu.org 6 siblings, 0 replies; 8+ messages in thread From: cvs-commit at gcc dot gnu.org @ 2021-12-16 16:52 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103696 --- Comment #5 from CVS Commits <cvs-commit at gcc dot gnu.org> --- The master branch has been updated by Martin Liska <marxin@gcc.gnu.org>: https://gcc.gnu.org/g:5b8f5a50a93c5fd44fa1ecb6f431fee1df267571 commit r12-6018-g5b8f5a50a93c5fd44fa1ecb6f431fee1df267571 Author: Martin Liska <mliska@suse.cz> Date: Wed Dec 15 17:27:56 2021 +0100 pragma: respect pragma in lambda functions In g:01ad8c54fdca we started supporting target pragma changes that are primarily caused by optimization option. The same can happen in the opposite way and we need to check for changes both in optimization_current_node and target_option_current_node. PR c++/103696 gcc/ChangeLog: * attribs.c (decl_attributes): Check if target_option_current_node is changed. gcc/testsuite/ChangeLog: * g++.target/i386/pr103696.C: New test. ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/103696] pragma optimization is not applying to Lambdas 2021-12-13 20:30 [Bug target/103696] New: Lambda functions are not inlined under certain optimization pragmas imachug at gmail dot com ` (4 preceding siblings ...) 2021-12-16 16:52 ` cvs-commit at gcc dot gnu.org @ 2021-12-16 16:53 ` marxin at gcc dot gnu.org 2024-04-17 7:12 ` pinskia at gcc dot gnu.org 6 siblings, 0 replies; 8+ messages in thread From: marxin at gcc dot gnu.org @ 2021-12-16 16:53 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103696 Martin Liška <marxin at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|ASSIGNED |RESOLVED Resolution|--- |FIXED --- Comment #6 from Martin Liška <marxin at gcc dot gnu.org> --- Fixed on master, not planning to backport as it depends on quite some option-related patches that were done in GCC 12 timeframe. ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/103696] pragma optimization is not applying to Lambdas 2021-12-13 20:30 [Bug target/103696] New: Lambda functions are not inlined under certain optimization pragmas imachug at gmail dot com ` (5 preceding siblings ...) 2021-12-16 16:53 ` marxin at gcc dot gnu.org @ 2024-04-17 7:12 ` pinskia at gcc dot gnu.org 6 siblings, 0 replies; 8+ messages in thread From: pinskia at gcc dot gnu.org @ 2024-04-17 7:12 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103696 Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target Milestone|--- |12.0 ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2024-04-17 7:12 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-12-13 20:30 [Bug target/103696] New: Lambda functions are not inlined under certain optimization pragmas imachug at gmail dot com 2021-12-13 20:33 ` [Bug target/103696] " imachug at gmail dot com 2021-12-14 1:14 ` [Bug c++/103696] pragma optimization is not applying to Lambdas pinskia at gcc dot gnu.org 2021-12-14 16:59 ` marxin at gcc dot gnu.org 2021-12-16 11:08 ` marxin at gcc dot gnu.org 2021-12-16 16:52 ` cvs-commit at gcc dot gnu.org 2021-12-16 16:53 ` marxin at gcc dot gnu.org 2024-04-17 7:12 ` pinskia at gcc dot gnu.org
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).