tinygo/compiler
Ayke van Laethem 19dec048b0 compiler: do not check for impossible type asserts
Previously there was code to avoid impossible type asserts but it wasn't
great and in fact was too aggressive when combined with reflection.

This commit improves this by checking all types that exist in the
program that may appear in an interface (even struct fields and the
like) but without creating runtime.typecodeID objects with the type
assert. This has two advantages:

  * As mentioned, it optimizes impossible type asserts away.
  * It allows methods on types that were only asserted on (in
    runtime.typeAssert) but never used in an interface to be optimized
    away using GlobalDCE. This may have a cascading effect so that other
    parts of the code can be further optimized.

This sometimes massively improves code size and mostly negates the code
size regression of the previous commit.
2021-03-23 14:32:33 +01:00
..
ircheck compiler: move IR checker to separate package 2020-03-21 15:45:25 +01:00
llvmutil compiler: move settings to a separate Config struct 2021-01-29 14:49:58 +01:00
testdata compiler: do not emit nil checks for *ssa.Alloc instructions 2021-03-22 11:35:06 +01:00
asserts.go compiler: do not emit nil checks for *ssa.Alloc instructions 2021-03-22 11:35:06 +01:00
atomic.go compiler: work around an ARM backend bug in LLVM 2021-02-03 14:49:41 +01:00
calls.go compiler: remove ir package 2021-01-24 15:39:15 +01:00
channel.go compiler: support all kinds of deferred builtins 2021-01-24 09:28:09 +01:00
compiler.go compiler: do not check for impossible type asserts 2021-03-23 14:32:33 +01:00
compiler_test.go compiler: only run tests on LLVM 11 or above 2021-03-22 11:35:06 +01:00
defer.go builder, compiler: compile and cache packages in parallel 2021-03-21 11:51:35 +01:00
errors.go compiler: remove ir package 2021-01-24 15:39:15 +01:00
func.go builder, compiler: compile and cache packages in parallel 2021-03-21 11:51:35 +01:00
gc.go compiler: track the result of string concatenation 2020-04-02 14:04:25 +02:00
goroutine.go builder, compiler: compile and cache packages in parallel 2021-03-21 11:51:35 +01:00
inlineasm.go arm64: Add support for system calls (SVC) 2020-10-03 20:07:51 +02:00
interface.go compiler: do not check for impossible type asserts 2021-03-23 14:32:33 +01:00
interrupt.go builder, compiler: compile and cache packages in parallel 2021-03-21 11:51:35 +01:00
intrinsics.go compiler,runtime: translate memzero calls to LLVM memset intrinsics 2020-03-27 21:01:59 +01:00
llvm.go compiler: move settings to a separate Config struct 2021-01-29 14:49:58 +01:00
map.go compiler: refactor map operations to use the builder object 2020-03-25 20:17:46 +01:00
sizes.go compiler: unexport some exported symbols 2020-04-13 09:24:57 +02:00
symbol.go builder, compiler: compile and cache packages in parallel 2021-03-21 11:51:35 +01:00
syscall.go compiler: move settings to a separate Config struct 2021-01-29 14:49:58 +01:00
volatile.go compiler: do not perform nil checking when indexing slices 2020-03-27 07:38:16 +01:00