<div dir="ltr">Ok :)<br><br>Re. <a href="http://lists.llvm.org/pipermail/llvm-dev/2017-August/116337.html">http://lists.llvm.org/pipermail/llvm-dev/2017-August/116337.html</a><div><br></div><div>- Given current status quo #1 would be less frustrating. It seems that everyone implements it actually on their own without using the LLVM provided bits and bobs -- now it's offering false hope but not really delivering...</div><div><br></div><div>- If wishes were horses #4 would lead to least duplicated effort across projects once it was in place... and if ponys were in the offering then ccc (and maybe fastcc) calling conventions that pass structs in accordance with the target ABI would be really nice. :) That seems to be another thing that every frontend that cares currently has to implement on their own.</div><div><br></div><div>- #2 and #3 seem like halfway houses. Fine spots if you're on your way to #4, but not much to write home about as final destinations.<br><br>Cheers,</div><div><br></div><div>  -- nikodemus<br><br><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Nov 6, 2017 at 6:58 PM, Reid Kleckner <span dir="ltr"><<a href="mailto:rnk@google.com" target="_blank">rnk@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Looks like the LLVM va_arg instruction is broken on 32-bit Windows, probably because we think i64 is aligned on the stack, when it is not.</div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="h5">On Sun, Nov 5, 2017 at 8:58 AM, Nikodemus Siivola via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div dir="ltr"><div><div><font face="monospace, monospace">target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n<wbr>8:16:32-a:0:32-S32"</font></div><div><font face="monospace, monospace">target triple = "i686-pc-windows-msvc"</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">declare void @llvm.va_start(i8**)</font></div><div><font face="monospace, monospace">declare void @llvm.va_end(i8**)</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">define i64 @foo(...) {</font></div><div><font face="monospace, monospace">    %va = alloca i8*, i32 16 ; 4 words should be enough?</font></div><div><font face="monospace, monospace">    call void @llvm.va_start(i8** %va)</font></div><div><font face="monospace, monospace">    %x = va_arg i8** %va, i64</font></div><div><font face="monospace, monospace">    call void @llvm.va_end(i8** %va)</font></div><div><font face="monospace, monospace">    ret i64 %x</font></div><div><font face="monospace, monospace">}</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">;; should return 123</font></div><div><font face="monospace, monospace">define i32 @main() {</font></div><div><font face="monospace, monospace">    %val0 = call i64(...) @foo(i64 123)</font></div><div><font face="monospace, monospace">    %res = trunc i64 %val0 to i32</font></div><div><font face="monospace, monospace">    ret i32 %res</font></div><div><font face="monospace, monospace">}</font></div></div><div><font face="monospace, monospace"><br></font><span style="font-family:arial,helvetica,sans-serif">Running this returns  mostly 0, but sometimes 123. <br></span><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"><div>$ while sleep 1; do lli bug.ll; echo $?; done</div><div>123</div><div>0</div><div>0</div><div>0</div><div>123</div><div>0</div><div>0</div><div><br></div></font></div><div><font face="arial, helvetica, sans-serif">Adding { alignstack=8 } to main makes it always return 123.<br><br></font></div><div><font face="arial, helvetica, sans-serif">Is this a bug or just a missing piece of documentation?</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">Cheers,</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">  -- nikodemus<br><br></font></div></div>
<br></div></div><span class="">______________________________<wbr>_________________<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="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
<br></span></blockquote></div><br></div>
</blockquote></div><br></div>