From a91e15aaf448d6da494d3427eb4718677a392bba Mon Sep 17 00:00:00 2001 From: Afonso Bordado Date: Sat, 24 Sep 2022 15:00:33 +0100 Subject: [PATCH] Update JIT Cranelift version --- Cargo.lock | 145 ++++++++++++++++++++++++++++++---------- jit/Cargo.toml | 6 +- jit/src/instructions.rs | 4 +- jit/src/lib.rs | 10 +-- 4 files changed, 116 insertions(+), 49 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 638f9d2e8..d31f62301 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -70,6 +70,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "arrayvec" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" + [[package]] name = "ascii" version = "1.0.0" @@ -183,6 +189,12 @@ version = "3.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f1e260c3a9040a7c19a12468758f4c16f31a81a1fe087482be9570ec864bb6c" +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + [[package]] name = "bzip2" version = "0.4.3" @@ -338,9 +350,9 @@ dependencies = [ [[package]] name = "cranelift" -version = "0.76.0" +version = "0.88.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f499639a3d140f366a329a35b0739063e5587a33c625219139698e9436203dfc" +checksum = "d52b934a4d45a8fca3f0e1be785dc086bacf6a630a70024d82ba13302b9748fe" dependencies = [ "cranelift-codegen", "cranelift-frontend", @@ -348,56 +360,58 @@ dependencies = [ [[package]] name = "cranelift-bforest" -version = "0.76.0" +version = "0.88.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e6bea67967505247f54fa2c85cf4f6e0e31c4e5692c9b70e4ae58e339067333" +checksum = "b27bbd3e6c422cf6282b047bcdd51ecd9ca9f3497a3be0132ffa08e509b824b0" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.76.0" +version = "0.88.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48194035d2752bdd5bdae429e3ab88676e95f52a2b1355a5d4e809f9e39b1d74" +checksum = "872f5d4557a411b087bd731df6347c142ae1004e6467a144a7e33662e5715a01" dependencies = [ + "arrayvec", + "bumpalo", "cranelift-bforest", "cranelift-codegen-meta", "cranelift-codegen-shared", "cranelift-entity", + "cranelift-isle", "log", - "regalloc", + "regalloc2", "smallvec", "target-lexicon", ] [[package]] name = "cranelift-codegen-meta" -version = "0.76.0" +version = "0.88.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976efb22fcab4f2cd6bd4e9913764616a54d895c1a23530128d04e03633c555f" +checksum = "21b49fdebb29c62c1fc4da1eeebd609e9d530ecde24a9876def546275f73a244" dependencies = [ "cranelift-codegen-shared", - "cranelift-entity", ] [[package]] name = "cranelift-codegen-shared" -version = "0.76.0" +version = "0.88.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dabb5fe66e04d4652e434195b45ae65b5c8172d520247b8f66d8df42b2b45dc" +checksum = "5fc0c091e2db055d4d7f6b7cec2d2ead286bcfaea3357c6a52c2a2613a8cb5ac" [[package]] name = "cranelift-entity" -version = "0.76.0" +version = "0.88.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3329733e4d4b8e91c809efcaa4faee80bf66f20164e3dd16d707346bd3494799" +checksum = "354a9597be87996c9b278655e68b8447f65dd907256855ad773864edee8d985c" [[package]] name = "cranelift-frontend" -version = "0.76.0" +version = "0.88.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "279afcc0d3e651b773f94837c3d581177b348c8d69e928104b2e9fccb226f921" +checksum = "0cd8dd3fb8b82c772f4172e87ae1677b971676fffa7c4e3398e3047e650a266b" dependencies = [ "cranelift-codegen", "log", @@ -406,10 +420,16 @@ dependencies = [ ] [[package]] -name = "cranelift-jit" -version = "0.76.0" +name = "cranelift-isle" +version = "0.88.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6f2d58575eff238e2554a5df7ea8dc52a2825269539617bd32ee44abaecf373" +checksum = "b82527802b1f7d8da288adc28f1dc97ea52943f5871c041213f7b5035ac698a7" + +[[package]] +name = "cranelift-jit" +version = "0.88.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54a6d007394ef18312fc6616fb99618844f13dff01edbbbc4a451c2b7cd5c8f4" dependencies = [ "anyhow", "cranelift-codegen", @@ -420,26 +440,24 @@ dependencies = [ "log", "region", "target-lexicon", - "winapi", + "windows-sys 0.36.1", ] [[package]] name = "cranelift-module" -version = "0.76.0" +version = "0.88.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e241d0b091e80f41cac341fd51a80619b344add0e168e0587ba9e368d01d2c1" +checksum = "a106dd90ab4071f9e16b9fd3c2057d61c37f35af7c8f079c9ec59d6ede5b2cef" dependencies = [ "anyhow", "cranelift-codegen", - "cranelift-entity", - "log", ] [[package]] name = "cranelift-native" -version = "0.76.0" +version = "0.88.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c04d1fe6a5abb5bb0edc78baa8ef238370fb8e389cc88b6d153f7c3e9680425" +checksum = "c30ba8b910f1be023af0c39109cb28a8809734942a6b3eecbf2de8993052ea5e" dependencies = [ "cranelift-codegen", "libc", @@ -770,6 +788,15 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + [[package]] name = "generic-array" version = "0.14.4" @@ -1364,7 +1391,7 @@ dependencies = [ "libc", "redox_syscall 0.2.10", "smallvec", - "windows-sys", + "windows-sys 0.34.0", ] [[package]] @@ -1625,13 +1652,14 @@ dependencies = [ ] [[package]] -name = "regalloc" -version = "0.0.31" +name = "regalloc2" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "571f7f397d61c4755285cd37853fe8e03271c243424a907415909379659381c5" +checksum = "d43a209257d978ef079f3d446331d0f1794f5e0fc19b306a199983857833a779" dependencies = [ + "fxhash", "log", - "rustc-hash", + "slice-group-by", "smallvec", ] @@ -1692,12 +1720,6 @@ dependencies = [ "syn-ext", ] -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - [[package]] name = "rustc_version" version = "0.4.0" @@ -2221,6 +2243,12 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "533494a8f9b724d33625ab53c6c4800f7cc445895924a8ef649222dcb76e938b" +[[package]] +name = "slice-group-by" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" + [[package]] name = "smallvec" version = "1.7.0" @@ -2904,12 +2932,31 @@ dependencies = [ "windows_x86_64_msvc 0.34.0", ] +[[package]] +name = "windows-sys" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +dependencies = [ + "windows_aarch64_msvc 0.36.1", + "windows_i686_gnu 0.36.1", + "windows_i686_msvc 0.36.1", + "windows_x86_64_gnu 0.36.1", + "windows_x86_64_msvc 0.36.1", +] + [[package]] name = "windows_aarch64_msvc" version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" +[[package]] +name = "windows_aarch64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" + [[package]] name = "windows_aarch64_msvc" version = "0.39.0" @@ -2922,6 +2969,12 @@ version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" +[[package]] +name = "windows_i686_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" + [[package]] name = "windows_i686_gnu" version = "0.39.0" @@ -2934,6 +2987,12 @@ version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" +[[package]] +name = "windows_i686_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" + [[package]] name = "windows_i686_msvc" version = "0.39.0" @@ -2946,6 +3005,12 @@ version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" +[[package]] +name = "windows_x86_64_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" + [[package]] name = "windows_x86_64_gnu" version = "0.39.0" @@ -2958,6 +3023,12 @@ version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" +[[package]] +name = "windows_x86_64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" + [[package]] name = "windows_x86_64_msvc" version = "0.39.0" diff --git a/jit/Cargo.toml b/jit/Cargo.toml index 1b07ba88e..efe3dd8de 100644 --- a/jit/Cargo.toml +++ b/jit/Cargo.toml @@ -12,9 +12,9 @@ autotests = false [dependencies] rustpython-compiler-core = { path = "../compiler/core", version = "0.1.2" } -cranelift = "0.76.0" -cranelift-jit = "0.76.0" -cranelift-module = "0.76.0" +cranelift = "0.88.0" +cranelift-jit = "0.88.0" +cranelift-module = "0.88.0" libffi = "2.0.0" num-traits = "0.2" thiserror = "1.0" diff --git a/jit/src/instructions.rs b/jit/src/instructions.rs index 13f93bda8..f193e164a 100644 --- a/jit/src/instructions.rs +++ b/jit/src/instructions.rs @@ -194,7 +194,7 @@ impl<'a, 'b> FunctionCompiler<'a, 'b> { self.builder.ins().brz(val, then_block, &[]); let block = self.builder.create_block(); - self.builder.ins().fallthrough(block, &[]); + self.builder.ins().jump(block, &[]); self.builder.switch_to_block(block); Ok(()) @@ -207,7 +207,7 @@ impl<'a, 'b> FunctionCompiler<'a, 'b> { self.builder.ins().brnz(val, then_block, &[]); let block = self.builder.create_block(); - self.builder.ins().fallthrough(block, &[]); + self.builder.ins().jump(block, &[]); self.builder.switch_to_block(block); Ok(()) diff --git a/jit/src/lib.rs b/jit/src/lib.rs index 8c45a4776..6e3ca9406 100644 --- a/jit/src/lib.rs +++ b/jit/src/lib.rs @@ -35,7 +35,8 @@ struct Jit { impl Jit { fn new() -> Self { - let builder = JITBuilder::new(cranelift_module::default_libcall_names()); + let builder = JITBuilder::new(cranelift_module::default_libcall_names()) + .expect("Failed to build JITBuilder"); let module = JITModule::new(builder); Self { builder_context: FunctionBuilderContext::new(), @@ -80,12 +81,7 @@ impl Jit { &self.ctx.func.signature, )?; - self.module.define_function( - id, - &mut self.ctx, - &mut codegen::binemit::NullTrapSink {}, - &mut codegen::binemit::NullStackMapSink {}, - )?; + self.module.define_function(id, &mut self.ctx)?; self.module.clear_context(&mut self.ctx);