<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On 1 August 2013 10:19, Dan Gohman <span dir="ltr"><<a href="mailto:dan433584@gmail.com" target="_blank">dan433584@gmail.com</a>></span> wrote:<br><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">Hi Eli,<div><br></div><div>Recently, I proposed some changes to LLVM to do more lowering of illegal types (like i128 or i17) and other things within the LLVM IR layer, and the proposal was roundly rejected by the LLVM community:</div>

<div><br></div><div><a href="http://lists.cs.uiuc.edu/pipermail/llvmdev/2013-April/061567.html" target="_blank">http://lists.cs.uiuc.edu/pipermail/llvmdev/2013-April/061567.html</a><br></div><div><br></div><div>PNaCl is essentially doing what my proposal described. How do you expect to reconcile the community's desire to avoid doing lowering on LLVM IR with PNaCl's design that is built on doing lowering on LLVM IR?</div>
</div></blockquote><div><br></div><div>I expect we'll have to continue maintaining our own integer lowering IR pass for PNaCl, unless upstream LLVM has a change of heart and decides to add an implementation of such an IR pass.<br>
<br>The pass isn't excessively complex so I don't think this will be a big burden, although it does only handle increasing the integer size (e.g. i17 -> i32), and not splitting integers up (i128 -> two i64s).  Having this pass certainly seems preferable to allowing arbitrary-sized integer types in the PNaCl ABI.<br>
<br>Here's the current implementation of the pass:<br><a href="http://git.chromium.org/gitweb/?p=native_client/pnacl-llvm.git;a=blob;f=lib/Transforms/NaCl/PromoteIntegers.cpp;h=017e4976f27d2557b67c3b563e3685d140517808;hb=b9657234ee8b1951db5977a8ffb55a2e5df6d76c">http://git.chromium.org/gitweb/?p=native_client/pnacl-llvm.git;a=blob;f=lib/Transforms/NaCl/PromoteIntegers.cpp;h=017e4976f27d2557b67c3b563e3685d140517808;hb=b9657234ee8b1951db5977a8ffb55a2e5df6d76c</a><br>
<br></div><div>For comparison, Emscripten does much the same thing.  It has its own integer legalisation pass, but it's implemented in Javascript rather than in C++.<br><br></div><div>Cheers,<br>Mark<br><br></div></div>
</div></div>