![]() 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. |
||
---|---|---|
.. | ||
allocs.ll | ||
allocs.out.ll | ||
allocs2.go | ||
gc-stackslots.ll | ||
gc-stackslots.out.ll | ||
globals-function-sections.ll | ||
globals-function-sections.out.ll | ||
interface.ll | ||
interface.out.ll | ||
interrupt.ll | ||
interrupt.out.ll | ||
maps.ll | ||
maps.out.ll | ||
panic.ll | ||
panic.out.ll | ||
reflect-implements.ll | ||
reflect-implements.out.ll | ||
reflect.go | ||
stacksize.ll | ||
stacksize.out.ll | ||
stringequal.ll | ||
stringequal.out.ll | ||
stringtobytes.ll | ||
stringtobytes.out.ll | ||
wasm-abi.ll | ||
wasm-abi.out.ll |