Commit Graph

7963 Commits

Author SHA1 Message Date
Benjamin Bouvier
ce512e4ede ci: allow passing additional parameters to run-experimental-x64-ci;
This makes it possible to run a subset of the tests with e.g.
`./ci/run-experimental-x64-ci.sh -- wast::Cranelift::spec`.
2020-09-23 16:42:03 +02:00
Pat Hickey
1fabb051b0 Merge pull request #2218 from bjorn3/per_function_sections
cranelift-object: Support per function sections
2020-09-22 11:28:58 -07:00
Pat Hickey
2308502336 Merge pull request #2212 from bjorn3/fix_custom_section_rel_ro
Fix relocated readonly data in custom sections
2020-09-22 11:28:32 -07:00
Chris Fallin
f754724bc9 Merge pull request #2103 from jmkrauz/arm32-codegen
cranelift: arm32 codegen
2020-09-22 09:07:55 -07:00
bjorn3
863d4272a7 cranelift-object: Support per function sections
This makes it possible for the linker to omit unused functions when
--gc-sections is passed.
2020-09-22 14:04:15 +02:00
Jakub Krauz
bab3c73100 Put arm32 backend behind experimental_arm32 flag 2020-09-22 12:53:14 +02:00
Jakub Krauz
f6a140a662 arm32 codegen
This commit adds arm32 code generation for some IR insts.
Floating-point instructions are not supported, because regalloc
does not allow to represent overlapping register classes,
which are needed by VFP/Neon.

There is also no support for big-endianness, I64 and I128 types.
2020-09-22 12:49:42 +02:00
Benjamin Bouvier
c29f4599ac Add a script to run CI for the new x64 backend (#2215)
Co-authored-by: Andrew Brown <andrew.brown@intel.com>
2020-09-22 10:43:28 +02:00
Andrew Brown
31165d0e9b Print more information about types that cannot be generated by wiggle 2020-09-21 10:26:26 -07:00
Andrew Brown
97e0f4864c Fix typo 2020-09-21 10:26:26 -07:00
Chris Fallin
32db4dcbe9 Merge pull request #2214 from bjorn3/fix_128bit_switch
Fix Switch for 128bit integers
2020-09-21 10:05:02 -07:00
bjorn3
45ccc6940e Fix Switch for 128bit integers 2020-09-21 14:50:59 +02:00
bjorn3
deb20c129a Fix relocated readonly data in custom sections
Lld doesn't allow relocations in readonly sections
2020-09-21 13:38:42 +02:00
Nick Fitzgerald
010e5b9aa8 Make filetest errors report full context (#2207)
* clif-util: do not convert `anyhow::Error`s into strings into `anyhow::Error`s

* filetests: Use the debug formatting of `anyhow::Error`s

This provides the full error context, not just the source error's message.
2020-09-18 13:33:38 -05:00
Pat Hickey
7bfc4597a0 Merge pull request #2201 from bytecodealliance/pch/wasi_common_move_type_imports
wasi-common: code motion around type imports
2020-09-16 14:48:25 -07:00
Chris Fallin
1c7fa7f785 Merge pull request #2181 from jgouly/madd-opt
arm64: Combine mul + add into madd
2020-09-15 11:52:33 -07:00
Joshua Nelson
d28abad441 Upgrade to target-lexicon 0.11
This allows downstream library users to use `CDataModel` without having
to install two different versions of target-lexicon.
2020-09-15 11:40:09 -07:00
Nick Fitzgerald
379aed8092 Merge pull request #2203 from fitzgen/clean-up-clif-util
Clean up `clif-util`: use anyhow and structopt
2020-09-15 10:22:32 -07:00
Nick Fitzgerald
a923ecae9e clif-util: Fix typo in subcommand description
Co-authored-by: Andrew Brown <andrew.brown@intel.com>
2020-09-15 09:44:03 -07:00
Nick Fitzgerald
d32b2c82f8 CI: Don't enforce builds work with rustc 1.43.0 for clif-util
`clif-util` doesn't get used in SpiderMonkey, so it doesn't need to work with
rustc 1.43.0.
2020-09-15 09:39:43 -07:00
Nick Fitzgerald
ed38348b22 clif-util: Switch to using structopt for CLI arguments 2020-09-15 09:39:43 -07:00
Nick Fitzgerald
31cbbd1d20 clif-util: Use anyhow::Error for errors instead of String
Also does the same for `cranelift-filetests`.
2020-09-14 18:29:00 -07:00
Nick Fitzgerald
9fea412333 Merge pull request #2184 from fitzgen/souper-harvest
Harvest left-hand side superoptimization candidates
2020-09-14 18:01:12 -07:00
Chris Fallin
539815ef12 Merge pull request #2197 from cfallin/fix-if-params
Account for duplicated if-block params on `end` op in unreachable case.
2020-09-14 17:39:46 -07:00
Pat Hickey
b72d5de86c virtfs: import types from handle, drop types:: prefix 2020-09-14 16:42:20 -07:00
Pat Hickey
4763678be2 sys: import types from handle or sched, not wasi. drop types:: prefix. 2020-09-14 16:42:20 -07:00
Pat Hickey
e5129b39cb path: import types from handle rather than wasi 2020-09-14 16:42:20 -07:00
Pat Hickey
e47927f0fd fs: only import wasi Fd type in one place 2020-09-14 16:42:20 -07:00
Pat Hickey
83c1fa1b8b entry: import types from handle 2020-09-14 16:42:20 -07:00
Pat Hickey
5639881519 ctx: import Fd without any types:: prefix 2020-09-14 16:42:20 -07:00
Pat Hickey
66ba582bba sched: re-export the wasi types used for times and events 2020-09-14 16:42:20 -07:00
Pat Hickey
6db24fd08f handle: re-export all of the wasi types used by handles 2020-09-14 16:42:20 -07:00
Chris Fallin
a0646c8d3f Account for duplicated if-block params on end op in unreachable case.
This is a close analogue to bnjbvr@'s fix in commit 518b7a7e. Similar to
that fix, this PR fixes a bug in which the Wasm translator could
misalign its value stack and either mistranslate or cause a panic with a
type-checking error.

Found via fuzzing by :decoder in SpiderMonkey (bug 1664453).
2020-09-14 16:41:53 -07:00
Nick Fitzgerald
e1c8878b33 cranelift_codegen::souper_harvest: Move preopt out of Context, into clif-util
This allows for more flexibility of when/where to harvest LHS candidates. For
example, we could choose to harvest candidates that overlap with and supercede
our current preopt peepholes.

This commit also makes sure that we compute the CFG before running preopt, when
harvesting LHS candidates via `clif-util souper-harvest`.
2020-09-14 16:27:47 -07:00
Nick Fitzgerald
c87aaeeece cranelift_codegen::souper_harvest: Update TODOs to include more instructions 2020-09-14 16:27:47 -07:00
Nick Fitzgerald
b2acec1164 Harvest integer comparisons into Souper left-hand side candidates 2020-09-14 16:27:47 -07:00
Nick Fitzgerald
5a87171121 Do not use the matches! macro so we work with older rustc versions 2020-09-14 16:27:47 -07:00
Nick Fitzgerald
89f1e02f1f Remove executable bits from a few Rust source files 2020-09-14 16:27:47 -07:00
Nick Fitzgerald
3a6dd832c0 Harvest left-hand side superoptimization candidates.
Given a clif function, harvest all its integer subexpressions, so that they can
be fed into [Souper](https://github.com/google/souper) as candidates for
superoptimization. For some of these candidates, Souper will successfully
synthesize a right-hand side that is equivalent but has lower cost than the
left-hand side. Then, we can combine these left- and right-hand sides into a
complete optimization, and add it to our peephole passes.

To harvest the expression that produced a given value `x`, we do a post-order
traversal of the dataflow graph starting from `x`. As we do this traversal, we
maintain a map from clif values to their translated Souper values. We stop
traversing when we reach anything that can't be translated into Souper IR: a
memory load, a float-to-int conversion, a block parameter, etc. For values
produced by these instructions, we create a Souper `var`, which is an input
variable to the optimization. For instructions that have a direct mapping into
Souper IR, we get the Souper version of each of its operands and then create the
Souper version of the instruction itself. It should now be clear why we do a
post-order traversal: we need an instruction's translated operands in order to
translate the instruction itself. Once this instruction is translated, we update
the clif-to-souper map with this new translation so that any other instruction
that uses this result as an operand has access to the translated value. When the
traversal is complete we return the translation of `x` as the root of left-hand
side candidate.
2020-09-14 16:27:47 -07:00
Nick Fitzgerald
43d2799fa2 clif-util: add the souper-to-peepmatic subcommand (#2200)
This adds a subcommand to the `clif-util` CLI for exposing the Souper->Peepmatic
translation machinery that was introduced in #2192.
2020-09-14 15:19:54 -05:00
Nick Fitzgerald
cb306fd514 Merge pull request #2192 from fitzgen/souper-to-peepmatic
Convert Souper optimizations to Peepmatic DSL
2020-09-11 14:54:36 -07:00
Nick Fitzgerald
39600437d9 peepmatic-souper: Clean up souper-to-peepmatic name conversion 2020-09-11 14:20:40 -07:00
Nick Fitzgerald
fa6db181a2 Canonicalize commutative instructions to _imm form during Souper->Peepmatic 2020-09-11 14:17:19 -07:00
Johnnie Birch
07d0d32b69 Adds i64x2.mul for the new backend targeting x64 2020-09-11 13:17:42 -07:00
Chris Fallin
91da85b6bd Merge pull request #2195 from bnjbvr/x64-refactor
machinst x64: two optimizations
2020-09-11 11:21:30 -07:00
Joey Gouly
22369cfa0d arm64: Combine mul + add into madd
Copyright (c) 2020, Arm Limited.
2020-09-11 18:06:19 +01:00
Benjamin Bouvier
3849dc18b1 machinst x64: revamp integer immediate emission;
In particular:

- try to optimize the integer emission into a 32-bit emission, when the
high bits are all zero, and stop relying on the caller of `imm_r` to
ensure this.
- rename `Inst::imm_r`/`Inst::Imm_R` to `Inst::imm`/`Inst::Imm`.
- generate a sign-extending mov 32-bit immediate to 64-bits, whenever
possible.
- fix a few places where the previous commit did introduce the
generation of zero-constants with xor, when calling `put_input_to_reg`,
thus clobbering the flags before they were read.
2020-09-11 18:13:30 +02:00
Benjamin Bouvier
d9052d0a9c machinst x64: generate copies of constants during lowering; 2020-09-11 17:41:44 +02:00
Benjamin Bouvier
cace32746f machinst x64: pattern-match addresses that are base+cst index; 2020-09-11 17:41:44 +02:00
Nick Fitzgerald
79d452ae7c Merge pull request #2194 from bnjbvr/wasm-multivalue-truncate-after-if
wasm: Remove duplicated parameters when popping an If
2020-09-11 08:34:26 -07:00