cranelift-codegen
Advanced tools
| { | ||
| "git": { | ||
| "sha1": "d02210b714962f2c66891a8ee9d5d034bfb626f1" | ||
| "sha1": "377cd917af258d932d55b201a646917ecf193639" | ||
| }, | ||
| "path_in_vcs": "cranelift/codegen" | ||
| } |
+320
-200
@@ -15,2 +15,11 @@ # This file is automatically @generated by Cargo. | ||
| [[package]] | ||
| name = "alloca" | ||
| version = "0.4.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "e5a7d05ea6aea7e9e64d25b9156ba2fee3fdd659e34e41063cd2fc7cd020d7f4" | ||
| dependencies = [ | ||
| "cc", | ||
| ] | ||
| [[package]] | ||
| name = "allocator-api2" | ||
@@ -63,3 +72,3 @@ version = "0.2.20" | ||
| dependencies = [ | ||
| "windows-sys 0.61.2", | ||
| "windows-sys", | ||
| ] | ||
@@ -75,3 +84,3 @@ | ||
| "once_cell_polyfill", | ||
| "windows-sys 0.61.2", | ||
| "windows-sys", | ||
| ] | ||
@@ -81,5 +90,5 @@ | ||
| name = "anyhow" | ||
| version = "1.0.100" | ||
| version = "1.0.102" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" | ||
| checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" | ||
@@ -100,5 +109,5 @@ [[package]] | ||
| name = "bit-set" | ||
| version = "0.5.2" | ||
| version = "0.8.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "6e11e16035ea35e4e5997b393eacbf6f63983188f7a2ad25bfb13465f5ad59de" | ||
| checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" | ||
| dependencies = [ | ||
@@ -110,19 +119,13 @@ "bit-vec", | ||
| name = "bit-vec" | ||
| version = "0.6.3" | ||
| version = "0.8.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" | ||
| checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" | ||
| [[package]] | ||
| name = "bitflags" | ||
| version = "1.3.2" | ||
| version = "2.11.1" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" | ||
| checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" | ||
| [[package]] | ||
| name = "bitflags" | ||
| version = "2.9.4" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" | ||
| [[package]] | ||
| name = "block-buffer" | ||
@@ -146,8 +149,2 @@ version = "0.10.2" | ||
| [[package]] | ||
| name = "byteorder" | ||
| version = "1.4.3" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" | ||
| [[package]] | ||
| name = "capstone" | ||
@@ -282,5 +279,5 @@ version = "0.13.0" | ||
| name = "cranelift-assembler-x64" | ||
| version = "0.131.2" | ||
| version = "0.132.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "008f1a8d1da5074ad858f398775a6d1989031892e46927df5ed18d3be1ed8717" | ||
| checksum = "8c80cf55a351448317210f26c434be761bcb25e7b36116ec92f89540b73e2833" | ||
| dependencies = [ | ||
@@ -292,5 +289,5 @@ "cranelift-assembler-x64-meta", | ||
| name = "cranelift-assembler-x64-meta" | ||
| version = "0.131.2" | ||
| version = "0.132.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "9fd76237df1f4e26edb5ad7971d20280ed1e193331fd257f1b4e4dfefd88dda2" | ||
| checksum = "07937ca8617b340162fe3a4716be885b5847e9b56d6c7a89abbe4d42340fdc91" | ||
| dependencies = [ | ||
@@ -302,5 +299,5 @@ "cranelift-srcgen", | ||
| name = "cranelift-bforest" | ||
| version = "0.131.2" | ||
| version = "0.132.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "380f0bc43e535df6855bbee649efb00bde39c3f33434c47c8e10ac836d21bf47" | ||
| checksum = "88217b08180882436d54c0133274885c590698ae854e352bede1cda041230800" | ||
| dependencies = [ | ||
@@ -313,5 +310,5 @@ "cranelift-entity", | ||
| name = "cranelift-bitset" | ||
| version = "0.131.2" | ||
| version = "0.132.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "4811e3e4502de04257e90c0a93225b56d9b85e0f9ad10b81446b415511009610" | ||
| checksum = "d5c3cf7ba29fa56e56040848e34835d4e45988b2760ef212413409af95ffd8c1" | ||
| dependencies = [ | ||
@@ -325,3 +322,3 @@ "serde", | ||
| name = "cranelift-codegen" | ||
| version = "0.131.2" | ||
| version = "0.132.0" | ||
| dependencies = [ | ||
@@ -342,3 +339,3 @@ "anyhow", | ||
| "gimli", | ||
| "hashbrown 0.16.1", | ||
| "hashbrown 0.17.0", | ||
| "libm", | ||
@@ -363,5 +360,5 @@ "log", | ||
| name = "cranelift-codegen-meta" | ||
| version = "0.131.2" | ||
| version = "0.132.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "be4f6992eb6faf086ddc7deaaa5f279abfe7f5fd5ae5709bd38253450fc7b945" | ||
| checksum = "0909eaf9d6f18f5bf802d50608cb4368ac340fbd03cc44f2888d1cfcc3faa64e" | ||
| dependencies = [ | ||
@@ -377,11 +374,11 @@ "cranelift-assembler-x64-meta", | ||
| name = "cranelift-codegen-shared" | ||
| version = "0.131.2" | ||
| version = "0.132.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "70e1b2aad7d055925a4ea9cdbfa9d1d987f9dfc8ad6b708be28f901ac620a298" | ||
| checksum = "c95a8da8be283f49cda7d0ef228c94f10d791e517b27b0c7e282dadd2e79ce45" | ||
| [[package]] | ||
| name = "cranelift-control" | ||
| version = "0.131.2" | ||
| version = "0.132.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "89a355348325e0a63b65c00def3871597b9fcc79d25456397010d16d872b3772" | ||
| checksum = "f5b19c81145146da1f7afda2e7f52111842fe6793512e740ad5cf3f5639e6212" | ||
| dependencies = [ | ||
@@ -393,5 +390,5 @@ "arbitrary", | ||
| name = "cranelift-entity" | ||
| version = "0.131.2" | ||
| version = "0.132.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "43f4847d93ce2c80d2bff929aa1004dfb3ce2cf5d881f6ced54b8d654d967ba3" | ||
| checksum = "4a55309b47e6633ab05821304206cb1e92952e845b1224985562bb7ac1e92323" | ||
| dependencies = [ | ||
@@ -406,5 +403,5 @@ "cranelift-bitset", | ||
| name = "cranelift-isle" | ||
| version = "0.131.2" | ||
| version = "0.132.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "89bc2035de85c4f04ba7bd57eb5bd3a8b775235bf28852dbf87105115cb8919a" | ||
| checksum = "1ac4e0bc095b2dab2212d1e99d7a74b62afc1485db023f1c0cb34a68758f7bd1" | ||
| dependencies = [ | ||
@@ -416,12 +413,13 @@ "codespan-reporting", | ||
| name = "cranelift-srcgen" | ||
| version = "0.131.2" | ||
| version = "0.132.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "faa4bbad54fc28cc0da1f9a5d7f7f826ec8cafda3d503b401b2daaaa93c63ef0" | ||
| checksum = "a3ceab9a53f7d362c89841fbaa8e63e44d47c40e91dc96ee6f777fca5d6b323b" | ||
| [[package]] | ||
| name = "criterion" | ||
| version = "0.7.0" | ||
| version = "0.8.2" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "e1c047a62b0cc3e145fa84415a3191f628e980b194c2755aa12300a4e6cbd928" | ||
| checksum = "950046b2aa2492f9a536f5f4f9a3de7b9e2476e575e05bd6c333371add4d98f3" | ||
| dependencies = [ | ||
| "alloca", | ||
| "anes", | ||
@@ -435,2 +433,3 @@ "cast", | ||
| "oorandom", | ||
| "page_size", | ||
| "rayon", | ||
@@ -446,5 +445,5 @@ "regex", | ||
| name = "criterion-plot" | ||
| version = "0.6.0" | ||
| version = "0.8.2" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "9b1bcc0dc7dfae599d84ad0b1a55f80cde8af3725da8313b528da95ef783e338" | ||
| checksum = "d8d80a2f4f5b554395e47b5d8305bc3d27813bacb73493eb1001e8f76dae29ea" | ||
| dependencies = [ | ||
@@ -555,3 +554,3 @@ "cast", | ||
| "libc", | ||
| "windows-sys 0.61.2", | ||
| "windows-sys", | ||
| ] | ||
@@ -579,2 +578,8 @@ | ||
| name = "foldhash" | ||
| version = "0.1.3" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" | ||
| [[package]] | ||
| name = "foldhash" | ||
| version = "0.2.0" | ||
@@ -596,9 +601,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| name = "getrandom" | ||
| version = "0.2.15" | ||
| version = "0.3.1" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" | ||
| checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" | ||
| dependencies = [ | ||
| "cfg-if", | ||
| "libc", | ||
| "wasi 0.11.0+wasi-snapshot-preview1", | ||
| "wasi", | ||
| "windows-targets", | ||
| ] | ||
@@ -608,10 +614,11 @@ | ||
| name = "getrandom" | ||
| version = "0.3.1" | ||
| version = "0.4.2" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" | ||
| checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" | ||
| dependencies = [ | ||
| "cfg-if", | ||
| "libc", | ||
| "wasi 0.13.3+wasi-0.2.2", | ||
| "windows-targets 0.52.6", | ||
| "r-efi", | ||
| "wasip2", | ||
| "wasip3", | ||
| ] | ||
@@ -642,2 +649,5 @@ | ||
| checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" | ||
| dependencies = [ | ||
| "foldhash 0.1.3", | ||
| ] | ||
@@ -649,4 +659,10 @@ [[package]] | ||
| checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" | ||
| [[package]] | ||
| name = "hashbrown" | ||
| version = "0.17.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" | ||
| dependencies = [ | ||
| "foldhash", | ||
| "foldhash 0.2.0", | ||
| ] | ||
@@ -674,8 +690,10 @@ | ||
| name = "indexmap" | ||
| version = "2.13.0" | ||
| version = "2.14.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" | ||
| checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" | ||
| dependencies = [ | ||
| "equivalent", | ||
| "hashbrown 0.16.1", | ||
| "hashbrown 0.17.0", | ||
| "serde", | ||
| "serde_core", | ||
| ] | ||
@@ -705,12 +723,12 @@ | ||
| [[package]] | ||
| name = "lazy_static" | ||
| version = "1.4.0" | ||
| name = "leb128fmt" | ||
| version = "0.1.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" | ||
| checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" | ||
| [[package]] | ||
| name = "libc" | ||
| version = "0.2.177" | ||
| version = "0.2.185" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" | ||
| checksum = "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f" | ||
@@ -725,5 +743,5 @@ [[package]] | ||
| name = "linux-raw-sys" | ||
| version = "0.9.4" | ||
| version = "0.12.1" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" | ||
| checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" | ||
@@ -770,2 +788,12 @@ [[package]] | ||
| [[package]] | ||
| name = "page_size" | ||
| version = "0.6.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "30d5b2194ed13191c1999ae0704b7839fb18384fa22e49b57eeaa97d79ce40da" | ||
| dependencies = [ | ||
| "libc", | ||
| "winapi", | ||
| ] | ||
| [[package]] | ||
| name = "postcard" | ||
@@ -789,2 +817,12 @@ version = "1.1.3" | ||
| [[package]] | ||
| name = "prettyplease" | ||
| version = "0.2.31" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "5316f57387668042f561aae71480de936257848f9c43ce528e311d89a07cadeb" | ||
| dependencies = [ | ||
| "proc-macro2", | ||
| "syn", | ||
| ] | ||
| [[package]] | ||
| name = "proc-macro2" | ||
@@ -800,18 +838,17 @@ version = "1.0.101" | ||
| name = "proptest" | ||
| version = "1.0.0" | ||
| version = "1.11.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "1e0d9cc07f18492d879586c92b485def06bc850da3118075cd45d50e9c95b0e5" | ||
| checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" | ||
| dependencies = [ | ||
| "bit-set", | ||
| "bitflags 1.3.2", | ||
| "byteorder", | ||
| "lazy_static", | ||
| "bit-vec", | ||
| "bitflags", | ||
| "num-traits", | ||
| "quick-error 2.0.1", | ||
| "rand", | ||
| "rand_chacha", | ||
| "rand_xorshift", | ||
| "regex-syntax 0.6.25", | ||
| "regex-syntax 0.8.5", | ||
| "rusty-fork", | ||
| "tempfile", | ||
| "unarray", | ||
| ] | ||
@@ -821,5 +858,5 @@ | ||
| name = "pulley-interpreter" | ||
| version = "44.0.2" | ||
| version = "45.0.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "dff0ead8b4616f81b3d3efd41ce41bcf9ea364a5d8df8be8a8a1f98b50104349" | ||
| checksum = "e9204ad9435f2a6fe3bd13bba52389fb8488fa20ba497e35c5d2db638166019d" | ||
| dependencies = [ | ||
@@ -833,5 +870,5 @@ "cranelift-bitset", | ||
| name = "pulley-macros" | ||
| version = "44.0.2" | ||
| version = "45.0.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "f4389e5820b1b39810ac12a27aa665320cab3caa51913a79637c06f284cfe223" | ||
| checksum = "53009b033747e0d79a76549a744da58e84c9da8076492c7e6d491fdc6cc41b95" | ||
| dependencies = [ | ||
@@ -850,8 +887,2 @@ "proc-macro2", | ||
| [[package]] | ||
| name = "quick-error" | ||
| version = "2.0.1" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" | ||
| [[package]] | ||
| name = "quote" | ||
@@ -866,8 +897,13 @@ version = "1.0.41" | ||
| [[package]] | ||
| name = "r-efi" | ||
| version = "6.0.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" | ||
| [[package]] | ||
| name = "rand" | ||
| version = "0.8.5" | ||
| version = "0.9.2" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" | ||
| checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" | ||
| dependencies = [ | ||
| "libc", | ||
| "rand_chacha", | ||
@@ -879,5 +915,5 @@ "rand_core", | ||
| name = "rand_chacha" | ||
| version = "0.3.1" | ||
| version = "0.9.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" | ||
| checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" | ||
| dependencies = [ | ||
@@ -890,7 +926,7 @@ "ppv-lite86", | ||
| name = "rand_core" | ||
| version = "0.6.3" | ||
| version = "0.9.3" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" | ||
| checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" | ||
| dependencies = [ | ||
| "getrandom 0.2.15", | ||
| "getrandom 0.3.1", | ||
| ] | ||
@@ -900,5 +936,5 @@ | ||
| name = "rand_xorshift" | ||
| version = "0.3.0" | ||
| version = "0.4.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" | ||
| checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" | ||
| dependencies = [ | ||
@@ -932,9 +968,9 @@ "rand_core", | ||
| name = "regalloc2" | ||
| version = "0.15.0" | ||
| version = "0.15.1" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "952ddbfc6f9f64d006c3efd8c9851a6ba2f2b944ba94730db255d55006e0ffda" | ||
| checksum = "de2c52737737f8609e94f975dee22854a2d5c125772d4b1cf292120f4d45c186" | ||
| dependencies = [ | ||
| "allocator-api2", | ||
| "bumpalo", | ||
| "hashbrown 0.15.2", | ||
| "hashbrown 0.17.0", | ||
| "log", | ||
@@ -971,11 +1007,11 @@ "rustc-hash", | ||
| name = "regex-syntax" | ||
| version = "0.6.25" | ||
| version = "0.7.4" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" | ||
| checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" | ||
| [[package]] | ||
| name = "regex-syntax" | ||
| version = "0.7.4" | ||
| version = "0.8.5" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" | ||
| checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" | ||
@@ -990,11 +1026,11 @@ [[package]] | ||
| name = "rustix" | ||
| version = "1.0.8" | ||
| version = "1.1.4" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" | ||
| checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" | ||
| dependencies = [ | ||
| "bitflags 2.9.4", | ||
| "bitflags", | ||
| "errno", | ||
| "libc", | ||
| "linux-raw-sys", | ||
| "windows-sys 0.60.2", | ||
| "windows-sys", | ||
| ] | ||
@@ -1009,3 +1045,3 @@ | ||
| "fnv", | ||
| "quick-error 1.2.3", | ||
| "quick-error", | ||
| "tempfile", | ||
@@ -1031,2 +1067,8 @@ "wait-timeout", | ||
| [[package]] | ||
| name = "semver" | ||
| version = "1.0.27" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" | ||
| [[package]] | ||
| name = "serde" | ||
@@ -1133,17 +1175,17 @@ version = "1.0.228" | ||
| name = "target-lexicon" | ||
| version = "0.13.0" | ||
| version = "0.13.3" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "4ff4a4048091358129767b8a200d6927f58876c8b5ea16fb7b0222d43b79bfa8" | ||
| checksum = "df7f62577c25e07834649fc3b39fafdc597c0a3527dc1c60129201ccfcbaa50c" | ||
| [[package]] | ||
| name = "tempfile" | ||
| version = "3.23.0" | ||
| version = "3.27.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" | ||
| checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" | ||
| dependencies = [ | ||
| "fastrand", | ||
| "getrandom 0.3.1", | ||
| "getrandom 0.4.2", | ||
| "once_cell", | ||
| "rustix", | ||
| "windows-sys 0.61.2", | ||
| "windows-sys", | ||
| ] | ||
@@ -1197,2 +1239,8 @@ | ||
| [[package]] | ||
| name = "unarray" | ||
| version = "0.1.4" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" | ||
| [[package]] | ||
| name = "unicode-ident" | ||
@@ -1210,2 +1258,8 @@ version = "1.0.19" | ||
| [[package]] | ||
| name = "unicode-xid" | ||
| version = "0.2.3" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" | ||
| [[package]] | ||
| name = "utf8parse" | ||
@@ -1243,8 +1297,2 @@ version = "0.2.2" | ||
| name = "wasi" | ||
| version = "0.11.0+wasi-snapshot-preview1" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" | ||
| [[package]] | ||
| name = "wasi" | ||
| version = "0.13.3+wasi-0.2.2" | ||
@@ -1258,8 +1306,60 @@ source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| [[package]] | ||
| name = "wasip2" | ||
| version = "1.0.0+wasi-0.2.4" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "03fa2761397e5bd52002cd7e73110c71af2109aca4e521a9f40473fe685b0a24" | ||
| dependencies = [ | ||
| "wit-bindgen 0.45.1", | ||
| ] | ||
| [[package]] | ||
| name = "wasip3" | ||
| version = "0.4.0+wasi-0.3.0-rc-2026-01-06" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" | ||
| dependencies = [ | ||
| "wit-bindgen 0.51.0", | ||
| ] | ||
| [[package]] | ||
| name = "wasm-encoder" | ||
| version = "0.244.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" | ||
| dependencies = [ | ||
| "leb128fmt", | ||
| "wasmparser", | ||
| ] | ||
| [[package]] | ||
| name = "wasm-metadata" | ||
| version = "0.244.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" | ||
| dependencies = [ | ||
| "anyhow", | ||
| "indexmap", | ||
| "wasm-encoder", | ||
| "wasmparser", | ||
| ] | ||
| [[package]] | ||
| name = "wasmparser" | ||
| version = "0.244.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" | ||
| dependencies = [ | ||
| "bitflags", | ||
| "hashbrown 0.15.2", | ||
| "indexmap", | ||
| "semver", | ||
| ] | ||
| [[package]] | ||
| name = "wasmtime-internal-core" | ||
| version = "44.0.2" | ||
| version = "45.0.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "4364d345719bba7fc4c435992ea1cb0c118f1e90a88c6e6f22a7a4fc507700c6" | ||
| checksum = "1bdae4b55b15a23d774b15f6e7cd90ae0d0aa17c47c12b4db098b3dd11ba9d58" | ||
| dependencies = [ | ||
| "hashbrown 0.16.1", | ||
| "hashbrown 0.17.0", | ||
| "libm", | ||
@@ -1307,11 +1407,2 @@ ] | ||
| name = "windows-sys" | ||
| version = "0.60.2" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" | ||
| dependencies = [ | ||
| "windows-targets 0.53.5", | ||
| ] | ||
| [[package]] | ||
| name = "windows-sys" | ||
| version = "0.61.2" | ||
@@ -1330,30 +1421,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| dependencies = [ | ||
| "windows_aarch64_gnullvm 0.52.6", | ||
| "windows_aarch64_msvc 0.52.6", | ||
| "windows_i686_gnu 0.52.6", | ||
| "windows_i686_gnullvm 0.52.6", | ||
| "windows_i686_msvc 0.52.6", | ||
| "windows_x86_64_gnu 0.52.6", | ||
| "windows_x86_64_gnullvm 0.52.6", | ||
| "windows_x86_64_msvc 0.52.6", | ||
| "windows_aarch64_gnullvm", | ||
| "windows_aarch64_msvc", | ||
| "windows_i686_gnu", | ||
| "windows_i686_gnullvm", | ||
| "windows_i686_msvc", | ||
| "windows_x86_64_gnu", | ||
| "windows_x86_64_gnullvm", | ||
| "windows_x86_64_msvc", | ||
| ] | ||
| [[package]] | ||
| name = "windows-targets" | ||
| version = "0.53.5" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" | ||
| dependencies = [ | ||
| "windows-link", | ||
| "windows_aarch64_gnullvm 0.53.1", | ||
| "windows_aarch64_msvc 0.53.1", | ||
| "windows_i686_gnu 0.53.1", | ||
| "windows_i686_gnullvm 0.53.1", | ||
| "windows_i686_msvc 0.53.1", | ||
| "windows_x86_64_gnu 0.53.1", | ||
| "windows_x86_64_gnullvm 0.53.1", | ||
| "windows_x86_64_msvc 0.53.1", | ||
| ] | ||
| [[package]] | ||
| name = "windows_aarch64_gnullvm" | ||
@@ -1365,8 +1439,2 @@ version = "0.52.6" | ||
| [[package]] | ||
| name = "windows_aarch64_gnullvm" | ||
| version = "0.53.1" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" | ||
| [[package]] | ||
| name = "windows_aarch64_msvc" | ||
@@ -1378,8 +1446,2 @@ version = "0.52.6" | ||
| [[package]] | ||
| name = "windows_aarch64_msvc" | ||
| version = "0.53.1" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" | ||
| [[package]] | ||
| name = "windows_i686_gnu" | ||
@@ -1391,8 +1453,2 @@ version = "0.52.6" | ||
| [[package]] | ||
| name = "windows_i686_gnu" | ||
| version = "0.53.1" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" | ||
| [[package]] | ||
| name = "windows_i686_gnullvm" | ||
@@ -1404,8 +1460,2 @@ version = "0.52.6" | ||
| [[package]] | ||
| name = "windows_i686_gnullvm" | ||
| version = "0.53.1" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" | ||
| [[package]] | ||
| name = "windows_i686_msvc" | ||
@@ -1417,8 +1467,2 @@ version = "0.52.6" | ||
| [[package]] | ||
| name = "windows_i686_msvc" | ||
| version = "0.53.1" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" | ||
| [[package]] | ||
| name = "windows_x86_64_gnu" | ||
@@ -1430,30 +1474,38 @@ version = "0.52.6" | ||
| [[package]] | ||
| name = "windows_x86_64_gnu" | ||
| version = "0.53.1" | ||
| name = "windows_x86_64_gnullvm" | ||
| version = "0.52.6" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" | ||
| checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" | ||
| [[package]] | ||
| name = "windows_x86_64_gnullvm" | ||
| name = "windows_x86_64_msvc" | ||
| version = "0.52.6" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" | ||
| checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" | ||
| [[package]] | ||
| name = "windows_x86_64_gnullvm" | ||
| version = "0.53.1" | ||
| name = "wit-bindgen" | ||
| version = "0.45.1" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" | ||
| checksum = "5c573471f125075647d03df72e026074b7203790d41351cd6edc96f46bcccd36" | ||
| [[package]] | ||
| name = "windows_x86_64_msvc" | ||
| version = "0.52.6" | ||
| name = "wit-bindgen" | ||
| version = "0.51.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" | ||
| checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" | ||
| dependencies = [ | ||
| "wit-bindgen-rust-macro", | ||
| ] | ||
| [[package]] | ||
| name = "windows_x86_64_msvc" | ||
| version = "0.53.1" | ||
| name = "wit-bindgen-core" | ||
| version = "0.51.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" | ||
| checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" | ||
| dependencies = [ | ||
| "anyhow", | ||
| "heck", | ||
| "wit-parser", | ||
| ] | ||
@@ -1466,3 +1518,71 @@ [[package]] | ||
| dependencies = [ | ||
| "bitflags 2.9.4", | ||
| "bitflags", | ||
| ] | ||
| [[package]] | ||
| name = "wit-bindgen-rust" | ||
| version = "0.51.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" | ||
| dependencies = [ | ||
| "anyhow", | ||
| "heck", | ||
| "indexmap", | ||
| "prettyplease", | ||
| "syn", | ||
| "wasm-metadata", | ||
| "wit-bindgen-core", | ||
| "wit-component", | ||
| ] | ||
| [[package]] | ||
| name = "wit-bindgen-rust-macro" | ||
| version = "0.51.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" | ||
| dependencies = [ | ||
| "anyhow", | ||
| "prettyplease", | ||
| "proc-macro2", | ||
| "quote", | ||
| "syn", | ||
| "wit-bindgen-core", | ||
| "wit-bindgen-rust", | ||
| ] | ||
| [[package]] | ||
| name = "wit-component" | ||
| version = "0.244.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" | ||
| dependencies = [ | ||
| "anyhow", | ||
| "bitflags", | ||
| "indexmap", | ||
| "log", | ||
| "serde", | ||
| "serde_derive", | ||
| "serde_json", | ||
| "wasm-encoder", | ||
| "wasm-metadata", | ||
| "wasmparser", | ||
| "wit-parser", | ||
| ] | ||
| [[package]] | ||
| name = "wit-parser" | ||
| version = "0.244.0" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" | ||
| dependencies = [ | ||
| "anyhow", | ||
| "id-arena", | ||
| "indexmap", | ||
| "log", | ||
| "semver", | ||
| "serde", | ||
| "serde_derive", | ||
| "serde_json", | ||
| "unicode-xid", | ||
| "wasmparser", | ||
| ] |
+19
-17
@@ -14,5 +14,5 @@ # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO | ||
| edition = "2024" | ||
| rust-version = "1.92.0" | ||
| rust-version = "1.93.0" | ||
| name = "cranelift-codegen" | ||
| version = "0.131.2" | ||
| version = "0.132.0" | ||
| authors = ["The Cranelift Project Developers"] | ||
@@ -121,19 +121,19 @@ build = "build.rs" | ||
| [dependencies.cranelift-assembler-x64] | ||
| version = "0.131.2" | ||
| version = "0.132.0" | ||
| [dependencies.cranelift-bforest] | ||
| version = "0.131.2" | ||
| version = "0.132.0" | ||
| [dependencies.cranelift-bitset] | ||
| version = "0.131.2" | ||
| version = "0.132.0" | ||
| [dependencies.cranelift-codegen-shared] | ||
| version = "0.131.2" | ||
| version = "0.132.0" | ||
| [dependencies.cranelift-control] | ||
| version = "0.131.2" | ||
| version = "0.132.0" | ||
| default-features = false | ||
| [dependencies.cranelift-entity] | ||
| version = "0.131.2" | ||
| version = "0.132.0" | ||
@@ -150,3 +150,3 @@ [dependencies.gimli] | ||
| [dependencies.hashbrown] | ||
| version = "0.16" | ||
| version = "0.17" | ||
| features = ["default-hasher"] | ||
@@ -169,7 +169,7 @@ default-features = false | ||
| [dependencies.pulley-interpreter] | ||
| version = "=44.0.2" | ||
| version = "=45.0.0" | ||
| optional = true | ||
| [dependencies.regalloc2] | ||
| version = "0.15.0" | ||
| version = "0.15.1" | ||
| features = ["checker"] | ||
@@ -194,2 +194,3 @@ | ||
| optional = true | ||
| default-features = false | ||
@@ -205,10 +206,10 @@ [dependencies.smallvec] | ||
| [dependencies.target-lexicon] | ||
| version = "0.13.0" | ||
| version = "0.13.3" | ||
| [dependencies.wasmtime-core] | ||
| version = "=44.0.2" | ||
| version = "=45.0.0" | ||
| package = "wasmtime-internal-core" | ||
| [dev-dependencies.criterion] | ||
| version = "0.7.0" | ||
| version = "0.8.2" | ||
| features = [ | ||
@@ -224,3 +225,3 @@ "html_reports", | ||
| [dev-dependencies.proptest] | ||
| version = "1.0.0" | ||
| version = "1.11.0" | ||
@@ -231,6 +232,6 @@ [dev-dependencies.similar] | ||
| [build-dependencies.cranelift-codegen-meta] | ||
| version = "0.131.2" | ||
| version = "0.132.0" | ||
| [build-dependencies.cranelift-isle] | ||
| version = "=0.131.2" | ||
| version = "=0.132.0" | ||
@@ -273,3 +274,4 @@ [lints.clippy] | ||
| "cfg(arc_try_new)", | ||
| "cfg(fuzzing)", | ||
| "cfg(gc_zeal)", | ||
| ] |
+57
-15
@@ -176,2 +176,12 @@ //! Alias analysis, consisting of a "last store" pass and a "memory | ||
| /// The result of processing an instruction through alias analysis. | ||
| pub enum OptResult { | ||
| /// No optimization applied. | ||
| None, | ||
| /// A redundant load; alias its result to this value. | ||
| AliasedLoad(Value), | ||
| /// An idempotent store; remove it. | ||
| IdempotentStore, | ||
| } | ||
| /// An alias-analysis pass. | ||
@@ -264,4 +274,2 @@ pub struct AliasAnalysis<'a> { | ||
| /// preorder for maximal reuse. | ||
| /// | ||
| /// Returns `true` if instruction was removed. | ||
| pub fn process_inst( | ||
@@ -272,3 +280,3 @@ &mut self, | ||
| inst: Inst, | ||
| ) -> Option<Value> { | ||
| ) -> OptResult { | ||
| trace!( | ||
@@ -281,4 +289,3 @@ "alias analysis: scanning at inst{} with state {:?} ({:?})", | ||
| let replacing_value = if let Some((address, offset, ty)) = inst_addr_offset_type(func, inst) | ||
| { | ||
| let result = if let Some((address, offset, ty)) = inst_addr_offset_type(func, inst) { | ||
| let address = func.dfg.resolve_aliases(address); | ||
@@ -290,2 +297,28 @@ let opcode = func.dfg.insts[inst].opcode(); | ||
| let store_data = func.dfg.resolve_aliases(store_data); | ||
| // Check for idempotent stores, where we are storing the exact | ||
| // same value back to a location that already has that value. | ||
| let last_store = state.get_last_store(func, inst); | ||
| let check_loc = MemoryLoc { | ||
| last_store, | ||
| address, | ||
| offset, | ||
| ty, | ||
| extending_opcode: get_ext_opcode(opcode), | ||
| }; | ||
| if let Some((def_inst, known_value)) = self.mem_values.get(&check_loc).cloned() { | ||
| if known_value == store_data | ||
| && self.domtree.dominates(def_inst, inst, &func.layout) | ||
| { | ||
| trace!( | ||
| "alias analysis: at inst{}: idempotent store of v{} to loc {:?}", | ||
| inst.index(), | ||
| store_data.index(), | ||
| check_loc | ||
| ); | ||
| return OptResult::IdempotentStore; | ||
| } | ||
| } | ||
| // Otherwise, update our state to reflect this store. | ||
| let mem_loc = MemoryLoc { | ||
@@ -306,3 +339,3 @@ last_store: inst.into(), | ||
| None | ||
| OptResult::None | ||
| } else if opcode.can_load() { | ||
@@ -367,8 +400,11 @@ let last_store = state.get_last_store(func, inst); | ||
| aliased | ||
| match aliased { | ||
| Some(value) => OptResult::AliasedLoad(value), | ||
| None => OptResult::None, | ||
| } | ||
| } else { | ||
| None | ||
| OptResult::None | ||
| } | ||
| } else { | ||
| None | ||
| OptResult::None | ||
| }; | ||
@@ -378,3 +414,3 @@ | ||
| replacing_value | ||
| result | ||
| } | ||
@@ -393,7 +429,13 @@ | ||
| while let Some(inst) = pos.next_inst() { | ||
| if let Some(replaced_result) = self.process_inst(pos.func, &mut state, inst) { | ||
| let result = pos.func.dfg.inst_results(inst)[0]; | ||
| pos.func.dfg.clear_results(inst); | ||
| pos.func.dfg.change_to_alias(result, replaced_result); | ||
| pos.remove_inst_and_step_back(); | ||
| match self.process_inst(pos.func, &mut state, inst) { | ||
| OptResult::None => {} | ||
| OptResult::AliasedLoad(replaced_result) => { | ||
| let result = pos.func.dfg.inst_results(inst)[0]; | ||
| pos.func.dfg.clear_results(inst); | ||
| pos.func.dfg.change_to_alias(result, replaced_result); | ||
| pos.remove_inst_and_step_back(); | ||
| } | ||
| OptResult::IdempotentStore => { | ||
| pos.remove_inst_and_step_back(); | ||
| } | ||
| } | ||
@@ -400,0 +442,0 @@ } |
+33
-26
| //! Support for egraphs represented in the DataFlowGraph. | ||
| use crate::FxHashSet; | ||
| use crate::alias_analysis::{AliasAnalysis, LastStores}; | ||
| use crate::alias_analysis::{AliasAnalysis, LastStores, OptResult}; | ||
| use crate::ctxhash::{CtxEq, CtxHash, NullCtx}; | ||
@@ -305,3 +305,3 @@ use crate::cursor::{Cursor, CursorPosition, FuncCursor}; | ||
| const REWRITE_LIMIT: usize = 5; | ||
| if ctx.rewrite_depth > REWRITE_LIMIT { | ||
| if ctx.rewrite_depth >= REWRITE_LIMIT { | ||
| ctx.stats.rewrite_depth_limit += 1; | ||
@@ -484,27 +484,33 @@ return orig_value; | ||
| // analysis to see if we can optimize it (rewrite in terms of | ||
| // an earlier load or stored value). | ||
| else if let Some(new_result) = | ||
| self.alias_analysis | ||
| // an earlier load or stored value, or remove an idempotent store). | ||
| else { | ||
| match self | ||
| .alias_analysis | ||
| .process_inst(self.func, self.alias_analysis_state, inst) | ||
| { | ||
| self.stats.alias_analysis_removed += 1; | ||
| let result = self.func.dfg.first_result(inst); | ||
| trace!( | ||
| " -> inst {} has result {} replaced with {}", | ||
| inst, result, new_result | ||
| ); | ||
| self.value_to_opt_value[result] = new_result; | ||
| self.available_block[result] = self.available_block[new_result]; | ||
| Some(SkeletonInstSimplification::Remove) | ||
| } | ||
| // Otherwise, generic side-effecting op -- always keep it, and | ||
| // set its results to identity-map to original values. | ||
| else { | ||
| // Set all results to identity-map to themselves | ||
| // in the value-to-opt-value map. | ||
| for &result in self.func.dfg.inst_results(inst) { | ||
| self.value_to_opt_value[result] = result; | ||
| self.available_block[result] = block; | ||
| { | ||
| OptResult::AliasedLoad(new_result) => { | ||
| self.stats.alias_analysis_removed_load += 1; | ||
| let result = self.func.dfg.first_result(inst); | ||
| trace!( | ||
| " -> inst {} has result {} replaced with {}", | ||
| inst, result, new_result | ||
| ); | ||
| self.value_to_opt_value[result] = new_result; | ||
| self.available_block[result] = self.available_block[new_result]; | ||
| Some(SkeletonInstSimplification::Remove) | ||
| } | ||
| OptResult::IdempotentStore => { | ||
| self.stats.alias_analysis_removed_store += 1; | ||
| Some(SkeletonInstSimplification::Remove) | ||
| } | ||
| OptResult::None => { | ||
| // Generic side-effecting op -- always keep it, and | ||
| // set its results to identity-map to original values. | ||
| for &result in self.func.dfg.inst_results(inst) { | ||
| self.value_to_opt_value[result] = result; | ||
| self.available_block[result] = block; | ||
| } | ||
| None | ||
| } | ||
| } | ||
| None | ||
| } | ||
@@ -1066,3 +1072,4 @@ } | ||
| pub(crate) skeleton_inst_gvn: u64, | ||
| pub(crate) alias_analysis_removed: u64, | ||
| pub(crate) alias_analysis_removed_load: u64, | ||
| pub(crate) alias_analysis_removed_store: u64, | ||
| pub(crate) new_inst: u64, | ||
@@ -1069,0 +1076,0 @@ pub(crate) union: u64, |
+23
-15
@@ -350,11 +350,17 @@ //! Implementation of a standard AArch64 ABI. | ||
| let size = if is_apple_cc || is_winch_return { | ||
| // MacOS and Winch aarch64 allows stack slots with | ||
| // sizes less than 8 bytes. They still need to be | ||
| // properly aligned on their natural data alignment, | ||
| // though. | ||
| // MacOS and Winch aarch64 allows stack slots with sizes less than 8 | ||
| // bytes. They still need to be properly aligned on their natural | ||
| // data alignment, though, and this additionally is only applicable | ||
| // for arguments or when there's no argument extension in play. | ||
| // Stack slots for return values with argument extension get their | ||
| // full machine-word-width loaded or stored. | ||
| // | ||
| // Otherwise every arg takes a minimum slot of 8 bytes. (16-byte | ||
| // stack alignment happens separately after all args.) | ||
| let size = if (is_apple_cc || is_winch_return) | ||
| && (args_or_rets == ArgsOrRets::Args | ||
| || param.extension == ir::ArgumentExtension::None) | ||
| { | ||
| size | ||
| } else { | ||
| // Every arg takes a minimum slot of 8 bytes. (16-byte stack | ||
| // alignment happens separately after all args.) | ||
| core::cmp::max(size, 8) | ||
@@ -1197,11 +1203,13 @@ }; | ||
| let needs_linkage_frame = flags.preserve_frame_pointers() | ||
| // The function arguments that are passed on the stack are addressed | ||
| // relative to the Frame Pointer. | ||
| || incoming_args_size > 0 | ||
| || tail_args_size > incoming_args_size | ||
| || clobber_size > 0 | ||
| || fixed_frame_storage_size > 0 | ||
| || outgoing_args_size > 0; | ||
| // Compute linkage frame size. | ||
| let setup_area_size = if flags.preserve_frame_pointers() | ||
| || function_calls != FunctionCalls::None | ||
| // The function arguments that are passed on the stack are addressed | ||
| // relative to the Frame Pointer. | ||
| || incoming_args_size > 0 | ||
| || clobber_size > 0 | ||
| || fixed_frame_storage_size > 0 | ||
| { | ||
| let setup_area_size = if needs_linkage_frame || function_calls == FunctionCalls::Regular { | ||
| 16 // FP, LR | ||
@@ -1208,0 +1216,0 @@ } else { |
@@ -138,2 +138,3 @@ //! ISLE integration glue code for aarch64 lowering. | ||
| key, | ||
| sign_return_address_all: self.backend.isa_flags.sign_return_address_all(), | ||
| new_stack_arg_size, | ||
@@ -161,2 +162,3 @@ }) | ||
| key, | ||
| sign_return_address_all: self.backend.isa_flags.sign_return_address_all(), | ||
| new_stack_arg_size, | ||
@@ -163,0 +165,0 @@ }) |
@@ -21,4 +21,2 @@ //! ARM 64-bit Instruction Set Architecture. | ||
| use cranelift_control::ControlPlane; | ||
| #[cfg(feature = "unwind")] | ||
| use target_lexicon::OperatingSystem; | ||
| use target_lexicon::{Aarch64Architecture, Architecture, Triple}; | ||
@@ -155,13 +153,5 @@ | ||
| fn create_systemv_cie(&self) -> Option<gimli::write::CommonInformationEntry> { | ||
| let is_apple_os = match self.triple.operating_system { | ||
| OperatingSystem::Darwin(_) | ||
| | OperatingSystem::IOS(_) | ||
| | OperatingSystem::MacOSX { .. } | ||
| | OperatingSystem::TvOS(_) => true, | ||
| _ => false, | ||
| }; | ||
| if self.isa_flags.sign_return_address() | ||
| && self.isa_flags.sign_return_address_with_bkey() | ||
| && !is_apple_os | ||
| && !self.triple.operating_system.is_like_darwin() | ||
| { | ||
@@ -190,15 +180,8 @@ unimplemented!( | ||
| fn page_size_align_log2(&self) -> u8 { | ||
| use target_lexicon::*; | ||
| match self.triple().operating_system { | ||
| OperatingSystem::MacOSX { .. } | ||
| | OperatingSystem::Darwin(_) | ||
| | OperatingSystem::IOS(_) | ||
| | OperatingSystem::TvOS(_) => { | ||
| debug_assert_eq!(1 << 14, 0x4000); | ||
| 14 | ||
| } | ||
| _ => { | ||
| debug_assert_eq!(1 << 16, 0x10000); | ||
| 16 | ||
| } | ||
| if self.triple().operating_system.is_like_darwin() { | ||
| debug_assert_eq!(1 << 14, 0x4000); | ||
| 14 | ||
| } else { | ||
| debug_assert_eq!(1 << 16, 0x10000); | ||
| 16 | ||
| } | ||
@@ -205,0 +188,0 @@ } |
@@ -216,74 +216,22 @@ //! ISLE integration glue code for s390x lowering. | ||
| #[inline] | ||
| fn mie3_enabled(&mut self, _: Type) -> Option<()> { | ||
| if self.backend.isa_flags.has_mie3() { | ||
| Some(()) | ||
| } else { | ||
| None | ||
| } | ||
| fn has_mie3(&mut self) -> bool { | ||
| self.backend.isa_flags.has_mie3() | ||
| } | ||
| #[inline] | ||
| fn mie3_disabled(&mut self, _: Type) -> Option<()> { | ||
| if !self.backend.isa_flags.has_mie3() { | ||
| Some(()) | ||
| } else { | ||
| None | ||
| } | ||
| fn has_mie4(&mut self) -> bool { | ||
| self.backend.isa_flags.has_mie4() | ||
| } | ||
| #[inline] | ||
| fn mie4_enabled(&mut self, _: Type) -> Option<()> { | ||
| if self.backend.isa_flags.has_mie4() { | ||
| Some(()) | ||
| } else { | ||
| None | ||
| } | ||
| fn has_vxrs_ext2(&mut self) -> bool { | ||
| self.backend.isa_flags.has_vxrs_ext2() | ||
| } | ||
| #[inline] | ||
| fn mie4_disabled(&mut self, _: Type) -> Option<()> { | ||
| if !self.backend.isa_flags.has_mie4() { | ||
| Some(()) | ||
| } else { | ||
| None | ||
| } | ||
| fn has_vxrs_ext3(&mut self) -> bool { | ||
| self.backend.isa_flags.has_vxrs_ext3() | ||
| } | ||
| #[inline] | ||
| fn vxrs_ext2_enabled(&mut self, _: Type) -> Option<()> { | ||
| if self.backend.isa_flags.has_vxrs_ext2() { | ||
| Some(()) | ||
| } else { | ||
| None | ||
| } | ||
| } | ||
| #[inline] | ||
| fn vxrs_ext2_disabled(&mut self, _: Type) -> Option<()> { | ||
| if !self.backend.isa_flags.has_vxrs_ext2() { | ||
| Some(()) | ||
| } else { | ||
| None | ||
| } | ||
| } | ||
| #[inline] | ||
| fn vxrs_ext3_enabled(&mut self, _: Type) -> Option<()> { | ||
| if self.backend.isa_flags.has_vxrs_ext3() { | ||
| Some(()) | ||
| } else { | ||
| None | ||
| } | ||
| } | ||
| #[inline] | ||
| fn vxrs_ext3_disabled(&mut self, _: Type) -> Option<()> { | ||
| if !self.backend.isa_flags.has_vxrs_ext3() { | ||
| Some(()) | ||
| } else { | ||
| None | ||
| } | ||
| } | ||
| #[inline] | ||
| fn writable_gpr(&mut self, regno: u8) -> WritableReg { | ||
@@ -552,2 +500,8 @@ writable_gpr(regno) | ||
| #[inline] | ||
| fn simm20_from_value(&mut self, val: Value) -> Option<SImm20> { | ||
| let constant = self.u64_from_signed_value(val)? as i64; | ||
| SImm20::maybe_from_i64(constant) | ||
| } | ||
| #[inline] | ||
| fn uimm32shifted_from_value(&mut self, val: Value) -> Option<UImm32Shifted> { | ||
@@ -554,0 +508,0 @@ let constant = self.u64_from_value(val)?; |
@@ -27,2 +27,10 @@ //! Instruction operand sub-components (aka "parts"): definitions and printing. | ||
| /// the wrapped `Reg` (such as that it is of a particular register class). | ||
| /// | ||
| /// Each `reg_mem` / `reg_mem_imm` entry can optionally carry: | ||
| /// * `aligned:BOOL` -- require aligned memory operands (used for SSE | ||
| /// non-VEX encodings). | ||
| /// * `size:BITS` -- the bit width of the value the operand holds. This | ||
| /// is purely a type-level distinction (a sized newtype is a different | ||
| /// Rust type than an unsized one of the same "family"), used to prevent | ||
| /// cross-width operand mix-ups at compile time. | ||
| macro_rules! newtype_of_reg { | ||
@@ -33,4 +41,8 @@ ( | ||
| $newtype_option_writable_reg:ident, | ||
| reg_mem: ($($newtype_reg_mem:ident $(aligned:$aligned:ident)?),*), | ||
| reg_mem_imm: ($($newtype_reg_mem_imm:ident $(aligned:$aligned_imm:ident)?),*), | ||
| reg_mem: ($($newtype_reg_mem:ident | ||
| $(size:$size:literal)? | ||
| $(aligned:$aligned:ident)?),*), | ||
| reg_mem_imm: ($($newtype_reg_mem_imm:ident | ||
| $(size:$size_imm:literal)? | ||
| $(aligned:$aligned_imm:ident)?),*), | ||
| |$check_reg:ident| $check:expr | ||
@@ -151,2 +163,9 @@ ) => { | ||
| impl $newtype_reg_mem { | ||
| $( | ||
| /// The bit width of the value this operand holds. This is | ||
| /// a type-level distinction only; the underlying `RegMem` | ||
| /// does not record the width. | ||
| pub const SIZE_BITS: u32 = $size; | ||
| )? | ||
| /// Construct a `RegMem` newtype from the given `RegMem`, or return | ||
@@ -233,2 +252,9 @@ /// `None` if the `RegMem` is not a valid instance of this `RegMem` | ||
| impl $newtype_reg_mem_imm { | ||
| $( | ||
| /// The bit width of the value this operand holds. This is | ||
| /// a type-level distinction only; the underlying | ||
| /// `RegMemImm` does not record the width. | ||
| pub const SIZE_BITS: u32 = $size_imm; | ||
| )? | ||
| /// Construct this newtype from the given `RegMemImm`, or return | ||
@@ -301,2 +327,6 @@ /// `None` if the `RegMemImm` is not a valid instance of this | ||
| // Define a newtype of `Reg` for general-purpose registers. | ||
| // | ||
| // The sized `GprMemN` / `GprMemImmN` variants indicate the width of | ||
| // the register or memory operand that an instruction operates on; for | ||
| // a memory operand, the width of the load or store in particular. | ||
| newtype_of_reg!( | ||
@@ -306,4 +336,12 @@ Gpr, | ||
| OptionWritableGpr, | ||
| reg_mem: (GprMem), | ||
| reg_mem_imm: (GprMemImm), | ||
| reg_mem: (GprMem, | ||
| GprMem8 size:8, | ||
| GprMem16 size:16, | ||
| GprMem32 size:32, | ||
| GprMem64 size:64), | ||
| reg_mem_imm: (GprMemImm, | ||
| GprMemImm8 size:8, | ||
| GprMemImm16 size:16, | ||
| GprMemImm32 size:32, | ||
| GprMemImm64 size:64), | ||
| |reg| reg.class() == RegClass::Int | ||
@@ -333,2 +371,6 @@ ); | ||
| // Define a newtype of `Reg` for XMM registers. | ||
| // | ||
| // Specific-width newtypes are, as for the GPR case above, used to | ||
| // distinguish the width of the operation particularly when a memory | ||
| // load or store occurs. | ||
| newtype_of_reg!( | ||
@@ -338,4 +380,26 @@ Xmm, | ||
| OptionWritableXmm, | ||
| reg_mem: (XmmMem, XmmMemAligned aligned:true), | ||
| reg_mem_imm: (XmmMemImm, XmmMemAlignedImm aligned:true), | ||
| reg_mem: (XmmMem, | ||
| XmmMem8 size:8, | ||
| XmmMem16 size:16, | ||
| XmmMem32 size:32, | ||
| XmmMem64 size:64, | ||
| XmmMem128 size:128, | ||
| XmmMemAligned aligned:true, | ||
| XmmMemAligned8 size:8 aligned:true, | ||
| XmmMemAligned16 size:16 aligned:true, | ||
| XmmMemAligned32 size:32 aligned:true, | ||
| XmmMemAligned64 size:64 aligned:true, | ||
| XmmMemAligned128 size:128 aligned:true), | ||
| reg_mem_imm: (XmmMemImm, | ||
| XmmMemImm8 size:8, | ||
| XmmMemImm16 size:16, | ||
| XmmMemImm32 size:32, | ||
| XmmMemImm64 size:64, | ||
| XmmMemImm128 size:128, | ||
| XmmMemAlignedImm aligned:true, | ||
| XmmMemAlignedImm8 size:8 aligned:true, | ||
| XmmMemAlignedImm16 size:16 aligned:true, | ||
| XmmMemAlignedImm32 size:32 aligned:true, | ||
| XmmMemAlignedImm64 size:64 aligned:true, | ||
| XmmMemAlignedImm128 size:128 aligned:true), | ||
| |reg| reg.class() == RegClass::Float | ||
@@ -342,0 +406,0 @@ ); |
+144
-7
@@ -78,2 +78,13 @@ //! Shared ISLE prelude implementation for optimization (mid-end) and | ||
| #[inline] | ||
| fn imm64_udiv(&mut self, ty: Type, x: Imm64, y: Imm64) -> Option<Imm64> { | ||
| let type_width = ty.bits(); | ||
| assert!(type_width <= 64); | ||
| let mask = self.ty_mask(ty); | ||
| let x = (x.bits() as u64) & mask; | ||
| let y = (y.bits() as u64) & mask; | ||
| let result = x.checked_div(y)?; | ||
| Some(Imm64::new(result as i64).mask_to_width(type_width)) | ||
| } | ||
| #[inline] | ||
| fn imm64_srem(&mut self, ty: Type, x: Imm64, y: Imm64) -> Option<Imm64> { | ||
@@ -94,2 +105,121 @@ // Sign extend `x` and `y`. | ||
| #[inline] | ||
| fn imm64_urem(&mut self, ty: Type, x: Imm64, y: Imm64) -> Option<Imm64> { | ||
| let type_width = ty.bits(); | ||
| assert!(type_width <= 64); | ||
| let mask = self.ty_mask(ty); | ||
| let x = (x.bits() as u64) & mask; | ||
| let y = (y.bits() as u64) & mask; | ||
| let result = x.checked_rem(y)?; | ||
| Some(Imm64::new(result as i64).mask_to_width(type_width)) | ||
| } | ||
| #[inline] | ||
| fn imm64_add(&mut self, ty: Type, x: Imm64, y: Imm64) -> Imm64 { | ||
| let ty_mask = self.ty_mask(ty) as i64; | ||
| Imm64::new(x.bits().wrapping_add(y.bits()) & ty_mask) | ||
| } | ||
| #[inline] | ||
| fn imm64_sub(&mut self, ty: Type, x: Imm64, y: Imm64) -> Imm64 { | ||
| let ty_mask = self.ty_mask(ty) as i64; | ||
| Imm64::new(x.bits().wrapping_sub(y.bits()) & ty_mask) | ||
| } | ||
| #[inline] | ||
| fn imm64_mul(&mut self, ty: Type, x: Imm64, y: Imm64) -> Imm64 { | ||
| let ty_mask = self.ty_mask(ty) as i64; | ||
| Imm64::new(x.bits().wrapping_mul(y.bits()) & ty_mask) | ||
| } | ||
| #[inline] | ||
| fn imm64_and(&mut self, ty: Type, x: Imm64, y: Imm64) -> Imm64 { | ||
| let ty_mask = self.ty_mask(ty) as i64; | ||
| Imm64::new((x.bits() & y.bits()) & ty_mask) | ||
| } | ||
| #[inline] | ||
| fn imm64_or(&mut self, ty: Type, x: Imm64, y: Imm64) -> Imm64 { | ||
| let ty_mask = self.ty_mask(ty) as i64; | ||
| Imm64::new((x.bits() | y.bits()) & ty_mask) | ||
| } | ||
| #[inline] | ||
| fn imm64_xor(&mut self, ty: Type, x: Imm64, y: Imm64) -> Imm64 { | ||
| let ty_mask = self.ty_mask(ty) as i64; | ||
| Imm64::new((x.bits() ^ y.bits()) & ty_mask) | ||
| } | ||
| #[inline] | ||
| fn imm64_not(&mut self, ty: Type, x: Imm64) -> Imm64 { | ||
| let ty_mask = self.ty_mask(ty) as i64; | ||
| Imm64::new((!x.bits()) & ty_mask) | ||
| } | ||
| #[inline] | ||
| fn imm64_neg(&mut self, ty: Type, x: Imm64) -> Imm64 { | ||
| let ty_mask = self.ty_mask(ty) as i64; | ||
| Imm64::new(x.bits().wrapping_neg() & ty_mask) | ||
| } | ||
| #[inline] | ||
| fn imm64_abs(&mut self, ty: Type, x: Imm64) -> Option<Imm64> { | ||
| let type_width = ty.bits(); | ||
| assert!(type_width <= 64); | ||
| let x = x.sign_extend_from_width(type_width).bits(); | ||
| let shift = 64 - type_width; | ||
| let min = ((self.ty_smin(ty) as i64) << shift) >> shift; | ||
| if x == min { | ||
| return None; | ||
| } | ||
| Some(Imm64::new(x.abs()).mask_to_width(type_width)) | ||
| } | ||
| #[inline] | ||
| fn imm64_ilog2(&mut self, ty: Type, x: Imm64) -> Option<Imm64> { | ||
| let type_width = ty.bits(); | ||
| assert!(type_width <= 64); | ||
| let masked = (x.bits() as u64) & self.ty_mask(ty); | ||
| let result = masked.checked_ilog2()?; | ||
| Some(Imm64::new(result.into())) | ||
| } | ||
| #[inline] | ||
| fn imm64_umin(&mut self, ty: Type, x: Imm64, y: Imm64) -> Imm64 { | ||
| let ty_mask = self.ty_mask(ty); | ||
| let x_u = (x.bits() as u64) & ty_mask; | ||
| let y_u = (y.bits() as u64) & ty_mask; | ||
| Imm64::new((if x_u <= y_u { x_u } else { y_u }) as i64) | ||
| } | ||
| #[inline] | ||
| fn imm64_umax(&mut self, ty: Type, x: Imm64, y: Imm64) -> Imm64 { | ||
| let ty_mask = self.ty_mask(ty); | ||
| let x_u = (x.bits() as u64) & ty_mask; | ||
| let y_u = (y.bits() as u64) & ty_mask; | ||
| Imm64::new((if x_u >= y_u { x_u } else { y_u }) as i64) | ||
| } | ||
| #[inline] | ||
| fn imm64_smin(&mut self, ty: Type, x: Imm64, y: Imm64) -> Imm64 { | ||
| let type_width = ty.bits(); | ||
| assert!(type_width <= 64); | ||
| let x_s = x.sign_extend_from_width(type_width).bits(); | ||
| let y_s = y.sign_extend_from_width(type_width).bits(); | ||
| let selected = if x_s <= y_s { x_s } else { y_s }; | ||
| Imm64::new(selected).mask_to_width(type_width) | ||
| } | ||
| #[inline] | ||
| fn imm64_smax(&mut self, ty: Type, x: Imm64, y: Imm64) -> Imm64 { | ||
| let type_width = ty.bits(); | ||
| assert!(type_width <= 64); | ||
| let x_s = x.sign_extend_from_width(type_width).bits(); | ||
| let y_s = y.sign_extend_from_width(type_width).bits(); | ||
| let selected = if x_s >= y_s { x_s } else { y_s }; | ||
| Imm64::new(selected).mask_to_width(type_width) | ||
| } | ||
| #[inline] | ||
| fn imm64_shl(&mut self, ty: Type, x: Imm64, y: Imm64) -> Imm64 { | ||
@@ -420,2 +550,11 @@ // Mask off any excess shift bits. | ||
| #[inline] | ||
| fn ty_int_vec128(&mut self, ty: Type) -> Option<Type> { | ||
| if ty.is_int() || (ty.is_vector() && ty.bits() == 128 && ty.lane_type().is_int()) { | ||
| Some(ty) | ||
| } else { | ||
| None | ||
| } | ||
| } | ||
| #[inline] | ||
| fn ty_scalar(&mut self, ty: Type) -> Option<Type> { | ||
@@ -798,6 +937,6 @@ if ty.lane_count() == 1 { Some(ty) } else { None } | ||
| fn u64_replicated_u32(&mut self, val: u64) -> Option<u64> { | ||
| fn u64_replicated_u32(&mut self, val: u64) -> Option<u32> { | ||
| let low32 = val as u32 as u64; | ||
| if (low32 | (low32 << 32)) == val { | ||
| Some(low32) | ||
| Some(val as u32) | ||
| } else { | ||
@@ -808,7 +947,6 @@ None | ||
| fn u32_replicated_u16(&mut self, val: u64) -> Option<u64> { | ||
| let val = val as u32; | ||
| fn u32_replicated_u16(&mut self, val: u32) -> Option<u16> { | ||
| let low16 = val as u16 as u32; | ||
| if (low16 | (low16 << 16)) == val { | ||
| Some(low16.into()) | ||
| Some(low16 as u16) | ||
| } else { | ||
@@ -819,4 +957,3 @@ None | ||
| fn u16_replicated_u8(&mut self, val: u64) -> Option<u8> { | ||
| let val = val as u16; | ||
| fn u16_replicated_u8(&mut self, val: u16) -> Option<u8> { | ||
| let low8 = val as u8 as u16; | ||
@@ -823,0 +960,0 @@ if (low8 | (low8 << 8)) == val { |
+23
-11
@@ -116,2 +116,3 @@ //! Harvest left-hand side superoptimization candidates. | ||
| | ir::Opcode::BxorImm | ||
| | ir::Opcode::Bnot | ||
| | ir::Opcode::Ishl | ||
@@ -338,2 +339,11 @@ | ir::Opcode::IshlImm | ||
| } | ||
| (ir::Opcode::Bnot, _) => { | ||
| let a = arg(allocs, 0); | ||
| let b = ast::Constant { | ||
| value: -1, | ||
| r#type: souper_type_of(&func.dfg, val), | ||
| } | ||
| .into(); | ||
| ast::Instruction::Xor { a, b }.into() | ||
| } | ||
| (ir::Opcode::Ishl, _) => { | ||
@@ -439,3 +449,3 @@ let a = arg(allocs, 0); | ||
| let b = arg(allocs, 1); | ||
| match cond { | ||
| let cmp = match cond { | ||
| ir::condcodes::IntCC::Equal => ast::Instruction::Eq { a, b }.into(), | ||
@@ -450,3 +460,3 @@ ir::condcodes::IntCC::NotEqual => ast::Instruction::Ne { a, b }.into(), | ||
| ir::condcodes::IntCC::UnsignedLessThanOrEqual => { | ||
| ast::Instruction::Sle { a, b }.into() | ||
| ast::Instruction::Ule { a, b }.into() | ||
| } | ||
@@ -457,2 +467,12 @@ ir::condcodes::IntCC::SignedLessThanOrEqual => { | ||
| _ => ast::AssignmentRhs::Var, | ||
| }; | ||
| match cmp { | ||
| ast::AssignmentRhs::Var => ast::AssignmentRhs::Var, | ||
| cmp => { | ||
| let cmp = lhs | ||
| .assignment(None, Some(ast::Type { width: 1 }), cmp, vec![]) | ||
| .into(); | ||
| ast::Instruction::Zext { a: cmp }.into() | ||
| } | ||
| } | ||
@@ -542,11 +562,3 @@ } | ||
| assert_eq!(ty.lane_count(), 1); | ||
| let width = match dfg.value_def(val).inst() { | ||
| Some(inst) | ||
| if dfg.insts[inst].opcode() == ir::Opcode::IcmpImm | ||
| || dfg.insts[inst].opcode() == ir::Opcode::Icmp => | ||
| { | ||
| 1 | ||
| } | ||
| _ => ty.bits().try_into().unwrap(), | ||
| }; | ||
| let width = ty.bits().try_into().unwrap(); | ||
| Some(ast::Type { width }) | ||
@@ -553,0 +565,0 @@ } |
+1
-1
@@ -294,3 +294,3 @@ //! Pass timing. | ||
| let now = monotonic_instant(); | ||
| let duration = self.start.duration_since(now); | ||
| let duration = now.duration_since(self.start); | ||
| log::debug!("timing: Ending {}: {}ms", self.pass, duration.as_millis()); | ||
@@ -297,0 +297,0 @@ let old_cur = CURRENT_PASS.with(|p| p.replace(self.prev)); |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet