MCPcopy Create free account
hub / github.com/bytecodealliance/wasmtime / build_variable_pool

Method build_variable_pool

cranelift/fuzzgen/src/function_generator.rs:1894–1934  ·  view source on GitHub ↗
(&mut self, builder: &mut FunctionBuilder)

Source from the content-addressed store, hash-verified

1892 }
1893
1894 fn build_variable_pool(&mut self, builder: &mut FunctionBuilder) -> Result<()> {
1895 let block = builder.current_block().unwrap();
1896
1897 // Define variables for the function signature
1898 let mut vars: Vec<_> = builder
1899 .func
1900 .signature
1901 .params
1902 .iter()
1903 .map(|param| param.value_type)
1904 .zip(builder.block_params(block).iter().copied())
1905 .collect();
1906
1907 // Create a pool of vars that are going to be used in this function
1908 for _ in 0..self.param(&self.config.vars_per_function)? {
1909 let ty = self.u._type((&*self.isa).supports_simd())?;
1910 let value = self.generate_const(builder, ty)?;
1911 vars.push((ty, value));
1912 }
1913
1914 for (ty, value) in vars.into_iter() {
1915 let var = builder.declare_var(ty);
1916
1917 // Randomly declare variables as needing a stack map.
1918 // We limit these to only types that have fewer than 16 bytes
1919 // since the stack map mechanism does not support larger types.
1920 if ty.bytes() <= 16 && self.u.arbitrary()? {
1921 builder.declare_var_needs_stack_map(var);
1922 }
1923
1924 builder.def_var(var, value);
1925
1926 self.resources
1927 .vars
1928 .entry(ty)
1929 .or_insert_with(Vec::new)
1930 .push(var);
1931 }
1932
1933 Ok(())
1934 }
1935
1936 /// We generate a function in multiple stages:
1937 ///

Callers 1

generateMethod · 0.80

Calls 15

OkFunction · 0.85
collectMethod · 0.80
copiedMethod · 0.80
_typeMethod · 0.80
supports_simdMethod · 0.80
generate_constMethod · 0.80
declare_varMethod · 0.80
or_insert_withMethod · 0.80
unwrapMethod · 0.45
current_blockMethod · 0.45
mapMethod · 0.45

Tested by

no test coverage detected