compiler: only produce one bitcast from an alloca

This makes passes simpler, by being able to look at the (only) bitcast
from an alloca to know the expected type.
This commit is contained in:
Ayke van Laethem
2018-10-28 19:44:39 +01:00
parent b09b07a52d
commit 8a211d36aa
+3 -2
View File
@@ -3460,9 +3460,10 @@ func (c *Compiler) parseMakeInterface(val llvm.Value, typ types.Type, global str
// Allocate on the heap and put a pointer in the interface.
// TODO: escape analysis.
sizeValue := llvm.ConstInt(c.uintptrType, size, false)
itfValue = c.createRuntimeCall("alloc", []llvm.Value{sizeValue}, "")
itfValueCast := c.builder.CreateBitCast(itfValue, llvm.PointerType(val.Type(), 0), "")
alloc := c.createRuntimeCall("alloc", []llvm.Value{sizeValue}, "")
itfValueCast := c.builder.CreateBitCast(alloc, llvm.PointerType(val.Type(), 0), "")
c.builder.CreateStore(val, itfValueCast)
itfValue = c.builder.CreateBitCast(itfValueCast, c.i8ptrType, "")
}
} else {
// Directly place the value in the interface.