<feed xmlns='http://www.w3.org/2005/Atom'>
<title>otp.git/lib/hipe/ppc, 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>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: Add pseudo_spill_f?move instructions</title>
<updated>2017-03-16T19:49:42+00:00</updated>
<author>
<name>Magnus Lång</name>
<email>margnus1@telia.com</email>
</author>
<published>2017-03-16T14:30:00+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=c52b2cf226cb3f1bb1b16bee28d47785506adff3'/>
<id>c52b2cf226cb3f1bb1b16bee28d47785506adff3</id>
<content type='text'>
These pseudo instructions are added to all backends and allow spill slot
to spill slot move coalescing in a clean way.

They have regular move semantics, but contain an additional scratch
register to be used if both source and destination are spilled, and can
not be move coalesced.

Additionally, a register allocator callback
Target:is_spill_move(Instr, Context) is added which allows the spill
slot allocators to check for these instructions and try to coalesce the
spill slots the two temporaries are allocated to.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
These pseudo instructions are added to all backends and allow spill slot
to spill slot move coalescing in a clean way.

They have regular move semantics, but contain an additional scratch
register to be used if both source and destination are spilled, and can
not be move coalesced.

Additionally, a register allocator callback
Target:is_spill_move(Instr, Context) is added which allows the spill
slot allocators to check for these instructions and try to coalesce the
spill slots the two temporaries are allocated to.
</pre>
</div>
</content>
</entry>
<entry>
<title>hipe: Add branch prediction accessor ra callbacks</title>
<updated>2017-03-16T19:49:42+00:00</updated>
<author>
<name>Magnus Lång</name>
<email>margnus1@telia.com</email>
</author>
<published>2016-09-24T07:37:46+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=cc115ebc67a465233c7740efb42e0bc9584ad352'/>
<id>cc115ebc67a465233c7740efb42e0bc9584ad352</id>
<content type='text'>
Adds a new register allocator callback
Target:branch_preds(Instr, Context) which, for a control flow
instruction Instr, returns a list of tuples {Target, Probability} for
each label name Target that Instr may branch to. Probability is a float
between 0.0 and 1.0 and corresponds to the predicted probability that
control flow branches to the corresponding target. The probabilities may
sum to at most 1.0 (rounding errors aside). Note that a sum less than
1.0 is valid.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Adds a new register allocator callback
Target:branch_preds(Instr, Context) which, for a control flow
instruction Instr, returns a list of tuples {Target, Probability} for
each label name Target that Instr may branch to. Probability is a float
between 0.0 and 1.0 and corresponds to the predicted probability that
control flow branches to the corresponding target. The probabilities may
sum to at most 1.0 (rounding errors aside). Note that a sum less than
1.0 is valid.
</pre>
</div>
</content>
</entry>
<entry>
<title>hipe: Add basic range splitting ra callbacks</title>
<updated>2017-03-16T19:49:42+00:00</updated>
<author>
<name>Magnus Lång</name>
<email>margnus1@telia.com</email>
</author>
<published>2017-03-16T13:55:23+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=dbe626aa7beb0f04403f6782443f3a78d0f1fdb0'/>
<id>dbe626aa7beb0f04403f6782443f3a78d0f1fdb0</id>
<content type='text'>
In addition to the temporary name rewriting that hipe_regalloc_prepass
does, range splitters also need to be able to insert move instructions,
as well as inserting new basic blocks in the control flow graph. The
following four callbacks are added for that purpose:

 * Target:mk_move(Src, Dst, Context)
   Returns a move instruction from the temporary (not just register
   number) Src to Dst.
 * Target:mk_goto(Label, Context)
   Returns a unconditional control flow instruction that branches to the
   label with name Label.
 * Target:redirect_jmp(Instr, ToOld, ToNew, Context)
   Modifies the control flow instruction Instr so that any control flow
   that would go to a label with name ToOld instead goes to the label
   with name ToNew.
 * Target:new_label(Context)
   Returns a fresh label name that does not belong to any existing block
   in the current function, and is to be used to create a new basic
   block in the control flow graph by calling Target:update_bb/4 with
   this new name.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
In addition to the temporary name rewriting that hipe_regalloc_prepass
does, range splitters also need to be able to insert move instructions,
as well as inserting new basic blocks in the control flow graph. The
following four callbacks are added for that purpose:

 * Target:mk_move(Src, Dst, Context)
   Returns a move instruction from the temporary (not just register
   number) Src to Dst.
 * Target:mk_goto(Label, Context)
   Returns a unconditional control flow instruction that branches to the
   label with name Label.
 * Target:redirect_jmp(Instr, ToOld, ToNew, Context)
   Modifies the control flow instruction Instr so that any control flow
   that would go to a label with name ToOld instead goes to the label
   with name ToNew.
 * Target:new_label(Context)
   Returns a fresh label name that does not belong to any existing block
   in the current function, and is to be used to create a new basic
   block in the control flow graph by calling Target:update_bb/4 with
   this new name.
</pre>
</div>
</content>
</entry>
<entry>
<title>Correct copyright on remaining hipe files</title>
<updated>2016-11-23T15:36:23+00:00</updated>
<author>
<name>Richard Carlsson</name>
<email>richardc@klarna.com</email>
</author>
<published>2015-07-08T19:39:51+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=8b02979590d5a7b5f5ce8b4a0410abbf822ccf6d'/>
<id>8b02979590d5a7b5f5ce8b4a0410abbf822ccf6d</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>hipe_ppc: better rlwinm pp</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-10T11:20:55+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=8cf7ad0fd02d5fd4100e23e61e1caa56726a0494'/>
<id>8cf7ad0fd02d5fd4100e23e61e1caa56726a0494</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>hipe_ppc: move coalescing</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-10T11:20:21+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=5ae8d51f97600116f47f0160b4eac331acf5b7ca'/>
<id>5ae8d51f97600116f47f0160b4eac331acf5b7ca</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>hipe: Refactor ra callbacks to accept context arg</title>
<updated>2016-09-05T17:17:50+00:00</updated>
<author>
<name>Magnus Lång</name>
<email>margnus1@telia.com</email>
</author>
<published>2016-09-05T12:55:01+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=ea710644b198f7800f0daf2de0d152cf8e3e9bb3'/>
<id>ea710644b198f7800f0daf2de0d152cf8e3e9bb3</id>
<content type='text'>
This allows us to pass around the context data that
hipe_regalloc_prepass needs cleanly, without using process dictionary or
parameterised modules (like it was previous to this change).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This allows us to pass around the context data that
hipe_regalloc_prepass needs cleanly, without using process dictionary or
parameterised modules (like it was previous to this change).
</pre>
</div>
</content>
</entry>
</feed>
