From e176011b88ea92a0fa3142cd4fd7200c571b9117 Mon Sep 17 00:00:00 2001 From: Iulian Dragos Date: Mon, 23 Aug 2010 08:52:06 +0000 Subject: Tweaks for better optimizations. --- .../scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis.scala | 4 ++-- src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala | 2 +- src/compiler/scala/tools/nsc/backend/opt/Inliners.scala | 8 ++++++-- 3 files changed, 9 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/compiler/scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis.scala b/src/compiler/scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis.scala index 9b145c9fbc..819182c3ba 100644 --- a/src/compiler/scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis.scala +++ b/src/compiler/scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis.scala @@ -389,8 +389,8 @@ abstract class TypeFlowAnalysis { val stack = out.stack if (settings.debug.value) { - Console.println("[before] Stack: " + stack); - Console.println(i); +// Console.println("[before] Stack: " + stack); +// Console.println(i); } i match { diff --git a/src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala b/src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala index 28aadda14d..69bcae5312 100644 --- a/src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala +++ b/src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala @@ -102,7 +102,7 @@ abstract class ClosureElimination extends SubComponent { for (bb <- linearizer.linearize(m)) { var info = cpp.in(bb) - log("Cpp info at entry to block " + bb + ": " + info) + if (settings.debug.value) log("Cpp info at entry to block " + bb + ": " + info) for (i <- bb) { i match { diff --git a/src/compiler/scala/tools/nsc/backend/opt/Inliners.scala b/src/compiler/scala/tools/nsc/backend/opt/Inliners.scala index b86e22787b..a2b24fe0cb 100644 --- a/src/compiler/scala/tools/nsc/backend/opt/Inliners.scala +++ b/src/compiler/scala/tools/nsc/backend/opt/Inliners.scala @@ -144,7 +144,11 @@ abstract class Inliners extends SubComponent { def isAvailable = icodes available receiver def isCandidate = isClosureClass(receiver) || concreteMethod.isEffectivelyFinal || receiver.isFinal def isApply = concreteMethod.name == nme.apply - def isCountable = !(isClosureClass(receiver) && isApply) // only count non-closures + def isCountable = !(isClosureClass(receiver) + || isApply + || isMonadicMethod(concreteMethod) + || receiver.enclosingPackage == definitions.RuntimePackage + ) // only count non-closures if (settings.debug.value) log("Treating " + i @@ -280,7 +284,7 @@ abstract class Inliners extends SubComponent { def isMonadic = isMonadicMethod(sym) def handlers = m.exh - def blocks = m.code.blocks + def blocks = if (m.code eq null) Predef.error("blocks = null + " + m) else m.code.blocks def locals = m.locals def length = blocks.length def openBlocks = blocks filterNot (_.closed) -- cgit v1.2.3