[IR][optmz] Added hint in case of EA failure

This commit is contained in:
Igor Chevdar
2020-09-15 12:50:18 +05:00
parent 06f2ef17be
commit cc940e9012
@@ -8,12 +8,13 @@ package org.jetbrains.kotlin.backend.konan.optimizations
import org.jetbrains.kotlin.backend.common.atMostOne import org.jetbrains.kotlin.backend.common.atMostOne
import org.jetbrains.kotlin.backend.common.pop import org.jetbrains.kotlin.backend.common.pop
import org.jetbrains.kotlin.backend.common.push import org.jetbrains.kotlin.backend.common.push
import org.jetbrains.kotlin.backend.konan.*
import org.jetbrains.kotlin.backend.konan.Context
import org.jetbrains.kotlin.backend.konan.DirectedGraphCondensationBuilder import org.jetbrains.kotlin.backend.konan.DirectedGraphCondensationBuilder
import org.jetbrains.kotlin.backend.konan.DirectedGraphMultiNode import org.jetbrains.kotlin.backend.konan.DirectedGraphMultiNode
import org.jetbrains.kotlin.backend.konan.llvm.Lifetime import org.jetbrains.kotlin.backend.konan.llvm.Lifetime
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.backend.konan.Context
import org.jetbrains.kotlin.backend.konan.logMultiple import org.jetbrains.kotlin.backend.konan.logMultiple
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrClass
import kotlin.math.min import kotlin.math.min
@@ -1661,6 +1662,7 @@ internal object EscapeAnalysis {
callGraph: CallGraph, lifetimes: MutableMap<IrElement, Lifetime>) { callGraph: CallGraph, lifetimes: MutableMap<IrElement, Lifetime>) {
assert(lifetimes.isEmpty()) assert(lifetimes.isEmpty())
try {
val intraproceduralAnalysisResult = val intraproceduralAnalysisResult =
IntraproceduralAnalysis(context, moduleDFG, externalModulesDFG, callGraph).analyze() IntraproceduralAnalysis(context, moduleDFG, externalModulesDFG, callGraph).analyze()
InterproceduralAnalysis(context, callGraph, intraproceduralAnalysisResult, externalModulesDFG, lifetimes, InterproceduralAnalysis(context, callGraph, intraproceduralAnalysisResult, externalModulesDFG, lifetimes,
@@ -1669,5 +1671,21 @@ internal object EscapeAnalysis {
// but what about all other platforms?). // but what about all other platforms?).
propagateExiledToHeapObjects = true propagateExiledToHeapObjects = true
).analyze() ).analyze()
} catch (t: Throwable) {
val extraUserInfo =
"""
Please try to disable escape analysis and rerun the build. To do it add the following snippet to the gradle script:
kotlin.targets.withType<org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget> {
binaries.all {
freeCompilerArgs += "-Xdisable-phases=EscapeAnalysis"
}
}
In case of using command line compiler add this option: "-Xdisable-phases=EscapeAnalysis".
Also, consider filing an issue with full Gradle log here: https://kotl.in/issue
""".trimIndent()
context.reportCompilationError("Escape analysis failure:\n$extraUserInfo\n\n${t.message}\n${t.stackTraceToString()}")
}
} }
} }