compiler: imporove escape analysis to allow icmp

The icmp instruction is often used in nil checks, so this instruction
happens very frequently now that TinyGo automatically inserts nil checks
everywhere. Escape analysis would conservatively mark such pointers as
escaping, which they obviously don't.
This commit improves escape analysis to allow icmp instructions.
Этот коммит содержится в:
Ayke van Laethem 2019-03-24 16:47:36 +01:00 коммит произвёл Ron Evans
родитель f484dddbc2
коммит 38f8cf7bee

Просмотреть файл

@ -281,6 +281,9 @@ func (c *Compiler) doesEscape(value llvm.Value) bool {
if !c.hasFlag(use, value, "nocapture") { if !c.hasFlag(use, value, "nocapture") {
return true return true
} }
} else if use.IsAICmpInst() != nilValue {
// Comparing pointers don't let the pointer escape.
// This is often a compiler-inserted nil check.
} else { } else {
// Unknown instruction, might escape. // Unknown instruction, might escape.
return true return true