Benjamin Bouvier
e3e66acfb1
[meta] Generate legalizations in the Rust crate;
2019-04-25 11:44:56 +02:00
Benjamin Bouvier
1f21349c4b
[meta] Add CPU modes to the meta crate;
2019-04-25 11:44:56 +02:00
Benjamin Bouvier
d00e42ede3
[meta] Port shared and x86 legalizations to the Rust crate;
2019-04-25 11:44:56 +02:00
Benjamin Bouvier
494f3abf1d
[meta] Add type inference, transforms and AST helpers for legalization;
2019-04-25 11:44:56 +02:00
Benjamin Bouvier
dfb27c3402
[meta] Make TypeVar shareable and mutable;
...
... since its type set can change over time during type inference. Use a
Rc<RefCell> to achieve this.
2019-04-25 11:44:56 +02:00
Benjamin Bouvier
b85146e945
[meta] Add helper methods and tests to TypeSet;
2019-04-25 11:44:56 +02:00
Benjamin Bouvier
e71ae7b02f
[meta] Add instruction predicates;
2019-04-25 11:44:56 +02:00
Benjamin Bouvier
d92778a19e
[meta] Add Instruction helpers and change its representation to make it easily copiable;
...
- adds helpers used by other parts of the code
- allows cheap copies by having Instruction be a lightweight ref-cloned
wrapper of the actual instruction's content.
2019-04-25 11:44:56 +02:00
Benjamin Bouvier
6acf9be540
Refactor simple-preopt to make it slightly simpler to read;
...
- don't use camel case but snake casing;
- longer variable names;
- more whitespace;
- add/wrap comments;
2019-04-24 14:14:44 +02:00
Benjamin Bouvier
00429ebe99
[meta] Fix outdented_line in srcgen;
2019-04-24 10:47:26 +02:00
Benjamin Bouvier
d2d2cdcd78
[meta] Rejigger comments in cdsl/formats;
2019-04-24 10:47:26 +02:00
Benjamin Bouvier
faa9b25691
[meta-python] Simplify Var ctor since it never is given a typevar argument;
2019-04-24 10:47:26 +02:00
Benjamin Bouvier
b3a950b589
[meta] Fix condition codes in immediates;
2019-04-24 10:47:26 +02:00
Benjamin Bouvier
274415d5ee
Fixes #738 : Check ebbs used in jump tables in the verifier;
2019-04-17 15:37:27 +02:00
Tyler McMullen
3b1583ebb7
Style changes in response to code review.
2019-04-17 13:15:41 +02:00
Tyler McMullen
4d427d7c71
Remove old commented out code
2019-04-17 13:15:41 +02:00
Tyler McMullen
5596b5fadc
Address code review comments, simplifying some bits of branch_opt.
2019-04-17 13:15:41 +02:00
Tyler McMullen
402d0d9c83
Add comments to branch folding and reordering functions in simple_preopt.
2019-04-17 13:15:41 +02:00
Tyler McMullen
fd6940baaf
Switch branch order opt from brif/brff to br_icmp, as that's what frontends should produce.
2019-04-17 13:15:41 +02:00
Tyler McMullen
571b87414f
Switch ifcmp+brif folding to be icmp+brz folding, which is what frontends actually produce.
2019-04-17 13:15:41 +02:00
Tyler McMullen
67cc5aafec
Refactoring of branch ordering and zero-check optimization based on PR feedback.
2019-04-17 13:15:41 +02:00
Tyler McMullen
947130be81
Add branch order optimization to simple_preopt to encourage fallthroughs.
2019-04-17 13:15:41 +02:00
Tyler McMullen
57f087c9da
Add note to simple_preopt differentiating its use from the preopt crate.
2019-04-17 13:15:41 +02:00
Tyler McMullen
fc6876c68e
Fold 'ifcmp_imm' + 'brif' where imm is zero and cond is 'eq' or 'ne', into 'brz' or 'brnz'.
2019-04-17 13:15:41 +02:00
Benjamin Bouvier
9b156fd9bb
[meta] Use the Rust crate for opcodes/inst_builder code generation;
2019-04-09 15:42:28 +02:00
Benjamin Bouvier
b5595aadd2
[meta] Generate opcodes.rs/inst_builder.rs with the Rust crate;
2019-04-09 15:42:28 +02:00
Lars T Hansen
aa926e9097
Allow readonly nontrapping loads to be hoisted by licm ( #727 )
2019-04-09 11:40:23 +02:00
carolinecullen
0166d6507a
Adding comment about copying RiscV abi file into ARM32.
2019-04-08 17:06:08 -07:00
carolinecullen
8ab7170a07
Updated comments.
2019-04-08 17:06:08 -07:00
carolinecullen
72bc035d70
Beginnings of arm32 backend.
2019-04-08 17:06:08 -07:00
Philip Craig
b74b49f7c6
Fix x86-64 encoding of uextend.i64.i8
...
The non-REX encoding of movzbl requires one of the ABCD registers as input.
2019-04-08 05:50:59 -07:00
Benjamin Bouvier
84fede890c
[meta] Optimize the sequence table to use whole table suffix prefixing;
2019-04-05 11:59:09 -07:00
Benjamin Bouvier
e6249b541d
Update target-lexicon to 0.4.0;
2019-04-05 08:23:42 -07:00
Benjamin Bouvier
cd8a42e01f
Fix #686 : Allow code shrink in relaxation if the shrinking pass hasn't been run;
...
Also:
- make sure to apply diversions when determining offsets for code
relaxation.
- select the smallest encoding when selecting a relaxed branch
instruction.
2019-04-03 11:42:38 +02:00
Benjamin Bouvier
2dd1552369
[meta] Make Typevar::type_set private, and add a second getter to read it directly;
...
There might be a silent bug in the Python module which directly reads
from this type_set field; in particular, it does so when reading all
controlling type variables, which all seem to be free variables (i.e. no
parent typevar). So imitate this behavior here, until we're sure there
are no other meta generators that rely on this.
2019-04-02 17:30:50 +02:00
Benjamin Bouvier
5edee84f67
[meta] Port TypeVar's test_functions to Rust;
...
Fixes two issues:
- name of derived type variables wasn't correct. (This is used during
code generation.)
- the TypeVar::derived() function wasn't creating the correct type set
(and would instead propagate the parent's one).
2019-04-02 17:30:50 +02:00
Benjamin Bouvier
dd63ebfb68
[meta] Port typeset_singleton tests to the Rust crate;
2019-04-02 17:30:50 +02:00
Benjamin Bouvier
ac37cb9bf5
[meta] Add test for {half/double}_{vector/width} and as_bool;
2019-04-02 17:30:50 +02:00
Benjamin Bouvier
6053201128
[meta] Move the TypeSet building out of the TypeVar builder so as to test it;
2019-04-02 17:30:50 +02:00
Benjamin Bouvier
3e7543df79
[meta] Introduce the num_set! macro to create NumSet as vec! does;
2019-04-02 17:30:50 +02:00
Benjamin Bouvier
86430abc4c
[meta] Port all the Cranelift instructions to the meta crate;
2019-03-28 14:13:29 +01:00
Benjamin Bouvier
3c31eac48c
[meta] Port Instruction/InstructionGroup to the Rust meta crate;
2019-03-28 14:13:29 +01:00
Benjamin Bouvier
d59bef1902
[meta] Port Formats and Operands to the Rust crate;
2019-03-27 14:43:27 +01:00
Benjamin Bouvier
146e0bd2f5
[meta] Port Typevar to the Rust crate;
2019-03-27 14:43:27 +01:00
Benjamin Bouvier
f3f449b45b
[meta] Tweak generation of settings/registers;
2019-03-27 14:43:27 +01:00
Benjamin Bouvier
393b88af6e
[meta] Implement UniqueTable in the Rust crate;
...
... and also rename the previously-named UniqueTable to UniqueSeqTable,
which is the name used in the Python code.
2019-03-27 14:43:27 +01:00
Benjamin Bouvier
72b0d26ee9
[meta] Add features to srcgen;
...
- Adds a compiler warning when the fmtln! macro isn't correctly used.
- Allow to add an empty line.
- Make the output of generated matches more beautiful, by having one
struct per line on the clause.
- Add a method to add match with doesn't read any data from fields.
- Make sure that the placeholder clause of a match is put at the end.
2019-03-27 14:43:27 +01:00
Benjamin Bouvier
68bda3a42d
[meta-python] Fix typos;
2019-03-27 14:43:27 +01:00
Lars T Hansen
141ccb9e9d
Add a --disasm option to clif-util wasm and compile ( #713 )
...
- Both the `wasm` and `compile` commands get this new subcommand, and it defaults to false. This means that test runs with `wasm` can request disassembly (the main reason I am doing this) while test runs with `compile` now must request it, this changes current behavior.
- Switch to using context.compile_and_emit directly, and make the reloc and trap printers just accumulate output, not print it. This allows us to factor the printing code into the disasm module.
2019-03-27 12:57:13 +01:00
Dan Gohman
82c6867155
Work around Cargo #4866 . ( #699 )
...
* Work around Cargo build #4866 .
This fixes #697 .
* Rename "cargo4866workaround" to "core" per review feedback.
2019-03-26 11:28:39 -07:00