[cfe-dev] Lambdas and the ABI?
Hal Finkel via cfe-dev
cfe-dev at lists.llvm.org
Tue Mar 21 10:05:56 PDT 2017
On 03/21/2017 08:45 AM, Hubert Tong wrote:
> This question was explored in an other context here:
> http://sourcerytools.com/pipermail/cxx-abi-dev/2013-January/002544.html
Very interesting, thanks! So the conclusion was that, " The ABI will
need to specify the layout of closure types with weak linkage." In some
cases (enumerated here:
https://itanium-cxx-abi.github.io/cxx-abi/abi.html#closure-types) the
layout must be fixed (because it must be consistent across translation
units).
I imagine that size/alignment might also need to be fixed in cases where
the source program explicitly depends on them (e.g. doing
sizeof(lambda), new auto(lambda)).
-Hal
>
> -- HT
>
> On Tue, Mar 21, 2017 at 9:03 AM, Hal Finkel via cfe-dev
> <cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>> wrote:
>
> Hi Richard, Chandler, John, et al.,
>
> "Quick" question: What aspects, if any, of a C++ lambda (e.g.
> size, layout, alignment) leak into the ABI or are (potentially)
> semantically visible?
>
> Context...
>
> We're investigating late lowering/outlining schemes to improve
> code generation for OpenMP and other parallel programming models.
> One important advantage of outlining late is that the IR-level
> optimizer still has access to the pointer-aliasing and loop
> information from the containing function. There are natural
> benefits to C++ lambdas as well. Lambdas that are used "in place"
> (i.e. only have one call site) should always be inlined, so the
> issues don't come up there, but for lambdas that have multiple
> call sites, or worse, escape (via std::function or some other
> type-erasure mechanism), we can get suboptimal optimization
> results for the body of the lambda. It would seem sad to fix this
> for OpenMP but not for lambdas.
>
> However, optimizing before outlining could mean changes in what
> variables need to be captured (not semantically, but at the IR
> level), and so I'd like to think through what would constrain the
> optimizer's freedom to act in this regard.
>
> John, I'm curious about how this might apply to Objective C blocks
> as well.
>
> Thanks again,
>
> Hal
>
> --
> Hal Finkel
> Lead, Compiler Technology and Programming Languages
> Leadership Computing Facility
> Argonne National Laboratory
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
> <http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev>
>
>
--
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170321/1528a542/attachment.html>
More information about the cfe-dev
mailing list