tinygo/compiler
Ayke van Laethem 19f8874764 compiler: do not perform nil checking when indexing slices
The x/tools/go/ssa package splits slice loads/stores into two
operations. So for code like this:

    x = p[3]

It has two instructions:

    x_ptr = &p[3]
    x = *x_ptr

This makes the IR simpler, but also means we're accidentally inserting
more nil checks than necessary: the slice index operation has
effectively already checked for nil by performing a bounds check.
Therefore, omit nil pointer checks for pointers created by
*ssa.IndexAddr.

This change is necessary to make sure a future removal of runtime.isnil
will not cause the escape analysis pass to regress. Apart from that, it
reduces code size slightly in many smoke tests (with no increases in
code size).
2020-03-27 07:38:16 +01:00
..
ircheck compiler: move IR checker to separate package 2020-03-21 15:45:25 +01:00
llvmutil compiler/llvmutil: move constant pointer packs into constant globals 2020-02-24 23:27:04 +01:00
asserts.go compiler: do not perform nil checking when indexing slices 2020-03-27 07:38:16 +01:00
calls.go compiler: add dereferenceable_or_null attribute where possible 2020-03-27 07:38:16 +01:00
channel.go compiler: refactor creating of channel operations 2020-03-25 20:17:46 +01:00
compiler.go compiler: do not perform nil checking when indexing slices 2020-03-27 07:38:16 +01:00
defer.go compiler: refactor defer operations 2020-03-25 20:17:46 +01:00
errors.go compiler: rename Compiler.getValue -> builder.getValue 2020-03-25 20:17:46 +01:00
func.go compiler: add dereferenceable_or_null attribute where possible 2020-03-27 07:38:16 +01:00
gc.go compiler: remove leftover code after refactor 2020-03-25 20:17:46 +01:00
goroutine.go compiler: refactor starting new goroutines 2020-03-25 20:17:46 +01:00
inlineasm.go compiler: refactor function calling 2020-03-25 20:17:46 +01:00
interface.go compiler: add dereferenceable_or_null attribute where possible 2020-03-27 07:38:16 +01:00
interrupt.go compiler: refactor function calling 2020-03-25 20:17:46 +01:00
llvm.go compiler: remove leftover code after refactor 2020-03-25 20:17:46 +01:00
map.go compiler: refactor map operations to use the builder object 2020-03-25 20:17:46 +01:00
sizes.go compiler: don't crash when encountering types.Invalid 2019-12-30 13:40:37 +01:00
symbol.go compiler: refactor public interface 2020-03-25 20:17:46 +01:00
syscall.go compiler: refactor function calling 2020-03-25 20:17:46 +01:00
volatile.go compiler: do not perform nil checking when indexing slices 2020-03-27 07:38:16 +01:00