summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/backend/jvm/BackendReporting.scala
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@gmail.com>2015-07-08 22:59:56 +0200
committerLukas Rytz <lukas.rytz@gmail.com>2015-07-23 15:02:25 +0200
commita1d471f7ba93f5a2e3a66a77596a41f2677ca9ee (patch)
treeb1d281d19f29b22671c9948c7800322293f5d5b6 /src/compiler/scala/tools/nsc/backend/jvm/BackendReporting.scala
parentf5e72765f2705c9bad2d87c4222ee64a2500f2fe (diff)
downloadscala-a1d471f7ba93f5a2e3a66a77596a41f2677ca9ee.tar.gz
scala-a1d471f7ba93f5a2e3a66a77596a41f2677ca9ee.tar.bz2
scala-a1d471f7ba93f5a2e3a66a77596a41f2677ca9ee.zip
[backport] Refactor the ClosureOptimizer, run ProdCons only once per method
Refactor and clean up the ClosureOptimzier. The goal of this change is to run the ProdCons analyzer only once per method, instead of once per closure instantiation. Bootstrapping scala with `-Yopt-inline-heuristics:everything` revealed that ProdCons can take a very long time on large methods, for example ``` [quick.compiler] scala/tools/nsc/backend/jvm/BCodeBodyBuilder$PlainBodyBuilder#genArithmeticOp - analysis: 1 spans, 17755ms [quick.compiler] scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer#transform - analysis: 1 spans, 28024ms [quick.compiler] scala/tools/nsc/backend/jvm/BCodeBodyBuilder$PlainBodyBuilder#genInvokeDynamicLambda - analysis: 1 spans, 22100ms ``` With this change and enough time and space (-Xmx6000m), bootstrapping scala succeeds in this test mode.
Diffstat (limited to 'src/compiler/scala/tools/nsc/backend/jvm/BackendReporting.scala')
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/BackendReporting.scala2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/BackendReporting.scala b/src/compiler/scala/tools/nsc/backend/jvm/BackendReporting.scala
index 4eb24d13e3..b41d0de92f 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/BackendReporting.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/BackendReporting.scala
@@ -255,7 +255,7 @@ object BackendReporting {
* Used in `rewriteClosureApplyInvocations` when a closure apply callsite cannot be rewritten
* to the closure body method.
*/
- trait RewriteClosureApplyToClosureBodyFailed extends OptimizerWarning {
+ sealed trait RewriteClosureApplyToClosureBodyFailed extends OptimizerWarning {
def pos: Position
override def emitWarning(settings: ScalaSettings): Boolean = this match {