We might be spending a non-trivial amount of time creating FnAbis and adjusting them, so we should investigate caching them, similar to how we cache LLVM Types we compute from Rust Tys.
After #65947, this is what's left:
FnAbi::of_instance: takes ty::Instance, easy to cache
- we should be able to make this a query, like
layout_of is
FnAbi::of_fn_ptr: takes ty::PolyFnSig, might be more expensive
- well,
inputs_and_outputs is compared/hashed by pointer nowadays, isn't it?
- creating LLVM
Types for fn pointers is already cached itself, but calls of fn pointers also require FnAbis
- this is likely used less than
FnAbi::of_instance, so it's lower priority
We might be spending a non-trivial amount of time creating
FnAbis and adjusting them, so we should investigate caching them, similar to how we cache LLVMTypes we compute from RustTys.After #65947, this is what's left:
FnAbi::of_instance: takesty::Instance, easy to cachelayout_ofisFnAbi::of_fn_ptr: takesty::PolyFnSig, might be more expensiveinputs_and_outputsis compared/hashed by pointer nowadays, isn't it?Types forfnpointers is already cached itself, but calls offnpointers also requireFnAbisFnAbi::of_instance, so it's lower priority