![]() This is a big commit that changes the way runtime type information is stored in the binary. Instead of compressing it and storing it in a number of sidetables, it is stored similar to how the Go compiler toolchain stores it (but still more compactly). This has a number of advantages: * It is much easier to add new features to reflect support. They can simply be added to these structs without requiring massive changes (especially in the reflect lowering pass). * It removes the reflect lowering pass, which was a large amount of hard to understand and debug code. * The reflect lowering pass also required merging all LLVM IR into one module, which is terrible for performance especially when compiling large amounts of code. See issue 2870 for details. * It is (probably!) easier to reason about for the compiler. The downside is that it increases code size a bit, especially when reflect is involved. I hope to fix some of that in later patches. |
||
---|---|---|
.. | ||
alloc.ll | ||
alloc.out.ll | ||
basic.ll | ||
basic.out.ll | ||
consteval.ll | ||
consteval.out.ll | ||
interface.ll | ||
interface.out.ll | ||
phi.ll | ||
phi.out.ll | ||
revert.ll | ||
revert.out.ll | ||
slice-copy.ll | ||
slice-copy.out.ll |