Set escape analysis to analyze all types including value types.
Since a value type might be boxed and this information is missing in IR the analysis cannot distinguish value types and boxes, so let it analyze all for now.
This commit is contained in:
+2
-1
@@ -100,8 +100,9 @@ internal object EscapeAnalysis {
|
||||
open fun add(entry: RoleInfoEntry) = entries.add(entry)
|
||||
}
|
||||
|
||||
// TODO: Seems like overhead to analyze value types but they might be boxed, think how to optimize this.
|
||||
private fun RuntimeAware.isInteresting(type: KotlinType?): Boolean =
|
||||
type != null && !type.isUnit() && !type.isNothing() && isObjectType(type)
|
||||
type != null && !type.isUnit() && !type.isNothing()/* && isObjectType(type)*/
|
||||
|
||||
private class Roles {
|
||||
val data = HashMap<Role, RoleInfo>()
|
||||
|
||||
+6
-2
@@ -253,8 +253,12 @@ internal class FunctionGenerationContext(val function: LLVMValueRef,
|
||||
}
|
||||
|
||||
is SlotType.PARAM_IF_ARENA ->
|
||||
call(context.llvm.getParamSlotIfArenaFunction,
|
||||
listOf(vars.load(resultLifetime.slotType.parameter), vars.createAnonymousSlot()))
|
||||
if (LLVMTypeOf(vars.load(resultLifetime.slotType.parameter)) != codegen.runtime.objHeaderPtrType)
|
||||
vars.createAnonymousSlot()
|
||||
else {
|
||||
call(context.llvm.getParamSlotIfArenaFunction,
|
||||
listOf(vars.load(resultLifetime.slotType.parameter), vars.createAnonymousSlot()))
|
||||
}
|
||||
|
||||
else -> throw Error("Incorrect slot type: ${resultLifetime.slotType}")
|
||||
}
|
||||
|
||||
+1
@@ -37,6 +37,7 @@ class Runtime(bitcodeFile: String) {
|
||||
val globalHashType = getStructType("GlobalHash")
|
||||
|
||||
val objHeaderType = getStructType("ObjHeader")
|
||||
val objHeaderPtrType = pointerType(objHeaderType)
|
||||
val arrayHeaderType = getStructType("ArrayHeader")
|
||||
|
||||
val target = LLVMGetTarget(llvmModule)!!.toKString()
|
||||
|
||||
Reference in New Issue
Block a user