diff options
author | Lukas Rytz <lukas.rytz@gmail.com> | 2015-10-29 21:35:06 +0100 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@gmail.com> | 2015-11-10 11:18:53 +0100 |
commit | 5d4d2cc9f95d88dc4ba19095c6cfe8b60ad1a21d (patch) | |
tree | 233b983af928dc60d7e8c45cd2dd8a29faa24dd2 /src/compiler/scala/tools/nsc/backend/jvm/opt/Inliner.scala | |
parent | 7f2a0a2046e9ea16e5eaab03841ad2a7fccba8cf (diff) | |
download | scala-5d4d2cc9f95d88dc4ba19095c6cfe8b60ad1a21d.tar.gz scala-5d4d2cc9f95d88dc4ba19095c6cfe8b60ad1a21d.tar.bz2 scala-5d4d2cc9f95d88dc4ba19095c6cfe8b60ad1a21d.zip |
Clean up DCE: remove eliminated callsites from call graph earlier
When running DCE, directly remove eliminated callsites from the call
graph (instead delegating this task to the callees).
Diffstat (limited to 'src/compiler/scala/tools/nsc/backend/jvm/opt/Inliner.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/backend/jvm/opt/Inliner.scala | 11 |
1 files changed, 1 insertions, 10 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/opt/Inliner.scala b/src/compiler/scala/tools/nsc/backend/jvm/opt/Inliner.scala index 449a56fdd1..d1bccf614e 100644 --- a/src/compiler/scala/tools/nsc/backend/jvm/opt/Inliner.scala +++ b/src/compiler/scala/tools/nsc/backend/jvm/opt/Inliner.scala @@ -26,14 +26,6 @@ class Inliner[BT <: BTypes](val btypes: BT) { import inlinerHeuristics._ import backendUtils._ - def eliminateUnreachableCodeAndUpdateCallGraph(methodNode: MethodNode, definingClass: InternalName): Unit = { - localOpt.minimalRemoveUnreachableCode(methodNode, definingClass) foreach { - case invocation: MethodInsnNode => callGraph.removeCallsite(invocation, methodNode) - case indy: InvokeDynamicInsnNode => callGraph.removeClosureInstantiation(indy, methodNode) - case _ => - } - } - def runInliner(): Unit = { rewriteFinalTraitMethodInvocations() @@ -136,7 +128,6 @@ class Inliner[BT <: BTypes](val btypes: BT) { if (!selfTypeOk) { // We don't need to worry about the method being too large for running an analysis. // Callsites of large methods are not added to the call graph. - localOpt.minimalRemoveUnreachableCode(callsite.callsiteMethod, callsite.callsiteClass.internalName) val analyzer = new AsmAnalyzer(callsite.callsiteMethod, callsite.callsiteClass.internalName, new Analyzer(new SourceInterpreter)) val receiverValue = analyzer.frameAt(callsite.callsiteInstruction).peekStack(traitMethodArgumentTypes.length) for (i <- receiverValue.insns.asScala) { @@ -317,7 +308,7 @@ class Inliner[BT <: BTypes](val btypes: BT) { // If we have an inline request for a call to g, and f has been already inlined into g, we // need to run DCE before inlining g. val Right(callee) = request.callsite.callee - eliminateUnreachableCodeAndUpdateCallGraph(callee.callee, callee.calleeDeclarationClass.internalName) + localOpt.minimalRemoveUnreachableCode(callee.callee, callee.calleeDeclarationClass.internalName) // Skip over DCE'd callsites if (callGraph.containsCallsite(request.callsite)) { inlineCallsite(request.callsite) |