<div dir="ltr"><div class="gmail_extra" style>On Sat, Sep 21, 2013 at 4:56 PM, Anthony Ramine <span dir="ltr"><<a href="mailto:n.oxyde@gmail.com" target="_blank">n.oxyde@gmail.com</a>></span> wrote:<br></div><div class="gmail_extra">
<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<br>
I read in the installation guide [1] that it is recommended to use GCC 4.2 to build Erlang because CLang and LLVM cannot use jump tables.<br>
<br></blockquote><div><br></div><div style>At least in the version of the installation guide you linked to,</div><div style>it says nothing about jump tables being the reason for the</div><div style>recommendation. It says that the performance will be worse</div>
<div style>if GCC is not used, but it does not say why.</div><div style><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
There is two problems with this:<br>
<br>
- This is not consistent with what the configure scripts actually do: CLang 3 and later use jump tables when compiling Erlang [2].<br></blockquote><div><br></div><div style>Yes, it is consistent since the installation guide only talks about performance,</div>
<div style>not jump tables.</div><div style> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
- There is no reason to not use LLVM 2.7 and later for beam_emu.c because it does compile jump tables efficiently [3].<br>
<br></blockquote><div><br></div><div style>It does compile jump tables efficiently, but it does a worse job</div><div style>of register allocation, especially for huge function such as</div><div style>process_main() in beam_emu.c. That said, code generation</div>
<div style>has improved in each new version of clang, making it less</div><div style>important to use a "real" GCC.</div><div style><br></div><div style> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Unfortunately I have no idea how to fix this, as there is no way to get the LLVM version from any preprocessor macro [4]. Should we just remove the LLVM check from the test and let the snippet of code fail to compile [5]?<br>

<br></blockquote><div><br></div><div style>What is the problem you want to fix? Have you observed</div><div style>any situation where jump tables where not used when they</div><div style>should be?</div><div style><br></div>
<div style>The test is where to protect against an old broken version</div><div style>of llvm-gcc that did not handle jump tables correctly.</div><div style>It will also make sure that Erlang/OTP can be compiled</div><div style>
on systems where no compiler that supports jump tables</div><div style>can be found.</div><div style><br></div><div style>/Björn</div></div><div><br></div>-- <br>Björn Gustavsson, Erlang/OTP, Ericsson AB
</div></div>