[LLVMdev] Memory Allocation Optimized away with new by not with ::operator new
David Blaikie
dblaikie at gmail.com
Tue May 5 22:21:57 PDT 2015
Didn't we just have this discussion on cfe-dev? (or is there something
different I've missed?)
On Mon, May 4, 2015 at 2:31 AM, François Fayard <fayard at insideloop.io>
wrote:
> Hi,
>
> I’ve made my own version of std::vector which is called il::Vector. Due to
> http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3664.html, LLVM
> can optimise away memory allocation. Therefore, the following code optimise
> away all memory allocation for w resulting in a single allocation during
> the whole program (for v).
>
> When using my own vector implementation, I realised that the allocation
> were not optimized away because I was using ::operator new. When I’ve
> switched back to new, the optimisation came back.
>
> Is it expected or a bug from LLVM?
>
> François Fayard
> Founder & Consultant - Inside Loop
> Tel: +33 (0)6 01 44 06 93 <+33%206%2001%2044%2006%2093>
> Web: www.insideloop.io
> Twitter: @insideloop_io
>
> =====
>
> #include <iostream>
> #include <vector>
>
>
> std::vector<double> f_val(std::size_t i, std::size_t n) {
> auto v = std::vector<double>(n);
> for (std::size_t k = 0; k < v.size(); ++k) {
> v[k] = static_cast<double>(i);
> }
> return v;
> }
>
> int main (int argc, char const *argv[])
> {
> const auto n = std::size_t{10};
> const auto nb_loops = std::size_t{300000000};
>
> auto v = std::vector<double>( n, 0.0 );
> for (std::size_t i = 0; i < nb_loops; ++i) {
> auto w = f_val(i, n);
> for (std::size_t k = 0; k < v.size(); ++k) {
> v[k] += w[k];
> }
> }
> std::cout << v[0] << " " << v[n - 1] << std::endl;
>
> return 0;
> }
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150505/0da7935c/attachment.html>
More information about the llvm-dev
mailing list