<div dir="ltr">Dear LLVM Developers:<div><br></div><div>1.   Recently I built llvm/12.0 on IBM power8 using gcc/<a href="http://8.2.0." target="_blank">8.2.0.</a> When I run clang++ with an example from <a href="https://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique" target="_blank">https://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique</a>:</div><div><br></div><div> <span style="color:rgb(51,153,0);background-color:rgb(249,249,249);font-size:12.8px">#include <iostream></span></div><pre class="gmail-de1" style="font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:12.8px;line-height:1.2em;padding:0px;border:0px none white;color:rgb(0,0,0);background:none rgb(249,249,249);border-radius:5px;margin-top:0px;margin-bottom:0px;width:55em;overflow:auto;vertical-align:top"><span class="gmail-co2" style="color:rgb(51,153,0)">#include <iomanip></span>
<span class="gmail-co2" style="color:rgb(51,153,0)">#include <memory></span>
 
<span class="gmail-kw1" style="color:rgb(0,0,221)">struct</span> Vec3
<span class="gmail-br0" style="color:rgb(0,128,0)">{</span>
    <span class="gmail-kw4" style="color:rgb(0,0,255)">int</span> x, y, z<span class="gmail-sy4" style="color:rgb(0,128,128)">;</span>
 
    <span class="gmail-co1" style="color:rgb(144,144,144)">// following constructor is no longer needed since C++20</span>
    Vec3<span class="gmail-br0" style="color:rgb(0,128,0)">(</span><span class="gmail-kw4" style="color:rgb(0,0,255)">int</span> x <span class="gmail-sy1" style="color:rgb(0,0,128)">=</span> <span class="gmail-nu0" style="color:rgb(0,0,128)">0</span>, <span class="gmail-kw4" style="color:rgb(0,0,255)">int</span> y <span class="gmail-sy1" style="color:rgb(0,0,128)">=</span> <span class="gmail-nu0" style="color:rgb(0,0,128)">0</span>, <span class="gmail-kw4" style="color:rgb(0,0,255)">int</span> z <span class="gmail-sy1" style="color:rgb(0,0,128)">=</span> <span class="gmail-nu0" style="color:rgb(0,0,128)">0</span><span class="gmail-br0" style="color:rgb(0,128,0)">)</span> <span class="gmail-kw1" style="color:rgb(0,0,221)">noexcept</span> <span class="gmail-sy4" style="color:rgb(0,128,128)">:</span> x<span class="gmail-br0" style="color:rgb(0,128,0)">(</span>x<span class="gmail-br0" style="color:rgb(0,128,0)">)</span>, y<span class="gmail-br0" style="color:rgb(0,128,0)">(</span>y<span class="gmail-br0" style="color:rgb(0,128,0)">)</span>, z<span class="gmail-br0" style="color:rgb(0,128,0)">(</span>z<span class="gmail-br0" style="color:rgb(0,128,0)">)</span> <span class="gmail-br0" style="color:rgb(0,128,0)">{</span> <span class="gmail-br0" style="color:rgb(0,128,0)">}</span>
 
    <span class="gmail-kw1" style="color:rgb(0,0,221)">friend</span> <a href="http://en.cppreference.com/w/cpp/io/basic_ostream" style="text-decoration-line:none;color:rgb(0,48,128);background:none"><span class="gmail-kw1727">std::<span class="gmail-me2">ostream</span></span></a><span class="gmail-sy3" style="color:rgb(0,0,64)">&</span> operator<span class="gmail-sy1" style="color:rgb(0,0,128)"><<</span><span class="gmail-br0" style="color:rgb(0,128,0)">(</span><a href="http://en.cppreference.com/w/cpp/io/basic_ostream" style="text-decoration-line:none;color:rgb(0,48,128);background:none"><span class="gmail-kw1727">std::<span class="gmail-me2">ostream</span></span></a><span class="gmail-sy3" style="color:rgb(0,0,64)">&</span> os, <span class="gmail-kw4" style="color:rgb(0,0,255)">const</span> Vec3<span class="gmail-sy3" style="color:rgb(0,0,64)">&</span> v<span class="gmail-br0" style="color:rgb(0,128,0)">)</span> <span class="gmail-br0" style="color:rgb(0,128,0)">{</span>
        <span class="gmail-kw1" style="color:rgb(0,0,221)">return</span> os <span class="gmail-sy1" style="color:rgb(0,0,128)"><<</span> <span class="gmail-st0" style="color:rgb(0,128,0)">"{ x="</span> <span class="gmail-sy1" style="color:rgb(0,0,128)"><<</span> v.<span class="gmail-me1">x</span> <span class="gmail-sy1" style="color:rgb(0,0,128)"><<</span> <span class="gmail-st0" style="color:rgb(0,128,0)">", y="</span> <span class="gmail-sy1" style="color:rgb(0,0,128)"><<</span> v.<span class="gmail-me1">y</span> <span class="gmail-sy1" style="color:rgb(0,0,128)"><<</span> <span class="gmail-st0" style="color:rgb(0,128,0)">", z="</span> <span class="gmail-sy1" style="color:rgb(0,0,128)"><<</span> v.<span class="gmail-me1">z</span> <span class="gmail-sy1" style="color:rgb(0,0,128)"><<</span> <span class="gmail-st0" style="color:rgb(0,128,0)">" }"</span><span class="gmail-sy4" style="color:rgb(0,128,128)">;</span>
    <span class="gmail-br0" style="color:rgb(0,128,0)">}</span>
<span class="gmail-br0" style="color:rgb(0,128,0)">}</span><span class="gmail-sy4" style="color:rgb(0,128,128)">;</span>
 
<span class="gmail-kw4" style="color:rgb(0,0,255)">int</span> main<span class="gmail-br0" style="color:rgb(0,128,0)">(</span><span class="gmail-br0" style="color:rgb(0,128,0)">)</span>
<span class="gmail-br0" style="color:rgb(0,128,0)">{</span>
    <span class="gmail-co1" style="color:rgb(144,144,144)">// Use the default constructor.</span>
    <a href="http://en.cppreference.com/w/cpp/memory/unique_ptr" style="text-decoration-line:none;color:rgb(0,48,128);background:none"><span class="gmail-kw729">std::<span class="gmail-me2">unique_ptr</span></span></a><span class="gmail-sy1" style="color:rgb(0,0,128)"><</span>Vec3<span class="gmail-sy1" style="color:rgb(0,0,128)">></span> v1 <span class="gmail-sy1" style="color:rgb(0,0,128)">=</span> std<span class="gmail-sy4" style="color:rgb(0,128,128)">::</span><span class="gmail-me2">make_unique</span><span class="gmail-sy1" style="color:rgb(0,0,128)"><</span>Vec3<span class="gmail-sy1" style="color:rgb(0,0,128)">></span><span class="gmail-br0" style="color:rgb(0,128,0)">(</span><span class="gmail-br0" style="color:rgb(0,128,0)">)</span><span class="gmail-sy4" style="color:rgb(0,128,128)">;</span>
    <span class="gmail-co1" style="color:rgb(144,144,144)">// Use the constructor that matches these arguments</span>
    <a href="http://en.cppreference.com/w/cpp/memory/unique_ptr" style="text-decoration-line:none;color:rgb(0,48,128);background:none"><span class="gmail-kw729">std::<span class="gmail-me2">unique_ptr</span></span></a><span class="gmail-sy1" style="color:rgb(0,0,128)"><</span>Vec3<span class="gmail-sy1" style="color:rgb(0,0,128)">></span> v2 <span class="gmail-sy1" style="color:rgb(0,0,128)">=</span> std<span class="gmail-sy4" style="color:rgb(0,128,128)">::</span><span class="gmail-me2">make_unique</span><span class="gmail-sy1" style="color:rgb(0,0,128)"><</span>Vec3<span class="gmail-sy1" style="color:rgb(0,0,128)">></span><span class="gmail-br0" style="color:rgb(0,128,0)">(</span><span class="gmail-nu0" style="color:rgb(0,0,128)">0</span>,<span class="gmail-nu0" style="color:rgb(0,0,128)">1</span>,<span class="gmail-nu0" style="color:rgb(0,0,128)">2</span><span class="gmail-br0" style="color:rgb(0,128,0)">)</span><span class="gmail-sy4" style="color:rgb(0,128,128)">;</span>
    <span class="gmail-co1" style="color:rgb(144,144,144)">// Create a unique_ptr to an array of 5 elements</span>
    <a href="http://en.cppreference.com/w/cpp/memory/unique_ptr" style="text-decoration-line:none;color:rgb(0,48,128);background:none"><span class="gmail-kw729">std::<span class="gmail-me2">unique_ptr</span></span></a><span class="gmail-sy1" style="color:rgb(0,0,128)"><</span>Vec3<span class="gmail-br0" style="color:rgb(0,128,0)">[</span><span class="gmail-br0" style="color:rgb(0,128,0)">]</span><span class="gmail-sy1" style="color:rgb(0,0,128)">></span> v3 <span class="gmail-sy1" style="color:rgb(0,0,128)">=</span> std<span class="gmail-sy4" style="color:rgb(0,128,128)">::</span><span class="gmail-me2">make_unique</span><span class="gmail-sy1" style="color:rgb(0,0,128)"><</span>Vec3<span class="gmail-br0" style="color:rgb(0,128,0)">[</span><span class="gmail-br0" style="color:rgb(0,128,0)">]</span><span class="gmail-sy1" style="color:rgb(0,0,128)">></span><span class="gmail-br0" style="color:rgb(0,128,0)">(</span><span class="gmail-nu0" style="color:rgb(0,0,128)">5</span><span class="gmail-br0" style="color:rgb(0,128,0)">)</span><span class="gmail-sy4" style="color:rgb(0,128,128)">;</span>
 
    <a href="http://en.cppreference.com/w/cpp/io/cout" style="text-decoration-line:none;color:rgb(0,48,128);background:none"><span class="gmail-kw1756">std::<span class="gmail-me2">cout</span></span></a> <span class="gmail-sy1" style="color:rgb(0,0,128)"><<</span> <span class="gmail-st0" style="color:rgb(0,128,0)">"make_unique<Vec3>():      "</span> <span class="gmail-sy1" style="color:rgb(0,0,128)"><<</span> <span class="gmail-sy2" style="color:rgb(0,0,64)">*</span>v1 <span class="gmail-sy1" style="color:rgb(0,0,128)"><<</span> <span class="gmail-st0" style="color:rgb(0,128,0)">'<span class="es1" style="font-weight:bold">\n</span>'</span>
              <span class="gmail-sy1" style="color:rgb(0,0,128)"><<</span> <span class="gmail-st0" style="color:rgb(0,128,0)">"make_unique<Vec3>(0,1,2): "</span> <span class="gmail-sy1" style="color:rgb(0,0,128)"><<</span> <span class="gmail-sy2" style="color:rgb(0,0,64)">*</span>v2 <span class="gmail-sy1" style="color:rgb(0,0,128)"><<</span> <span class="gmail-st0" style="color:rgb(0,128,0)">'<span class="es1" style="font-weight:bold">\n</span>'</span>
              <span class="gmail-sy1" style="color:rgb(0,0,128)"><<</span> <span class="gmail-st0" style="color:rgb(0,128,0)">"make_unique<Vec3[]>(5):   "</span><span class="gmail-sy4" style="color:rgb(0,128,128)">;</span>
    <span class="gmail-kw1" style="color:rgb(0,0,221)">for</span> <span class="gmail-br0" style="color:rgb(0,128,0)">(</span><span class="gmail-kw4" style="color:rgb(0,0,255)">int</span> i <span class="gmail-sy1" style="color:rgb(0,0,128)">=</span> <span class="gmail-nu0" style="color:rgb(0,0,128)">0</span><span class="gmail-sy4" style="color:rgb(0,128,128)">;</span> i <span class="gmail-sy1" style="color:rgb(0,0,128)"><</span> <span class="gmail-nu0" style="color:rgb(0,0,128)">5</span><span class="gmail-sy4" style="color:rgb(0,128,128)">;</span> i<span class="gmail-sy2" style="color:rgb(0,0,64)">++</span><span class="gmail-br0" style="color:rgb(0,128,0)">)</span> <span class="gmail-br0" style="color:rgb(0,128,0)">{</span>
        <a href="http://en.cppreference.com/w/cpp/io/cout" style="text-decoration-line:none;color:rgb(0,48,128);background:none"><span class="gmail-kw1756">std::<span class="gmail-me2">cout</span></span></a> <span class="gmail-sy1" style="color:rgb(0,0,128)"><<</span> <a href="http://en.cppreference.com/w/cpp/io/manip/setw" style="text-decoration-line:none;color:rgb(0,48,128);background:none"><span class="gmail-kw1795">std::<span class="gmail-me2">setw</span></span></a><span class="gmail-br0" style="color:rgb(0,128,0)">(</span>i <span class="gmail-sy4" style="color:rgb(0,128,128)">?</span> <span class="gmail-nu0" style="color:rgb(0,0,128)">30</span> <span class="gmail-sy4" style="color:rgb(0,128,128)">:</span> <span class="gmail-nu0" style="color:rgb(0,0,128)">0</span><span class="gmail-br0" style="color:rgb(0,128,0)">)</span> <span class="gmail-sy1" style="color:rgb(0,0,128)"><<</span> v3<span class="gmail-br0" style="color:rgb(0,128,0)">[</span>i<span class="gmail-br0" style="color:rgb(0,128,0)">]</span> <span class="gmail-sy1" style="color:rgb(0,0,128)"><<</span> <span class="gmail-st0" style="color:rgb(0,128,0)">'<span class="es1" style="font-weight:bold">\n</span>'</span><span class="gmail-sy4" style="color:rgb(0,128,128)">;</span>
    <span class="gmail-br0" style="color:rgb(0,128,0)">}</span>
<span class="gmail-br0" style="color:rgb(0,128,0)">}</span></pre><div><span style="background-color:rgb(249,249,249);color:rgb(0,0,0);font-size:12.8px"></span><br></div><div>It failed with the following errors:</div><div>    Error: no member named 'make_unique' in namespace 'std'</div><div>       std::unique_ptr<Vec3> v1 = std::make_unique<Vec3>();</div><div>    ... ...</div><div><br></div><div>Any idea and suggestion about what is going on? or have I missed something? The command I used to compile the code above:</div><div>     $ clang++ a.cpp</div><div><br></div><div>2.  Comparing this llvm with my current gcc/8.2.0 on a project (openmp code running 1 thread), it showed that llvm is almost twice as slow as gcc (both compile with -O3) on my IBM power8 machine. Is it suppose to be with such slower performance than gcc? </div><div><br></div><div>Thank you very much for any advice!</div><div><br></div><div>Best Regards,</div><div>Shelton </div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div> </div><div><br></div><div><br></div><div><br></div></div>