summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/backend/jvm/opt/Inliner.scala
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@gmail.com>2015-10-29 21:35:06 +0100
committerLukas Rytz <lukas.rytz@gmail.com>2015-11-10 11:18:53 +0100
commit5d4d2cc9f95d88dc4ba19095c6cfe8b60ad1a21d (patch)
tree233b983af928dc60d7e8c45cd2dd8a29faa24dd2 /src/compiler/scala/tools/nsc/backend/jvm/opt/Inliner.scala
parent7f2a0a2046e9ea16e5eaab03841ad2a7fccba8cf (diff)
downloadscala-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.scala11
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)