Ecosyste.ms: OpenCollective

An open API service for software projects hosted on Open Collective.

github.com/swiftwasm/wasmtime

Standalone JIT-style runtime for WebAsssembly, using Cranelift
https://github.com/swiftwasm/wasmtime

Add typedefs for the common entity maps.

The various entity maps in a function end up being referenced in
multiple places, so create type...

bae37e523f059637bbb716bbf0412942c1d56f0f authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Add a stack frame manager.

Use a new StackSlots struct to keep track of a function's stack slots
instead of just an entity ...

a4cc66cb4a83229d697af5fc27a93048d755d87e authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Track stack slot kinds.

Add a StackSlotKind enumeration to help keep track of the different
kinds of stack slots support...

91d919c11a15dc00de2ce133357f5094f089ff88 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Make register copies for incompatible operands.

An instruction may have fixed operand constraints that make it
impossibly to use a single regist...

66bc0a9c8b8151ec65d9ea1fec862cca5ec9a889 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Add RISC-V encodings for call_indirect.

9eb0778f9b972975dee66d5b23cb61bfa0ee6122 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Add RISC-V encodings for copy instructions.

66af915eed294f18046f7184728526f7b2335e9d authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Always call reassign_in for register ABI arguments.

Even if an argument is already in the correct register, make sure that
we detect conflicts by re...

8955b136207d0dd7a593ec7f3364871fbea37226 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Update docopt dependency to 0.8.0.

This breaks our depending on two different versions of the regex
library.

This updated docopt u...

e7c6efa31e3e8e76568cc533f7998956228bd404 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Spill values live across calls.

Calls clobber many registers, so spill everything that is live across a
call for now.

In the fu...

f2f162f37ed71b94e254bcf08d069c9448571d41 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Extract spill insertion into a reload::insert_spill function.

Make sure that spill instructions are generated in the same way
everywhere, including adding enc...

5a23f975fccaadef1cd132fc65dc750e3d37e19a authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Handle ABI arguments correctly in the reload pass.

Values passed as arguments to calls and return instructions may also be
reload candidates.

6381da948fb37f2c8202fe60d576d6ff5279a46f authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Basic spilling implementation.

Add a spilling pass which lowers register pressure by assigning SSA
values to the stack. Importa...

36f189810e663bb1e70c1549bf7017e47806642a authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Track transient register counts in Pressure.

The register pressure tracker now has to separate register counts: base
and transient.

The tran...

96fe287f67e215bd68a6f6aae2611bf20b53fd1c authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Add RISC-V encodings for spill and fill.

Add a Stack() class for specifying operand constraints for values on the
stack.

Add encoding re...

00551dbc5fa5071c0298efe099a753e067ee77de authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Remove the ebb_dominates function.

This is now subsumed by the generic 'dominates' function.

2875c6ddf95e800c5af1dc0c66c1c76027c54852 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Generalize DominatorTree::dominates.

This is now a generic function that can test arbitrary combinations of
instructions and EBBs for...

d2dc7232c211654c41ea571ca7cad4f84da61393 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Generalize rpo_cmp to handle all program points.

When comparing instructions in the same EBB, behave like the RPO visits
instructions in program ...

9090bbda245e99fd0db70986af26683517fd05e1 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Binary function names (#91)

* Function names should start with %

* Create FunctionName from string

* Implement display...

8b484b1c77d7e267ff1694905fcba252232d378c authored over 7 years ago by Aleksey Kuznetsov <[email protected]>
Improved DFG API (#95)

* Improved DFG API with swap_remove_ebb_args and append_inst_arg
* Implemented EntityList::swap...

731278aad86d4ee4fddc2f54f0e3ec1fb32be5a3 authored over 7 years ago by Denis Merigoux <[email protected]>
LICM pass: small changes after code review (#94)

dacc4003a3951d43cf3927e440298da8617289a4 authored over 7 years ago by Denis Merigoux <[email protected]>
Remove cfg.postorder_ebbs().

This is now unused. Use domtree.cfg_postorder() instead.

Also remove the dead cfg.ebbs().

eec980618b7c0acb946440c04fe2750ea0eaafeb authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Stop using cfg.postorder_ebbs().

Switch to the new domtree.cfg_postorder() which returns a reference to a
pre-computed post-order...

94872cc971fb6990dd121c5d2c4b31869e5caa44 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Add a minimalistic reload pass.

The reload pass inserts spill and fill instructions as needed so
instructions that operate on re...

d94bd8c236c0a05733d23d2093af67a9a4c4cdb5 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Implement a conversion from ValueDef into ProgramPoint.

A ValueDef is really no more than a program point plus an
argument/result number.

ac1db6e3c97ad81d89d09b76db6c8a81ba01d843 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Add Liveness methods for updating live ranges.

The create_dead() methods can create a live range for a new value, and
extend_local() can extend...

f545c97cb0b553391f8dc08f91df64f26237854a authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
LICM pass (#87)

* LICM pass

* Uses loop analysis to detect loop tree
* For each loop (starting with the inne...

9b06f760573f836c2c7eba8df931fe30fda42fa4 authored over 7 years ago by Denis Merigoux <[email protected]>
Add a dfg::replace_result() method.

This is analogous to replace_ebb_arg(). It replaces an instruction
result value with a new value...

2d8588d72a436b9ac82234e16da5c0c09f35bfe7 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Updated the regex crate to 0.2.2 as per issue #88 (#90)

* Updated the regex crate to 0.2.2 as per issue #88
* Added potential fix for cryptic CI error....

90958729fa607542195dd5b71c355cdb5c9016db authored over 7 years ago by Igor <[email protected]>
Move lib/filecheck/src/tests directory to lib/filecheck

920e32ed49bc9e5209c7b69f89657ea163572846 authored over 7 years ago by Aleksey Kuznetsov <[email protected]>
Run rustfmt on lib/filecheck/tests/basic.rs

80d92ccbb5cdd8c98073e889a7bd47d87a9658b7 authored over 7 years ago by Aleksey Kuznetsov <[email protected]>
Compute a CFG post-order when building the dominator tree.

The DominatorTree has existing DomNodes per EBB that can be used in lieu
of expensive HastSets f...

22ad3c0bf8e8f0f64470e471c19f1b8c0ec2c799 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Loop analysis of the IL

* Implemented in two passes
* First pass discovers the loops headers (they dominate one of their...

7d6113e479210e3985372b90e346983008367e8a authored over 7 years ago by Denis Merigoux <[email protected]>
Remove unnecessary cloned() in reader::lexer::trailing_digits()

cb35869803728d0f8ed9f8dbdb8844e233b146ae authored over 7 years ago by Aleksey Kuznetsov <[email protected]>
Fix more GVN issues (#83)

* Fix GVN skipping the instruction after a deleted instruction.

* Teach GVN to resolve aliase...

059845880c18839e6c5519aadeae50f3ec73662f authored over 7 years ago by Dan Gohman <[email protected]>
Start a very simple GVN pass (#79)

* Skeleton simple_gvn pass.
* Basic testing infrastructure for simple-gvn.
* Add can_load and ...

dc809628f4c00ddbfad27a98d578273e2b46406f authored over 7 years ago by Dan Gohman <[email protected]>
Add a register pressure tracker.

The spilling and reload passes need to ensure that the set of live
ranges with register affinity...

0c7b2c7b68873de17a0c767db2f8facf49e28d43 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Implement ExactSizeIterator for RegSetIter.

The set of available registers in a register class is known ahead of
time. It can be computed wi...

06afd3b77b07fbcd6e72444ca30674e5309c7da8 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Add a RegClassMask typedef and a MAX_TOPRCS constant.

Avoid spreading u32 as a bitmask of register classes throughout the
code.

Enforce the limit of ...

66d2c0a95af604425575f8bbac317d5fe2856e79 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Compute top-level register classes for each register bank.

A top-level register class is one that has no sub-classes. It is
possible to have multiple top-l...

09ac27a7979ff41cd74f690f0aa21721ff4d7386 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Add a register bank index to RegClassData.

This makes it possible to find the register bank that contains a
register class.

ca6eddaf88cabdb2a2993d1392df25ece7b49155 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Update rustfmt to 0.8.4; (#81)

a2fd9cf0cc0579b23ccecfa6cc2023fa84388e3b authored over 7 years ago by Benjamin Bouvier <[email protected]>
Generate Intel encoding recipes on demand.

Cretonne's encoding recipes need to have a fixed size so we can compute
accurate branch destinat...

0694384728afedd37ea7dfe2494af37771b99b0f authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Encodings for load/store instructions.

We don't support the full set of Intel addressing modes yet. So far we
have:

- Register indirec...

9629867d0cb45c41ceb52b53badd51631c9eb48f authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Add subtract and logical instruction encodings to Intel-32.

Also add versions with 8-bit and 32-bit immediate operands.

c998df6274ea7b94037719e14c3f7c92e1dcc1bb authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Return the first applicable encoding from general_encoding().

We'll arrange encoding lists such that the first suitable encoding is
the best choice for the le...

3aaa8b2f91fedfe919c81a7a6bc029f42231a8f6 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Implement reloc_names() for all targets.

This gets rid of the last TargetIsa method with a default
implementation.

4158c4e09c18d76b5bd72d31366e681b7add68cd authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Add fixed constraints for ABI arguments and return values.

We can start adding some real test cases for the move resolver now.

663b50efccfe4e5032ae897e39d0e40ec60fa861 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Solver variables keep track of where they came from.

The register constraint solver has two kinds of variables:

1. Live values that were already in ...

f8e466d60edb11ed57cdeef7737dc673b4942d75 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Implement a move resolver for the register constraint solver.

After finding a register solution, it need to be executed as a sequence
of regmove instructions....

51fc887a5ab309cd25318cc554d753032a38b360 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Simplify the dead EBB argument tracking.

It is not necessary to to a second pass over the live values to update
the set of available regi...

4dda3e02f189ee455890df1443a301ebc15e1eaf authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Always create live ranges for dead EBB arguments.

The live value tracker expects them to be there.

We may eventually delete dead arguments from i...

9f743cf3a52d54c11b36769e881ccf7790e22de3 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Keep dead EBB arguments around in LiveValueTracker::ebb_top().

Provide a drop_dead_args() function which deletes them instead.

We still need to assign a regis...

d03a21746680d325b75a89edb48b3ab6790783ad authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Propagate a few more LiveRange properties to LiveValue.

The live value tracker goes through the trouble of looking up the live
range for each value it t...

9d4e23d8940f85e07f1dac466b5d8c7f0be2f7a0 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Check for unknown instruction attributes. (#80)

* Check for unknown instruction attributes.

* Avoid has_key, at flake8's advice.

* Use Ass...

5ff2257b12056aa44f99296ee0f4bbdb1a2de183 authored over 7 years ago by Dan Gohman <[email protected]>
Fix rustfmt diffs.

526feb161a682ad681d395a0bf34d8ba4be5a379 authored over 7 years ago by Dan Gohman <[email protected]>
Use write! in utility code, rather than calling write_function directly.

c571975a5c95d61fa61a91e5bcd1c3b051d16f1d authored over 7 years ago by Dan Gohman <[email protected]>
Add a register diversion tracker.

Keep track of the current location of register values as regmove
instructions are encountered th...

0dbdd90af7c7f1e485fc0dd3858dec7340172124 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Use a constraint solver for register coloring.

Most of the time, register coloring is almost trivial: just pick
available registers for the val...

be047ba5c4e39756814cb9b403c70ec911efd372 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Add encodings for Intel dynamic shift instructions.

These instructions have a fixed register constraint; the shift amount is
passed in CL.

Add meta...

cdb3a71dd11eed2f533d52408046ff5af5c625f7 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Make `srem` have the sign of the dividend.

This is how remainder is defined in C (as of C99), C++ (as of C++11), Rust,
and WebAssembly, for...

db9f64d2f3ddfdced770f6a29fe145c289b68dab authored over 7 years ago by Dan Gohman <[email protected]>
Add the very basics of Intel 32-bit instruction encodings.

Tabulate the Intel opcode representations and implement an OP() function
which computes the enco...

5bdb61a5f1f1996daedb81965b9069970ef10743 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Add constraint summaries to RecipeConstraints.

Most instructions don't have any fixed register constraints. Add boolean
summaries that can be u...

3d2fdec1afe44999136c6eedcec566a3923765c4 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Add support for tied operand constraints.

The register constraint for an output operand can be specified as an
integer indicating the inpu...

b3b15f9c321acd111f345d4522ee80203fa3260a authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Also return live-through values from process_inst().

The coloring algorithm will need to look at the live-through values to
check if they interfere w...

fedc834ecdd5262b28c917f761c16974d8456eb9 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Add a few register utilities.

d1d6c626d9cfd3444166271e3de339dc1e7943ab authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Add a regs_overlap function to the isa module.

Test it with the arm32 register banks which have the most interesting
properties. Most other reg...

9bbeaeda24aeba323da1170606c4f4296030ff7b authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Run mypy in python 3 mode.

This still picks up the 2.7 type annotations in comments.

Fix the compute_quadratic signature t...

673279068fb7b0e94d840fcc8bd003e5fd06a997 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Ignore .mypy_cache

A recent mypy update started writing the .mypy_cache directory which we
don't want under version...

7a1ba057e42d045a39a156b364620472d9830fa2 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Add a regmove instruction.

This will be used to locally change the register locations of values in
order to satisfy instruc...

8cd67f08a94079cebb9d749c8dbe4b3021fff6bd authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Extract the topological ordering into a module.

Multiple passes will need to iterate over EBBs in a
dominator-topological order. Move that funct...

6fe4aa2f8d627693a5046ce026fd997e9fa3bd8e authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Install rustfmt as a separate Travis install step.

- Add a check-rustfmt.sh script which checks if the right version of
rustfmt is installed.
- R...

a29ea664e2a706b2486da672094572844edf3890 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Upgrade to rustfmt 0.8.3.

15606fa7354d2ba806fa255873ff946c7ed9a31a authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Upgrade to Rust 1.17.

- Remove some uses of 'static in const and static globals that are no
longer needed.
- Use the...

962a3a6a5e56c6a152fd3895a950daa94ea333a3 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Color entry block arguments using the function signature.

The arguments to the entry block arrive in registers determined by the
ABI. This information is ...

4c8eb85f3917539a08f6f16470c83e75c9605e4a authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Add a TargetIsa::allocatable_registers() method.

This gives the target ISA a chance to reserve registers like the stack
pointer or hard-wired 0 r...

bb8ae9a4fb9d4dc49e651966eccb2033bfbded86 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Add an enable_e setting for the RV32E instruction set.

This limited RISC-V version only has registers %x0 - %x15.

Make sure the ABI lowering code does...

305de3e73bbd5de17e4ce66a930b3f86f3bfc4e4 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Rename Affinity::Any to Affinity::None.

This value affinity doesn't mean "whatever", it means that the value
does not interact with any ...

1e51f97108e8fd7723ad59d37e7327c913c1f1e7 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Add an Affinity::display() method.

Make it possible to display affinities given a RegInfo reference.

2f866171ca7720ae9ac801652c82808d86c6c4f7 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Assign an affinity to function argument values.

Use the argument types from the function signature to initialize the
affinity of register and st...

93db01d38aa2029cafd5e5ccda109cc05eca4282 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Add a TargetIsa::regclass_for_abi_type() function.

The legalize_signature() function will return ArgumentLoc::Reg arguments
that contain a register...

cd99eee86b850ce2595908aaba77ac07f7a9016f authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Add an EntityMap::get_or_default() method.

This covers a common pattern for secondary entity maps: Get the value in
the map or the default ...

c36aedfd03a5c5491364d814512302acf1569e2d authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Verify that the instruction encoding matches what the ISA would encode.

Fixes #69

100666e3004d6c3c6fbc3bdecac19bda27d31ea2 authored over 7 years ago by Eric Anholt <[email protected]>
Make sure that encodings has entries for all instructions after legalize().

If we generated new instructions as part of legalize, and the new
instructions failed to legaliz...

a332c3d024c02b961ea975dcebcb99335583bc52 authored over 7 years ago by Eric Anholt <[email protected]>
Make sure we double back after legalizing an instruction.

The other legalizer cases have a continue after setting the position
to double back, while this ...

b13cd2321c56483a793211cac7da644802784fc0 authored over 7 years ago by Eric Anholt <[email protected]>
Update a comment for the move of display_enc().

551a91178acc515d321cd802885e834185d44e47 authored over 7 years ago by Eric Anholt <[email protected]>
Run the post-regalloc verification inside the regalloc context.

This means that we can verify the basics with verify_context before
moving on to verifying the l...

5d9e703e4f6cebed96ef16c77a5004d167a170eb authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Add a liveness verifier.

The liveness verifier will check that the live ranges are consistent
with the function. It runs ...

85f277a2fbf0c5143804d2012f8a2158846f551a authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Run the verifier in the Context methods when it is enabled.

The test drivers can stop calling comp_ctx.verify because legalize() and
regalloc() do it themse...

225ed39fbdabdd9cad63e37852e1f7e85231aaa8 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Verifier results are always void.

No need for a type parameter.

b6105ab79bf07a16e709b941aab32300a5fc6b6e authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Add global CtonResult and CtonError types.

These are for reporting the overall result of compiling a function.

83381dadc5188de41e69d14baafafcaf680a64fb authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Add an enable_verifier setting.

This is off by default, but enabled by the parser when reading a textual
IL file. Test files can...

4cf3babda0144807ef5b228c4220f0a668825d2d authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Move the verifier into a verifier/mod.rs file.

Make room for verifier sub-modules in separate files.

c621770507d86edf00efa437a319722c7da2cfb3 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Implement binary emission of RISC-V return instructions.

The return address is now always supplied in %x1, so the return address
predictor will recognize...

9c23196049bf0f48022e048f1b6f05724df27a32 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Remove the return_reg instruction.

RISC architectures that take a return address in a register can use a
special-purpose `link` ret...

832247019b7144b82a2fb8c0ecbc4906149e0cf7 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Append link and sret arguments in legalize_signature.

These special-purpose arguments and return values are only relevant for
the function being compi...

315c858b480096f6769590daa5d3386fc2085ea0 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Simplify check_arg_types().

Iterator tricks.

c040a495c0dfe9e62e3042704007c7139494b5be authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Fix broken test.

74595c66234d6ff63fe53187d2b03a54e7dd506f authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Allow for special purpose function arguments and return values.

Enumerate a set of special purposes for function arguments that general
purpose code needs to kn...

7e9bdcf059fb52d67f604cc8dfc64ed2bad3999a authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Stop tracking if instruction formats have multiple results.

All instruction formats can represent multiple results now, so a few
redundant formats can be re...

d3235eb81ff29de8dd0cca7777b63e4b18778506 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>
Remove detach_secondary_results() and other cleanups.

- The detach_secondary_results() is a leftover from the two-plane value
representation. Use de...

bf74445eac9627ecafffea49c7ca42df35c26c89 authored over 7 years ago by Jakob Stoklund Olesen <[email protected]>