<feed xmlns='http://www.w3.org/2005/Atom'>
<title>otp.git/lib/hipe/llvm, branch KennethL-patch-1</title>
<subtitle>Mirror of Erlang/OTP repository.
</subtitle>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/'/>
<entry>
<title>ErLLVM: Preserve precise BEAM tailcall semantics</title>
<updated>2018-01-19T15:05:52+00:00</updated>
<author>
<name>Magnus Lång</name>
<email>margnus1@telia.com</email>
</author>
<published>2018-01-19T15:05:52+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=970261b5384bd55abdcbf55bd4a75a3c26a0bda8'/>
<id>970261b5384bd55abdcbf55bd4a75a3c26a0bda8</id>
<content type='text'>
The BEAM compiler chooses not to perform tailcall optimisations for some
calls in tail position, for example to some built-in functions. However,
when the ErLLVM HiPE backend is used, LLVM may choose to perform
tailcall optimisation on these calls, breaking the expected semantics.

To preserve the precise semantics exhibited by BEAM, the 'notail'
marker, present in LLVM since version 3.8, is added to call instructions
that BEAM has not turned into tail calls, which inhibits LLVM from
performing tail-call optimisation in turn.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The BEAM compiler chooses not to perform tailcall optimisations for some
calls in tail position, for example to some built-in functions. However,
when the ErLLVM HiPE backend is used, LLVM may choose to perform
tailcall optimisation on these calls, breaking the expected semantics.

To preserve the precise semantics exhibited by BEAM, the 'notail'
marker, present in LLVM since version 3.8, is added to call instructions
that BEAM has not turned into tail calls, which inhibits LLVM from
performing tail-call optimisation in turn.
</pre>
</div>
</content>
</entry>
<entry>
<title>Update copyright year</title>
<updated>2017-05-04T13:42:21+00:00</updated>
<author>
<name>Raimo Niskanen</name>
<email>raimo@erlang.org</email>
</author>
<published>2017-05-04T13:42:21+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=83e20c62057ebc1d8064bf57b01be560cd244e1d'/>
<id>83e20c62057ebc1d8064bf57b01be560cd244e1d</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix ErLLVM in --enable-m32-build builds</title>
<updated>2017-03-30T20:38:16+00:00</updated>
<author>
<name>Magnus Lång</name>
<email>margnus1@telia.com</email>
</author>
<published>2017-03-30T10:01:53+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=d9a6b8d2f761f6c16fd0772b65a3c4b6169f3b64'/>
<id>d9a6b8d2f761f6c16fd0772b65a3c4b6169f3b64</id>
<content type='text'>
By having ErLLVM explicitly tell LLVM which architecture we're expecting
it to compile for we remove the risk of having LLVM generate amd64 code
for a x86 VM.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
By having ErLLVM explicitly tell LLVM which architecture we're expecting
it to compile for we remove the risk of having LLVM generate amd64 code
for a x86 VM.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge PR-1386 from kostis/hipe-const-alignment OTP-14302</title>
<updated>2017-03-27T15:05:11+00:00</updated>
<author>
<name>Sverker Eriksson</name>
<email>sverker@erlang.org</email>
</author>
<published>2017-03-27T15:05:11+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=173cc4865cf0183242904283ea68626b5900ff08'/>
<id>173cc4865cf0183242904283ea68626b5900ff08</id>
<content type='text'>
hipe: Fix alignment of byte-sized constants</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
hipe: Fix alignment of byte-sized constants</pre>
</div>
</content>
</entry>
<entry>
<title>Remove (now) unnecessary argument of pack_constants</title>
<updated>2017-03-23T08:57:45+00:00</updated>
<author>
<name>Kostis Sagonas</name>
<email>kostis@it.uu.se</email>
</author>
<published>2017-03-23T08:57:45+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=61027e62a901ec12cc27d3b08ad80dd47ccf2a3f'/>
<id>61027e62a901ec12cc27d3b08ad80dd47ccf2a3f</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>hipe_rtl_to_llvm: Cleanup</title>
<updated>2017-03-06T17:18:23+00:00</updated>
<author>
<name>Magnus Lång</name>
<email>margnus1@telia.com</email>
</author>
<published>2017-02-20T14:02:32+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=9e2d61fa511c714f9f8cd2e5c57edf408ecf05e6'/>
<id>9e2d61fa511c714f9f8cd2e5c57edf408ecf05e6</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>ErLLVM: Drop code printing assembly for LLVM &lt; 3.9</title>
<updated>2017-02-19T09:57:41+00:00</updated>
<author>
<name>Magnus Lång</name>
<email>margnus1@telia.com</email>
</author>
<published>2017-02-19T09:57:41+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=1aa3038dba459a61ac0dfcda016b323b6c74cf84'/>
<id>1aa3038dba459a61ac0dfcda016b323b6c74cf84</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Fixed typos in lib/hipe</title>
<updated>2017-02-14T09:32:52+00:00</updated>
<author>
<name>Andrew Dryga</name>
<email>andrew@dryga.com</email>
</author>
<published>2017-02-14T09:32:24+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=5d373def7b8069eda8b6d1d2babd713933c6f472'/>
<id>5d373def7b8069eda8b6d1d2babd713933c6f472</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>hipe_rtl: unify branch and alub</title>
<updated>2016-11-15T13:58:59+00:00</updated>
<author>
<name>Magnus Lång</name>
<email>margnus1@telia.com</email>
</author>
<published>2016-11-09T17:46:19+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=ca0fbe891d0f8278b4824d6b2c5db4cd01fcef5c'/>
<id>ca0fbe891d0f8278b4824d6b2c5db4cd01fcef5c</id>
<content type='text'>
branch and alub overlap in their use cases, but the backends rely on
knowing that the result is unused in their lowering of branch. By
extending alub so that the destination is optional, it can fully replace
branch.

This simplifies rtl by reducing code duplication and the number of
instructions.

Also, in the x86 and arm backends, we can now use 'test' and
{'tst','mvn','teq'} to lower some alubs without destinations. This is
particularly good for x86, as sequences such as 'is_boxed' type tests
now get shorter (both from not needing a mov to copy the variable, but
also from the fact that 'testb' encodes shorter than 'andq').
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
branch and alub overlap in their use cases, but the backends rely on
knowing that the result is unused in their lowering of branch. By
extending alub so that the destination is optional, it can fully replace
branch.

This simplifies rtl by reducing code duplication and the number of
instructions.

Also, in the x86 and arm backends, we can now use 'test' and
{'tst','mvn','teq'} to lower some alubs without destinations. This is
particularly good for x86, as sequences such as 'is_boxed' type tests
now get shorter (both from not needing a mov to copy the variable, but
also from the fact that 'testb' encodes shorter than 'andq').
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'maint'</title>
<updated>2016-11-10T13:53:08+00:00</updated>
<author>
<name>Sverker Eriksson</name>
<email>sverker@erlang.org</email>
</author>
<published>2016-11-10T13:53:08+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=75e26b4db46b147803dafab988fcfc8bc7827d4f'/>
<id>75e26b4db46b147803dafab988fcfc8bc7827d4f</id>
<content type='text'>
# Conflicts:
#	lib/hipe/llvm/hipe_rtl_to_llvm.erl
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
# Conflicts:
#	lib/hipe/llvm/hipe_rtl_to_llvm.erl
</pre>
</div>
</content>
</entry>
</feed>
