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.
Этот коммит содержится в:
Ayke van Laethem 2018-10-28 19:44:39 +01:00
родитель b09b07a52d
коммит 8a211d36aa
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: E97FF5335DFDFDED

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

@ -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.