Commit Graph

7963 Commits

Author SHA1 Message Date
Jakob Stoklund Olesen
0ada419fe7 Add entity lists.
Like a vector, but with a tiny footprint, and allocated from a pool so
all memory can be released very quickly.
2017-01-31 15:04:26 -08:00
Jakob Stoklund Olesen
16f4b4c7d5 Implement value affinities for register allocation.
An SSA value is usually biased towards a specific register class or a
stack slot, depending on the constraints of the instructions using it.

Represent this bias as an Affinity enum, and implement a merging
algorithm for updating an affinity to satisfy a new constraint.

Affinities will be computed as part of the liveness analysis. This is
not implemented yet.
2017-01-27 10:22:50 -08:00
Jakob Stoklund Olesen
3c4d54c4bd Implement value affinities for register allocation.
An SSA value is usually biased towards a specific register class or a
stack slot, depending on the constraints of the instructions using it.

Represent this bias as an Affinity enum, and implement a merging
algorithm for updating an affinity to satisfy a new constraint.

Affinities will be computed as part of the liveness analysis. This is
not implemented yet.
2017-01-27 10:22:50 -08:00
Andrea Canciani
fd3cd153ed Fix some typos in the documentation
These were found by the spellchecker.
2017-01-27 09:51:22 -08:00
Andrea Canciani
a395f01b3e Fix some typos in the documentation
These were found by the spellchecker.
2017-01-27 09:51:22 -08:00
Jakob Stoklund Olesen
c767f277fa Stop testing on nightly rust
The nightly compiler isn't able to compile rustfmt in 10 minutes. This causes Travis CI to terminate the build.

We keep testing on beta and stable.
2017-01-25 16:35:28 -08:00
Jakob Stoklund Olesen
7e54cdb4f5 Stop testing on nightly rust
The nightly compiler isn't able to compile rustfmt in 10 minutes. This causes Travis CI to terminate the build.

We keep testing on beta and stable.
2017-01-25 16:35:28 -08:00
Jakob Stoklund Olesen
38bb98cf39 Make sure we can find rustfmt. 2017-01-25 15:57:43 -08:00
Jakob Stoklund Olesen
0d3990c394 Make sure we can find rustfmt. 2017-01-25 15:57:43 -08:00
Jakob Stoklund Olesen
38aff37c1e Install rustfmt when running under Travis CI.
The built rustfmt should be cached.
2017-01-25 15:42:16 -08:00
Jakob Stoklund Olesen
6e33173fce Install rustfmt when running under Travis CI.
The built rustfmt should be cached.
2017-01-25 15:42:16 -08:00
Jakob Stoklund Olesen
eecbcf9844 Add pip files to the cache. 2017-01-25 15:35:58 -08:00
Jakob Stoklund Olesen
5b71ec922a Add pip files to the cache. 2017-01-25 15:35:58 -08:00
Jakob Stoklund Olesen
859cca081c Upgrade to rustfmt 0.7.1 2017-01-25 15:17:27 -08:00
Jakob Stoklund Olesen
c132b8c328 Upgrade to rustfmt 0.7.1 2017-01-25 15:17:27 -08:00
Jakob Stoklund Olesen
70957cc7ce Doesn't work with 12.02 LTS's Python 3.2.
Try switching to Trusty to get a newer Python 3.
2017-01-25 14:59:48 -08:00
Jakob Stoklund Olesen
188ffb9881 Doesn't work with 12.02 LTS's Python 3.2.
Try switching to Trusty to get a newer Python 3.
2017-01-25 14:59:48 -08:00
Jakob Stoklund Olesen
361d71a0ab The python3-pip package does not exist on Ubuntu 12.04 LTS.
Try to go via python3-setuptools instead.
2017-01-25 14:51:48 -08:00
Jakob Stoklund Olesen
f2b567b83f The python3-pip package does not exist on Ubuntu 12.04 LTS.
Try to go via python3-setuptools instead.
2017-01-25 14:51:48 -08:00
Jakob Stoklund Olesen
10c2f397a8 Pull in a python3 Ubuntu package for Travis CI.
Then use pip3 to install dependencies.
2017-01-25 14:45:41 -08:00
Jakob Stoklund Olesen
27e735b028 Pull in a python3 Ubuntu package for Travis CI.
Then use pip3 to install dependencies.
2017-01-25 14:45:41 -08:00
Jakob Stoklund Olesen
91a7922474 Use Python 3.6 in Travis builds 2017-01-25 14:32:52 -08:00
Jakob Stoklund Olesen
8635aedc20 Use Python 3.6 in Travis builds 2017-01-25 14:32:52 -08:00
Jakob Stoklund Olesen
4c5bca6b0d Install Python packages without Travis root user. 2017-01-25 14:26:28 -08:00
Jakob Stoklund Olesen
c111361e19 Install Python packages without Travis root user. 2017-01-25 14:26:28 -08:00
Jakob Stoklund Olesen
3bbe3f71cb Install mypy and flake8 in Travis environment. 2017-01-25 14:20:22 -08:00
Jakob Stoklund Olesen
42a0c27b24 Install mypy and flake8 in Travis environment. 2017-01-25 14:20:22 -08:00
Jakob Stoklund Olesen
4a0d8aaa3d Run Python checks from test-all.sh
The Python style enforcements are easy to miss otherwise.
2017-01-25 14:12:36 -08:00
Jakob Stoklund Olesen
2932d41f18 Run Python checks from test-all.sh
The Python style enforcements are easy to miss otherwise.
2017-01-25 14:12:36 -08:00
Jakob Stoklund Olesen
130c4acf51 Compute register class intersections.
Ensure that the set of register classes is closed under intersection.

Provide a RegClass::intersect() method which finds the register class
representing the intersection of two classes.

Generate a bit-mask of subclasses for each register class to be used by
the intersect() method.

Ensure that register classes are sorted topologically. This is also used
by the intersect() method.
2017-01-25 13:57:43 -08:00
Jakob Stoklund Olesen
672e4abd7e Compute register class intersections.
Ensure that the set of register classes is closed under intersection.

Provide a RegClass::intersect() method which finds the register class
representing the intersection of two classes.

Generate a bit-mask of subclasses for each register class to be used by
the intersect() method.

Ensure that register classes are sorted topologically. This is also used
by the intersect() method.
2017-01-25 13:57:43 -08:00
Jakob Stoklund Olesen
2390e3e3f0 Add operand register constraints.
Every encoding recipe must specify register constraints on input and
output values.

Generate recipe constraint tables along with the other encoding tables.
2017-01-25 13:35:18 -08:00
Jakob Stoklund Olesen
0394f35034 Add operand register constraints.
Every encoding recipe must specify register constraints on input and
output values.

Generate recipe constraint tables along with the other encoding tables.
2017-01-25 13:35:18 -08:00
Jakob Stoklund Olesen
3b83496edb Add an AllocatableSet for registers.
This set of available register units also manages register aliasing in
an efficient way.

Detect if the units in a register straddles mask words. The algorithm
for allocating multi-unit registers expect the whole register to be
inside a single mask word. We could handle this if necessary, but so far
no ISAs need it.
2017-01-23 12:43:32 -08:00
Jakob Stoklund Olesen
58dedb673a Add an AllocatableSet for registers.
This set of available register units also manages register aliasing in
an efficient way.

Detect if the units in a register straddles mask words. The algorithm
for allocating multi-unit registers expect the whole register to be
inside a single mask word. We could handle this if necessary, but so far
no ISAs need it.
2017-01-23 12:43:32 -08:00
Jakob Stoklund Olesen
1d21422032 Generate register class descriptors.
Add a mechanism for defining sub-classes of register classes.
2017-01-20 14:23:06 -08:00
Jakob Stoklund Olesen
ae926157c2 Generate register class descriptors.
Add a mechanism for defining sub-classes of register classes.
2017-01-20 14:23:06 -08:00
Jakob Stoklund Olesen
58c36f71e9 Fix flake8 style issue. 2017-01-20 10:33:45 -08:00
Jakob Stoklund Olesen
ac798c1aed Fix flake8 style issue. 2017-01-20 10:33:45 -08:00
Jakob Stoklund Olesen
5eba3db4e0 Remove EntityRef::wrap().
This has been superceded by PackedOption.
2017-01-20 09:35:57 -08:00
Jakob Stoklund Olesen
8f2ca7c471 Remove EntityRef::wrap().
This has been superceded by PackedOption.
2017-01-20 09:35:57 -08:00
Jakob Stoklund Olesen
2e19fa8e07 Remove NO_INST and the Default+Ord impls for Inst.
Clean up comments.

Add an assertion to check that PackedOption is working as designed.
2017-01-19 19:44:16 -08:00
Jakob Stoklund Olesen
1221d94272 Remove NO_INST and the Default+Ord impls for Inst.
Clean up comments.

Add an assertion to check that PackedOption is working as designed.
2017-01-19 19:44:16 -08:00
Jakob Stoklund Olesen
02bf84431b Use PackedOption<Inst> in the dominator tree.
Also rework the algorithm to be more robust against unreachable blocks.

- Add an is_reachable(ebb) method.
- Change idom(ebb) to just return an instruction.
- Make idom() return None for the entry block as well as unreachable
  blocks.
2017-01-19 19:44:16 -08:00
Jakob Stoklund Olesen
4aa5c313ea Use PackedOption<Inst> in the dominator tree.
Also rework the algorithm to be more robust against unreachable blocks.

- Add an is_reachable(ebb) method.
- Change idom(ebb) to just return an instruction.
- Make idom() return None for the entry block as well as unreachable
  blocks.
2017-01-19 19:44:16 -08:00
Jakob Stoklund Olesen
0d77b19708 Use PackedOption<Value> instead of NO_VALUE.
- Remove NO_VALUE and ExpandedValue::None.
- Remove the Default implelmentation for Value.
- InstructionData::second_result() returns an Option<Value>.
- InstructionData::second_result() returns a reference to the packed
  option.
2017-01-19 15:55:18 -08:00
Jakob Stoklund Olesen
2e6cf219e9 Use PackedOption<Value> instead of NO_VALUE.
- Remove NO_VALUE and ExpandedValue::None.
- Remove the Default implelmentation for Value.
- InstructionData::second_result() returns an Option<Value>.
- InstructionData::second_result() returns a reference to the packed
  option.
2017-01-19 15:55:18 -08:00
Jakob Stoklund Olesen
1389a51c7a Avoid using NO_INST in the parser.
This was only used for the comment rewrite mechanism, and we can just
predict the next allocated instruction number instead. See the other
uses of next_key() for gather_comments().
2017-01-19 14:49:55 -08:00
Jakob Stoklund Olesen
f2b9f62f24 Avoid using NO_INST in the parser.
This was only used for the comment rewrite mechanism, and we can just
predict the next allocated instruction number instead. See the other
uses of next_key() for gather_comments().
2017-01-19 14:49:55 -08:00
Jakob Stoklund Olesen
bdc0f53c91 Use PackedOption<Inst> in the Layout implementation.
This also revealed that the last_inst() method should return an Option.
2017-01-19 14:26:47 -08:00