Commit Graph

3700 Commits

Author SHA1 Message Date
Chris Fallin
77ed861857 Start of significant rework: compile to a trie, not an FSM, and handle rule priorities appropriately.
See long block comment in codegen.rs. In brief, I think we actually want
to compile to a trie with priority-intervals, a sort of hybrid of a
priority tree and a trie representing decisions keyed on match-ops
(PatternInsts).

The reasons are:

1. The lexicographic ordering that is fundamental to the FSM-building in
   the Peepmatic view of the problem is sort of fundamentally limited
   w.r.t. our notion of rule priorities. See the example in the block
   comment.

2. While the FSM is nice for interpreter-based execution, when compiling
   to a language with structured control flow, what we really want is a
   tree; otherwise, if we want to form DAGs to share substructure, we
   need something like a "diamond-recovery" algorithm that finds common
   suffixes of *input match-op sequences*, and then we need to
   incorporate something like phi-nodes in order to allow captures from
   either side of the diamond to be used.

3. One of the main advantages of the automaton/transducer approach,
   namely sharing suffixes of the *output* sequence (emitting partial
   output at each state transition), is unfortunately not applicable if
   we allow the overall function to be partial. Otherwise, there is
   always the possibility that we fail at the last match op, so we
   cannot allow any external constructors to be called until we reach
   the final state anyway.

4. Pragmatically, I found I was having to significantly edit the
   peepmatic_automata implementation to adapt to this use-case
   (compilation to Rust), and it seemed more practical to design the
   data structure we want than to try to shoehorn the existing thing
   into the new problem.

WIP, hopefully working soon.
2021-11-11 15:56:54 -08:00
Chris Fallin
f2399c5384 WIP -- more thinking about how to work priorities into FSM 2021-11-11 15:56:54 -08:00
Chris Fallin
6a567924cd WIP 2021-11-11 15:56:54 -08:00
Chris Fallin
e08160845e WIP: rip out a bunch of stuff and rework 2021-11-11 15:56:54 -08:00
Chris Fallin
84b7612b98 Initial public commit of ISLE prototype DSL compiler. 2021-11-11 15:56:54 -08:00
bjorn3
b2d9faa472 Slightly simplify build script 2021-10-12 15:12:26 +02:00
bjorn3
b0b8c1edbf Remove default_map 2021-10-12 15:12:26 +02:00
bjorn3
6b32fcfcea Remove Constraint 2021-10-12 15:12:26 +02:00
bjorn3
466a446f8c Remove OpcodeNumber 2021-10-12 15:12:26 +02:00
bjorn3
99114547be Remove clobbers_all_regs 2021-10-12 15:12:26 +02:00
bjorn3
e8b18b58a1 Remove is_ghost 2021-10-12 15:12:26 +02:00
bjorn3
a05bf2bf42 Remove instructions necessary for the old regalloc 2021-10-12 14:37:36 +02:00
bjorn3
1fd491dadd Remove fallthrough instruction 2021-10-12 14:22:07 +02:00
bjorn3
5b24e117ee Remove instructions used by old br_table legalization 2021-10-12 14:18:52 +02:00
Chris Fallin
5c2a629871 Merge pull request #2455 from Hywan/feat-cranelift-codegen-re-export-gimli
feat(cranelift-codegen) Re-export `gimli` when `unwind` feature is enabled
2021-10-11 13:09:16 -07:00
Alex Crichton
713ce07d35 Add some debug logging for timing in module compiles (#3417)
* Add some debug logging for timing in module compiles

This is sometimes helpful when debugging slow compiles from fuzz bugs or
similar.

* Fix total duration calculation to not double-count
2021-10-11 12:50:15 -05:00
bjorn3
3f87b768d5 Update filetests 2021-10-11 17:44:21 +02:00
bjorn3
a894594ae5 Update parser 2021-10-11 16:41:45 +02:00
bjorn3
20463d60f3 Replace StackSlots struct with a type alias 2021-10-11 16:41:45 +02:00
bjorn3
fd59a3e045 Remove all unused stackslot handling code 2021-10-11 16:41:45 +02:00
Pat Hickey
f3d06d61d2 Merge pull request #3428 from bjorn3/fix_cranelift_codegen_benches
Fix cranelift-codegen benches
2021-10-10 10:01:27 -07:00
Pat Hickey
d3f81a3cb9 Merge pull request #3435 from bjorn3/remove_various_dead_code
Remove various dead code
2021-10-10 10:00:42 -07:00
Pat Hickey
ccab8c5357 Merge pull request #3434 from bjorn3/remove_cssa_verifier
Remove the CSSA verifier
2021-10-10 10:00:19 -07:00
Pat Hickey
bca6946a9d Merge pull request #3432 from bjorn3/remove_reloc_constant
ConstantData related cleanups for the removal of the old backend
2021-10-10 09:59:13 -07:00
Pat Hickey
b7375817b1 Merge pull request #3431 from bjorn3/remove_sarg_t
Remove the sarg_t type and dummy_sarg_t instruction
2021-10-10 09:58:14 -07:00
Pat Hickey
b0fbab67ba Merge pull request #3429 from bjorn3/shrink_cranelift_codegen_shared
Move condcodes from cranelift-codegen-shared to cranelift-codegen
2021-10-10 09:56:44 -07:00
bjorn3
80709ab624 Rustfmt 2021-10-10 15:26:43 +02:00
bjorn3
54293a5929 Remove predicates module
It is dead code now
2021-10-10 15:25:29 +02:00
bjorn3
fad3868c1d Remove no longer existing passes from timing.rs 2021-10-10 15:25:29 +02:00
bjorn3
f7ce91e174 Remove the CSSA verifier
The old register allocator required CSSA as intermediate step. The new
register allocator doesn't use SSA at all.
2021-10-10 15:17:19 +02:00
bjorn3
355dd996a2 Fix tests 2021-10-10 15:00:25 +02:00
bjorn3
aa0486eb15 Remove offset fields from ConstantPool 2021-10-10 14:47:53 +02:00
bjorn3
d78f436daf Remove reloc_constant
It is no longer used by the new backends
2021-10-10 14:43:55 +02:00
bjorn3
8a8797b911 Remove the sarg_t type and dummy_sarg_t instruction
They are no longer necessary with the new style backends
2021-10-10 14:38:35 +02:00
bjorn3
eec3528254 Make ValueType::number unfailable 2021-10-10 14:37:41 +02:00
bjorn3
2b89b13c57 Move condcodes from cranelift-codegen-shared to cranelift-codegen 2021-10-10 14:23:35 +02:00
bjorn3
ed5764c79f Fix cranelift-codegen benches 2021-10-10 14:19:08 +02:00
Nick Fitzgerald
dbe01ff51e Remove references to the old postopt pass 2021-10-07 14:44:07 -07:00
Anton Kirilov
a986cf2438 Increase the default code section alignment to 64 KB for AArch64 targets (#3424)
Some platforms such as AArch64 Linux support different memory page
sizes, so we need to be conservative when choosing the code section
alignment (which is equal to the page size) by using the maximum.

Copyright (c) 2021, Arm Limited.
2021-10-07 12:49:40 -05:00
bjorn3
2db3b5b9df Remove code offsets from Function (#3412)
* Remove code offsets from Function

* Remove reloc_jt and fix wasmtime-cranelift
2021-10-07 15:54:00 +02:00
Afonso Bordado
fc33700071 cranelift: Enable umulhi tests for s390x 2021-10-06 20:59:53 +01:00
Chris Fallin
d269271264 Merge pull request #3091 from cratelyn/katie/spooky-entity-impl
🌈 cranelift: Provide an `entity_impl!` variation for external handles
2021-10-06 12:22:46 -07:00
Chris Fallin
df5fa773ef Merge pull request #3413 from bjorn3/no_stack_layout
Remove StackLayoutInfo
2021-10-04 11:17:13 -07:00
bjorn3
a0f777b677 Remove BranchRange 2021-10-04 19:40:58 +02:00
bjorn3
c5c7508289 Remove StackLayoutInfo 2021-10-04 19:39:33 +02:00
bjorn3
b3702f5821 Remove old_signature 2021-10-04 19:39:33 +02:00
Benjamin Bouvier
772176dbfb Cranelift: remove unused EncCursor 2021-10-04 19:11:52 +02:00
Benjamin Bouvier
43a86f14d5 Remove more old backend ISA concepts (#3402)
This also paves the way for unifying TargetIsa and MachBackend, since now they map one to one. In theory the two traits could be merged, which would be nice to limit the number of total concepts. Also they have quite different responsibilities, so it might be fine to keep them separate.

Interestingly, this PR started as removing RegInfo from the TargetIsa trait since the adapter returned a dummy value there. From the fallout, noticed that all Display implementations didn't needed an ISA anymore (since these were only used to render ISA specific registers). Also the whole family of RegInfo / ValueLoc / RegUnit was exclusively used for the old backend, and these could be removed. Notably, some IR instructions needed to be removed, because they were using RegUnit too: this was the oddball of regfill / regmove / regspill / copy_special, which were IR instructions inserted by the old regalloc. Fare thee well!
2021-10-04 10:36:12 +02:00
Alex Crichton
5b3b459ad5 Fix some nightly dead code warnings (#3404)
* Fix some nightly dead code warnings

Looks like the "struct field not used" lint has improved on nightly and
caught a few more instances of fields that were never actually read.

* Fix windows
2021-10-01 14:26:30 -05:00
Benjamin Bouvier
bae4ec6427 Remove ancient register allocation (#3401) 2021-09-30 21:27:23 +02:00