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.
This commit is contained in:
Ayke van Laethem
2019-03-24 16:47:36 +01:00
committed by Ron Evans
parent f484dddbc2
commit 38f8cf7bee
+3
View File
@@ -281,6 +281,9 @@ func (c *Compiler) doesEscape(value llvm.Value) bool {
if !c.hasFlag(use, value, "nocapture") {
return true
}
} else if use.IsAICmpInst() != nilValue {
// Comparing pointers don't let the pointer escape.
// This is often a compiler-inserted nil check.
} else {
// Unknown instruction, might escape.
return true