Allow instance allocators control over module compilation.
This commit introduces two new methods on `InstanceAllocator`: * `validate_module` - this method is used to validate a module after translation but before compilation. It will be used for the upcoming pooling allocator to ensure a module being compiled adheres to the limits of the allocator. * `adjust_tunables` - this method is used to adjust the `Tunables` given the JIT compiler. The pooling allocator will use this to force all memories to be static during compilation.
This commit is contained in:
2
crates/cache/src/lib.rs
vendored
2
crates/cache/src/lib.rs
vendored
@@ -43,7 +43,7 @@ impl<'config> ModuleCacheEntry<'config> {
|
||||
}
|
||||
|
||||
/// Gets cached data if state matches, otherwise calls the `compute`.
|
||||
pub fn get_data<T, U, E>(&self, state: T, compute: fn(T) -> Result<U, E>) -> Result<U, E>
|
||||
pub fn get_data<T, U, E>(&self, state: T, compute: impl Fn(T) -> Result<U, E>) -> Result<U, E>
|
||||
where
|
||||
T: Hash,
|
||||
U: Serialize + for<'a> Deserialize<'a>,
|
||||
|
||||
80
crates/cache/src/tests.rs
vendored
80
crates/cache/src/tests.rs
vendored
@@ -65,28 +65,68 @@ fn test_write_read_cache() {
|
||||
let entry1 = ModuleCacheEntry::from_inner(ModuleCacheEntryInner::new(compiler1, &cache_config));
|
||||
let entry2 = ModuleCacheEntry::from_inner(ModuleCacheEntryInner::new(compiler2, &cache_config));
|
||||
|
||||
entry1.get_data::<_, i32, i32>(1, |_| Ok(100)).unwrap();
|
||||
entry1.get_data::<_, i32, i32>(1, |_| panic!()).unwrap();
|
||||
entry1
|
||||
.get_data(1, |_| -> Result<i32, ()> { Ok(100) })
|
||||
.unwrap();
|
||||
entry1
|
||||
.get_data(1, |_| -> Result<i32, ()> { panic!() })
|
||||
.unwrap();
|
||||
|
||||
entry1.get_data::<_, i32, i32>(2, |_| Ok(100)).unwrap();
|
||||
entry1.get_data::<_, i32, i32>(1, |_| panic!()).unwrap();
|
||||
entry1.get_data::<_, i32, i32>(2, |_| panic!()).unwrap();
|
||||
entry1
|
||||
.get_data(2, |_| -> Result<i32, ()> { Ok(100) })
|
||||
.unwrap();
|
||||
entry1
|
||||
.get_data(1, |_| -> Result<i32, ()> { panic!() })
|
||||
.unwrap();
|
||||
entry1
|
||||
.get_data(2, |_| -> Result<i32, ()> { panic!() })
|
||||
.unwrap();
|
||||
|
||||
entry1.get_data::<_, i32, i32>(3, |_| Ok(100)).unwrap();
|
||||
entry1.get_data::<_, i32, i32>(1, |_| panic!()).unwrap();
|
||||
entry1.get_data::<_, i32, i32>(2, |_| panic!()).unwrap();
|
||||
entry1.get_data::<_, i32, i32>(3, |_| panic!()).unwrap();
|
||||
entry1
|
||||
.get_data(3, |_| -> Result<i32, ()> { Ok(100) })
|
||||
.unwrap();
|
||||
entry1
|
||||
.get_data(1, |_| -> Result<i32, ()> { panic!() })
|
||||
.unwrap();
|
||||
entry1
|
||||
.get_data(2, |_| -> Result<i32, ()> { panic!() })
|
||||
.unwrap();
|
||||
entry1
|
||||
.get_data(3, |_| -> Result<i32, ()> { panic!() })
|
||||
.unwrap();
|
||||
|
||||
entry1.get_data::<_, i32, i32>(4, |_| Ok(100)).unwrap();
|
||||
entry1.get_data::<_, i32, i32>(1, |_| panic!()).unwrap();
|
||||
entry1.get_data::<_, i32, i32>(2, |_| panic!()).unwrap();
|
||||
entry1.get_data::<_, i32, i32>(3, |_| panic!()).unwrap();
|
||||
entry1.get_data::<_, i32, i32>(4, |_| panic!()).unwrap();
|
||||
entry1
|
||||
.get_data(4, |_| -> Result<i32, ()> { Ok(100) })
|
||||
.unwrap();
|
||||
entry1
|
||||
.get_data(1, |_| -> Result<i32, ()> { panic!() })
|
||||
.unwrap();
|
||||
entry1
|
||||
.get_data(2, |_| -> Result<i32, ()> { panic!() })
|
||||
.unwrap();
|
||||
entry1
|
||||
.get_data(3, |_| -> Result<i32, ()> { panic!() })
|
||||
.unwrap();
|
||||
entry1
|
||||
.get_data(4, |_| -> Result<i32, ()> { panic!() })
|
||||
.unwrap();
|
||||
|
||||
entry2.get_data::<_, i32, i32>(1, |_| Ok(100)).unwrap();
|
||||
entry1.get_data::<_, i32, i32>(1, |_| panic!()).unwrap();
|
||||
entry1.get_data::<_, i32, i32>(2, |_| panic!()).unwrap();
|
||||
entry1.get_data::<_, i32, i32>(3, |_| panic!()).unwrap();
|
||||
entry1.get_data::<_, i32, i32>(4, |_| panic!()).unwrap();
|
||||
entry2.get_data::<_, i32, i32>(1, |_| panic!()).unwrap();
|
||||
entry2
|
||||
.get_data(1, |_| -> Result<i32, ()> { Ok(100) })
|
||||
.unwrap();
|
||||
entry1
|
||||
.get_data(1, |_| -> Result<i32, ()> { panic!() })
|
||||
.unwrap();
|
||||
entry1
|
||||
.get_data(2, |_| -> Result<i32, ()> { panic!() })
|
||||
.unwrap();
|
||||
entry1
|
||||
.get_data(3, |_| -> Result<i32, ()> { panic!() })
|
||||
.unwrap();
|
||||
entry1
|
||||
.get_data(4, |_| -> Result<i32, ()> { panic!() })
|
||||
.unwrap();
|
||||
entry2
|
||||
.get_data(1, |_| -> Result<i32, ()> { panic!() })
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user