Currently wasmtime will generate a `SignatureIndex`-per-type in the module itself, even if the module itself declares the same type multiple times. To make matters worse if the same type is declared across multiple modules used in a module-linking-using-module then the signature will be recorded each time it's declared. This commit adds a simple map to module translation to deduplicate these function types. This should improve the performance of module-linking graphs where the same function type may be declared in a number of modules. For modules that don't use module linking this adds an extra map that's not used too often, but the time spent managing it should be dwarfed by other compile tasks.
This is the wasmtime-environ crate, which contains the implementations
of the ModuleEnvironment and FuncEnvironment traits from
cranelift-wasm. They effectively
implement an ABI for basic wasm compilation that defines how linear memories
are allocated, how indirect calls work, and other details. They can be used
for JITing, native object files, or other purposes.