summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/backend/jvm/GenBCode.scala
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@gmail.com>2015-08-17 14:51:04 +0200
committerLukas Rytz <lukas.rytz@gmail.com>2015-08-18 11:20:56 +0200
commit14fc88b8fffe3338805afb5a4fb40843a14fda1c (patch)
treee6e510aadd48a2dad1d27329cb55338a4f4ee942 /src/compiler/scala/tools/nsc/backend/jvm/GenBCode.scala
parent0ed745364891e4e5f78e51ac9f3aad111b5c7bb3 (diff)
downloadscala-14fc88b8fffe3338805afb5a4fb40843a14fda1c.tar.gz
scala-14fc88b8fffe3338805afb5a4fb40843a14fda1c.tar.bz2
scala-14fc88b8fffe3338805afb5a4fb40843a14fda1c.zip
Move call graph and code repo building to the same place
Diffstat (limited to 'src/compiler/scala/tools/nsc/backend/jvm/GenBCode.scala')
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/GenBCode.scala19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/GenBCode.scala b/src/compiler/scala/tools/nsc/backend/jvm/GenBCode.scala
index a19b5f6e2c..e1a724f1cb 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/GenBCode.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/GenBCode.scala
@@ -14,6 +14,7 @@ import scala.reflect.internal.util.Statistics
import scala.tools.asm
import scala.tools.asm.tree.ClassNode
+import scala.tools.nsc.backend.jvm.opt.ByteCodeRepository
/*
* Prepare in-memory representations of classfiles using the ASM Tree API, and serialize them to disk.
@@ -221,12 +222,18 @@ abstract class GenBCode extends BCodeSyncAndTry {
class Worker2 {
def runGlobalOptimizations(): Unit = {
import scala.collection.convert.decorateAsScala._
- if (settings.YoptBuildCallGraph) {
- q2.asScala foreach {
- case Item2(_, _, plain, _, _) =>
- // skip mirror / bean: wd don't inline into tem, and they are not used in the plain class
- if (plain != null) callGraph.addClass(plain)
- }
+
+ // add classes to the bytecode repo before building the call graph: the latter needs to
+ // look up classes and methods in the code repo.
+ if (settings.YoptAddToBytecodeRepository) q2.asScala foreach {
+ case Item2(_, mirror, plain, bean, _) =>
+ if (mirror != null) byteCodeRepository.add(mirror, ByteCodeRepository.CompilationUnit)
+ if (plain != null) byteCodeRepository.add(plain, ByteCodeRepository.CompilationUnit)
+ if (bean != null) byteCodeRepository.add(bean, ByteCodeRepository.CompilationUnit)
+ }
+ if (settings.YoptBuildCallGraph) q2.asScala foreach { item =>
+ // skip call graph for mirror / bean: wd don't inline into tem, and they are not used in the plain class
+ if (item.plain != null) callGraph.addClass(item.plain)
}
if (settings.YoptInlinerEnabled)
bTypes.inliner.runInliner()