On Fri, Mar 6, 2015 at 12:00 PM, Benjamin Kramer <[email protected]> wrote: > Author: d0k > Date: Fri Mar 6 14:00:03 2015 > New Revision: 231508 > > URL: http://llvm.org/viewvc/llvm-project?rev=231508&view=rev > Log: > CodeGen: Emit constant temporaries into read-only globals. > > 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. > > Differential Revision: http://reviews.llvm.org/D8034
I've reverted this in r231541 as it broke Chromium. See error message on the revert commit, or on the buildbot here: http://build.chromium.org/p/chromium.fyi/builders/ClangToTLinux/builds/494/steps/compile/logs/stdio I'll see if I can come up with a reproduction, but since it's a link error I can't just send you the preprocessed source. - Hans _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
