[PATCH] CodeGen: Emit constant array temporaries into read-only globals.
Benjamin Kramer
benny.kra at gmail.com
Tue Mar 3 07:43:53 PST 2015
Hi rsmith,
Instead of creating a copy on the stack just stash them in a private
constant global. This saves both the copying overhead and the stack
space, and gives the optimizer more room to constant fold.
This tries to make array temporaries more similar to regular arrays,
they can't use the same logic because a temporary has no VarDecl to be
bound to so we roll our own version here.
The original use case for this optimization was code like
for (int i : {1, 2, 3, 4, 5, 6, 7, 8, 10})
foo(i);
where without this patch (assuming that the loop is not unrolled) we
would alloca an array on the stack, copy the 10 values over and
iterate on that. With this patch we put the array in .text use it
directly. Apart from that case this helps on virtually any passing of
a constant std::initializer_list as a function argument.
http://reviews.llvm.org/D8034
Files:
lib/CodeGen/CGExpr.cpp
test/CodeGenCXX/compound-literals.cpp
test/CodeGenCXX/cxx0x-initializer-array.cpp
test/CodeGenCXX/cxx0x-initializer-references.cpp
test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D8034.21105.patch
Type: text/x-patch
Size: 6402 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150303/35f39249/attachment.bin>
More information about the cfe-commits
mailing list