cranelift: Port most of simple_preopt.rs over to the peepmatic DSL

This ports all of the identity, no-op, simplification, and canonicalization
related optimizations over from being hand-coded to the `peepmatic` DSL. This
does not handle the branch-to-branch optimizations or most of the
divide-by-constant optimizations.
This commit is contained in:
Nick Fitzgerald
2020-04-28 16:43:32 -07:00
parent 18663fede9
commit 090d1c2d32
20 changed files with 1289 additions and 488 deletions

294
Cargo.lock generated
View File

@@ -11,9 +11,12 @@ dependencies = [
[[package]]
name = "ahash"
version = "0.3.3"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "35b909d1c126f78ace756fc337133356c499eebeefcce930fa5fb018823f2b2d"
checksum = "0989268a37e128d4d7a8028f1c60099430113fdbc70419010601ce51a228e4fe"
dependencies = [
"const-random",
]
[[package]]
name = "aho-corasick"
@@ -41,9 +44,9 @@ checksum = "d9a60d744a80c30fcb657dfe2c1b22bcb3e814c1a1e3674f32bf5820b570fbff"
[[package]]
name = "arbitrary"
version = "0.4.4"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c5eb01a9ab8a3369f2f7632b9461c34f5920bd454774bab5b9fc6744f21d6143"
checksum = "75153c95fdedd7db9732dfbfc3702324a1627eec91ba56e37cd0ac78314ab2ed"
dependencies = [
"derive_arbitrary",
]
@@ -97,9 +100,9 @@ dependencies = [
[[package]]
name = "backtrace-sys"
version = "0.1.36"
version = "0.1.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78848718ee1255a2485d1309ad9cdecfc2e7d0362dd11c6829364c6b35ae1bc7"
checksum = "7de8aba10a69c8e8d7622c5710229485ec32e9d55fdad160ea559c086fdcd118"
dependencies = [
"cc",
"libc",
@@ -201,6 +204,12 @@ dependencies = [
"byte-tools",
]
[[package]]
name = "bumpalo"
version = "3.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12ae9db68ad7fac5fe51304d20f016c911539251075a214f8e663babefa35187"
[[package]]
name = "byte-tools"
version = "0.3.1"
@@ -233,9 +242,9 @@ dependencies = [
[[package]]
name = "cc"
version = "1.0.52"
version = "1.0.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3d87b23d6a92cd03af510a5ade527033f6aa6fa92161e2d5863a907d4c5e31d"
checksum = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd"
dependencies = [
"jobserver",
]
@@ -261,6 +270,18 @@ dependencies = [
"vec_map",
]
[[package]]
name = "clicolors-control"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "90082ee5dcdd64dc4e9e0d37fbf3ee325419e39c0092191e0393df65518f741e"
dependencies = [
"atty",
"lazy_static",
"libc",
"winapi",
]
[[package]]
name = "cloudabi"
version = "0.0.3"
@@ -281,19 +302,18 @@ dependencies = [
[[package]]
name = "console"
version = "0.11.2"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dea0f3e2e8d7dba335e913b97f9e1992c86c4399d54f8be1d31c8727d0652064"
checksum = "6728a28023f207181b193262711102bfbaf47cc9d13bc71d0736607ef8efe88c"
dependencies = [
"clicolors-control",
"encode_unicode",
"lazy_static",
"libc",
"regex",
"terminal_size",
"termios",
"unicode-width",
"winapi",
"winapi-util",
]
[[package]]
@@ -357,8 +377,10 @@ dependencies = [
"cranelift-codegen-shared",
"cranelift-entity",
"gimli",
"hashbrown 0.7.2",
"hashbrown 0.7.1",
"log",
"peepmatic",
"peepmatic-runtime",
"regalloc",
"serde",
"smallvec",
@@ -424,7 +446,7 @@ name = "cranelift-frontend"
version = "0.63.0"
dependencies = [
"cranelift-codegen",
"hashbrown 0.7.2",
"hashbrown 0.7.1",
"log",
"smallvec",
"target-lexicon",
@@ -438,7 +460,7 @@ dependencies = [
"cranelift-entity",
"cranelift-frontend",
"cranelift-reader",
"hashbrown 0.7.2",
"hashbrown 0.7.1",
"log",
"pretty_env_logger",
"thiserror",
@@ -566,12 +588,12 @@ dependencies = [
"cranelift-codegen",
"cranelift-entity",
"cranelift-frontend",
"hashbrown 0.7.2",
"hashbrown 0.7.1",
"log",
"serde",
"target-lexicon",
"thiserror",
"wasmparser",
"wasmparser 0.52.2",
"wat",
]
@@ -642,13 +664,13 @@ dependencies = [
[[package]]
name = "derive_arbitrary"
version = "0.4.4"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5cee758ebd1c79a9c6fb95f242dcc30bdbf555c28369ae908d21fdaf81537496"
checksum = "caedd6a71b6d00bdc458ec8ffbfd12689c1ee7ffa69ad9933310aaf2f08f18d8"
dependencies = [
"proc-macro2",
"quote",
"syn",
"synstructure",
]
[[package]]
@@ -877,6 +899,12 @@ version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3"
[[package]]
name = "fst"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "81f9cac32c1741cdf6b66be7dcf0d9c7f25ccf12f8aa84c16cfa31f9f14513b3"
[[package]]
name = "fuchsia-cprng"
version = "0.1.1"
@@ -952,11 +980,11 @@ dependencies = [
[[package]]
name = "hashbrown"
version = "0.7.2"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96282e96bfcd3da0d3aa9938bedf1e50df3269b6db08b4876d2da0bb1a0841cf"
checksum = "479e9d9a1a3f8c489868a935b557ab5710e3e223836da2ecd52901d88935cb56"
dependencies = [
"ahash 0.3.3",
"ahash 0.3.2",
"autocfg 1.0.0",
]
@@ -971,9 +999,9 @@ dependencies = [
[[package]]
name = "hermit-abi"
version = "0.1.12"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61565ff7aaace3525556587bd2dc31d4a07071957be715e63ce7b1eccf51a8f4"
checksum = "725cf19794cf90aa94e65050cb4191ff5d8fa87a498383774c47b332e3af952e"
dependencies = [
"libc",
]
@@ -1100,7 +1128,7 @@ dependencies = [
"staticvec",
"thiserror",
"typemap",
"wasmparser",
"wasmparser 0.52.2",
"wat",
]
@@ -1170,9 +1198,9 @@ dependencies = [
[[package]]
name = "num_cpus"
version = "1.13.0"
version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
checksum = "46203554f085ff89c235cd12f7075f3233af9b11ed7c9e16dfe2560d03313ce6"
dependencies = [
"hermit-abi",
"libc",
@@ -1226,6 +1254,76 @@ dependencies = [
"stable_deref_trait",
]
[[package]]
name = "peepmatic"
version = "0.1.0"
dependencies = [
"anyhow",
"peepmatic-automata",
"peepmatic-macro",
"peepmatic-runtime",
"wast 13.0.0",
"z3",
]
[[package]]
name = "peepmatic-automata"
version = "0.1.0"
dependencies = [
"serde",
]
[[package]]
name = "peepmatic-fuzzing"
version = "0.1.0"
dependencies = [
"arbitrary",
"bincode",
"env_logger 0.7.1",
"fst",
"log",
"peepmatic",
"peepmatic-automata",
"peepmatic-runtime",
"peepmatic-test",
"rand 0.7.3",
"serde",
"wast 13.0.0",
]
[[package]]
name = "peepmatic-macro"
version = "0.1.0"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "peepmatic-runtime"
version = "0.1.0"
dependencies = [
"bincode",
"bumpalo",
"log",
"peepmatic-automata",
"peepmatic-macro",
"serde",
"thiserror",
"wast 13.0.0",
]
[[package]]
name = "peepmatic-test"
version = "0.1.0"
dependencies = [
"env_logger 0.7.1",
"log",
"peepmatic",
"peepmatic-runtime",
]
[[package]]
name = "plain"
version = "0.2.3"
@@ -1291,9 +1389,9 @@ dependencies = [
[[package]]
name = "proptest"
version = "0.9.6"
version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "01c477819b845fe023d33583ebf10c9f62518c8d79a0960ba5c36d6ac8a55a5b"
checksum = "bf6147d103a7c9d7598f4105cf049b15c99e2ecd93179bf024f0fd349be5ada4"
dependencies = [
"bit-set",
"bitflags",
@@ -1350,7 +1448,7 @@ dependencies = [
"rand_isaac",
"rand_jitter",
"rand_os",
"rand_pcg",
"rand_pcg 0.1.2",
"rand_xorshift",
"winapi",
]
@@ -1366,6 +1464,7 @@ dependencies = [
"rand_chacha 0.2.2",
"rand_core 0.5.1",
"rand_hc 0.2.0",
"rand_pcg 0.2.1",
]
[[package]]
@@ -1474,6 +1573,15 @@ dependencies = [
"rand_core 0.4.2",
]
[[package]]
name = "rand_pcg"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429"
dependencies = [
"rand_core 0.5.1",
]
[[package]]
name = "rand_xorshift"
version = "0.1.1"
@@ -1557,9 +1665,9 @@ dependencies = [
[[package]]
name = "regex"
version = "1.3.7"
version = "1.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a6020f034922e3194c711b82a627453881bc4682166cabb07134a10c26ba7692"
checksum = "7f6946991529684867e47d86474e3a6d0c0ab9b82d5821e314b1ede31fa3a4b3"
dependencies = [
"aho-corasick",
"memchr",
@@ -1648,9 +1756,9 @@ dependencies = [
[[package]]
name = "ryu"
version = "1.0.4"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed3d612bc64430efeb3f7ee6ef26d590dce0c43249217bddc62112540c7941e1"
checksum = "535622e6be132bccd223f4bb2b8ac8d53cda3c7a6394944d3b2b33fb974f9d76"
[[package]]
name = "same-file"
@@ -1724,9 +1832,9 @@ dependencies = [
[[package]]
name = "serde_json"
version = "1.0.52"
version = "1.0.51"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7894c8ed05b7a3a279aeb79025fdec1d3158080b75b98a08faf2806bb799edd"
checksum = "da07b57ee2623368351e9a0488bb0b261322a15a6e0ae53e243cbdc0f4208da9"
dependencies = [
"itoa",
"ryu",
@@ -1747,9 +1855,9 @@ dependencies = [
[[package]]
name = "smallvec"
version = "1.4.0"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c7cb5678e1615754284ec264d9bb5b4c27d2018577fd90ac0ceb578591ed5ee4"
checksum = "05720e22615919e4734f6a99ceae50d00226c3c5aca406e102ebc33298214e0a"
[[package]]
name = "stable_deref_trait"
@@ -1780,9 +1888,9 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
[[package]]
name = "structopt"
version = "0.3.14"
version = "0.3.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "863246aaf5ddd0d6928dfeb1a9ca65f505599e4e1b399935ef7e75107516b4ef"
checksum = "ff6da2e8d107dfd7b74df5ef4d205c6aebee0706c647f6bc6a2d5789905c00fb"
dependencies = [
"clap",
"lazy_static",
@@ -1791,9 +1899,9 @@ dependencies = [
[[package]]
name = "structopt-derive"
version = "0.4.7"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d239ca4b13aee7a2142e6795cbd69e457665ff8037aed33b3effdc430d2f927a"
checksum = "a489c87c08fbaf12e386665109dd13470dcc9c4583ea3e10dd2b4523e5ebd9ac"
dependencies = [
"heck",
"proc-macro-error",
@@ -1804,9 +1912,9 @@ dependencies = [
[[package]]
name = "syn"
version = "1.0.18"
version = "1.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "410a7488c0a728c7ceb4ad59b9567eb4053d02e8cc7f5c0e0eeeb39518369213"
checksum = "0df0eb663f387145cab623dea85b09c2c5b4b0aef44e945d928e682fce71bb03"
dependencies = [
"proc-macro2",
"quote",
@@ -1824,6 +1932,18 @@ dependencies = [
"syn",
]
[[package]]
name = "synstructure"
version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545"
dependencies = [
"proc-macro2",
"quote",
"syn",
"unicode-xid",
]
[[package]]
name = "target-lexicon"
version = "0.10.0"
@@ -1863,16 +1983,6 @@ dependencies = [
"winapi-util",
]
[[package]]
name = "terminal_size"
version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8038f95fc7a6f351163f4b964af631bd26c9e828f7db085f2a84aca56f70d13b"
dependencies = [
"libc",
"winapi",
]
[[package]]
name = "termios"
version = "0.3.2"
@@ -1909,18 +2019,18 @@ dependencies = [
[[package]]
name = "thiserror"
version = "1.0.16"
version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d12a1dae4add0f0d568eebc7bf142f145ba1aa2544cafb195c76f0f409091b60"
checksum = "54b3d3d2ff68104100ab257bb6bb0cb26c901abe4bd4ba15961f3bf867924012"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
version = "1.0.16"
version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f34e0c1caaa462fd840ec6b768946ea1e7842620d94fe29d5b847138f521269"
checksum = "ca972988113b7715266f91250ddb98070d033c62a011fa0fcc57434a649310dd"
dependencies = [
"proc-macro2",
"quote",
@@ -1962,9 +2072,9 @@ dependencies = [
[[package]]
name = "typenum"
version = "1.12.0"
version = "1.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33"
checksum = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9"
[[package]]
name = "unicode-segmentation"
@@ -2051,6 +2161,12 @@ dependencies = [
"yanix",
]
[[package]]
name = "wasmparser"
version = "0.51.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aeb1956b19469d1c5e63e459d29e7b5aa0f558d9f16fcef09736f8a265e6c10a"
[[package]]
name = "wasmparser"
version = "0.52.2"
@@ -2059,12 +2175,12 @@ checksum = "733954023c0b39602439e60a65126fd31b003196d3a1e8e4531b055165a79b31"
[[package]]
name = "wasmprinter"
version = "0.2.4"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21c3ac16b1f882bf1e1ce007e4f194559d2e3332013367863ddfbc828d1f044f"
checksum = "8bd423d45b95fcee11775472bfdce66c63c45ada23c1b338e0a63d623a6c475b"
dependencies = [
"anyhow",
"wasmparser",
"wasmparser 0.51.4",
]
[[package]]
@@ -2080,7 +2196,7 @@ dependencies = [
"rustc-demangle",
"target-lexicon",
"tempfile",
"wasmparser",
"wasmparser 0.52.2",
"wasmtime-environ",
"wasmtime-jit",
"wasmtime-profiling",
@@ -2150,7 +2266,7 @@ dependencies = [
"more-asserts",
"target-lexicon",
"thiserror",
"wasmparser",
"wasmparser 0.52.2",
"wasmtime-environ",
]
@@ -2181,7 +2297,7 @@ dependencies = [
"tempfile",
"thiserror",
"toml",
"wasmparser",
"wasmparser 0.52.2",
"winapi",
"zstd",
]
@@ -2194,6 +2310,7 @@ dependencies = [
"cranelift-reader",
"cranelift-wasm",
"libfuzzer-sys",
"peepmatic-fuzzing",
"target-lexicon",
"wasmtime",
"wasmtime-fuzzing",
@@ -2209,7 +2326,7 @@ dependencies = [
"env_logger 0.7.1",
"log",
"rayon",
"wasmparser",
"wasmparser 0.52.2",
"wasmprinter",
"wasmtime",
"wasmtime-wast",
@@ -2233,7 +2350,7 @@ dependencies = [
"region",
"target-lexicon",
"thiserror",
"wasmparser",
"wasmparser 0.52.2",
"wasmtime-debug",
"wasmtime-environ",
"wasmtime-profiling",
@@ -2336,6 +2453,15 @@ dependencies = [
"leb128",
]
[[package]]
name = "wast"
version = "13.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b20abd8b4a26f7e0d4dd5e357e90a3d555ec190e94472c9b2b27c5b9777f9ae"
dependencies = [
"leb128",
]
[[package]]
name = "wast"
version = "15.0.0"
@@ -2347,11 +2473,11 @@ dependencies = [
[[package]]
name = "wat"
version = "1.0.16"
version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "526d28df6c047d9f9a92d4925b98afd8d8d95b1b3aa4f13eb1306f17d1da56c4"
checksum = "51a615830ee3e7200b505c441fec09aac2f114deae69df52f215cb828ba112c4"
dependencies = [
"wast 15.0.0",
"wast 13.0.0",
]
[[package]]
@@ -2424,9 +2550,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-util"
version = "0.1.5"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
checksum = "fa515c5163a99cc82bab70fd3bfdd36d827be85de63737b40fcef2ce084a436e"
dependencies = [
"winapi",
]
@@ -2470,6 +2596,26 @@ dependencies = [
"log",
]
[[package]]
name = "z3"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "afd636f549e919f8058567000156e19efbb4728ddb3be226dcc332d0ff622ab5"
dependencies = [
"lazy_static",
"log",
"z3-sys",
]
[[package]]
name = "z3-sys"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2487974559d1494e8e8925df85362d6109ae5555092510508a5b1077346c2833"
dependencies = [
"cmake",
]
[[package]]
name = "zstd"
version = "0.5.1+zstd.1.4.4"