<div dir="ltr">This code line of code might not work correctly<div><br></div><div> ArrayRef<uint64_t> ar[2] = {a,b};  <br></div><div><br></div><div>The initializer_list goes out of scope right after and the ArrayRef will be left dangling.</div><div><br></div><div>Just use a regular array</div><div><br></div><div>uint64_t ar[2] = {a,b};</div><div>APInt ai(128,ar);  <br></div><div><br></div><div>The array should be implicitly converted to an ArrayRef at the call site.</div><div><br clear="all"><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">~Craig</div></div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Apr 10, 2019 at 5:57 PM Peter McKinna via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Hi Tim,<div><br></div><div>Thanks for the hint. </div><div><br></div><div>I tried the following, (it's a C interface since that's what I need it for) where a and b are</div><div>the top and bottom halves of the 128 bit value, </div><div><br></div><div><div>LLVMValueRef TestConst(LLVMContextRef C, uint64_t a, uint64_t b) {</div><div>  Type *ty = Type::getFP128Ty(*unwrap(C));</div><div>  ArrayRef<uint64_t> ar[2] = {a,b};</div><div>  </div><div>  APInt ai(128,*ar);</div><div>  APFloat quad(APFloat::IEEEquad(), ai);</div><div>  return wrap(ConstantFP::get(ty,quad));</div><div>}</div></div><div><br></div><div>but for 1.0e0 it returns zero</div><div><div>  store fp128 0xL00000000000000000000000000000000, fp128* %e, align 16</div><div><br></div><div>and for 1.23e0 returns this, which is wrong. (that repeating 147AE is a bit weird) </div><div>  store fp128 0xLE147AE147AE147AE0000000000000000, fp128* %e, align 16<br></div><div><br></div><div>so I'm obviously doing something wrong.</div><div><br></div><div>Regards Peter</div><div>  <br></div><div><br></div></div></div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Apr 10, 2019 at 9:44 PM Tim Northover <<a href="mailto:t.p.northover@gmail.com" target="_blank">t.p.northover@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi Peter,<br>
<br>
On Wed, 10 Apr 2019 at 08:01, Peter McKinna via llvm-dev<br>
<<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<br>
>   Just wondering if it's possible to construct a 128 bit quad precision floating point<br>
> constant without converting the value back to a string.<br>
<br>
It looks like the constructor that takes an APInt treats it as a<br>
bag-of-bits representation according to IEEE float. It eventually ends<br>
up at <a href="https://llvm.org/docs/doxygen/APFloat_8cpp_source.html#l03098" rel="noreferrer" target="_blank">https://llvm.org/docs/doxygen/APFloat_8cpp_source.html#l03098</a> as<br>
far as I can tell.<br>
<br>
Cheers.<br>
<br>
Tim.<br>
</blockquote></div>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>