summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2010-08-23 08:52:06 +0000
committerIulian Dragos <jaguarul@gmail.com>2010-08-23 08:52:06 +0000
commite176011b88ea92a0fa3142cd4fd7200c571b9117 (patch)
tree7590709c64bb0aedf8ea49de54cddb0da9fb4a82 /src
parentb64d1956019b61244981562a088c9d2b633e61fc (diff)
downloadscala-e176011b88ea92a0fa3142cd4fd7200c571b9117.tar.gz
scala-e176011b88ea92a0fa3142cd4fd7200c571b9117.tar.bz2
scala-e176011b88ea92a0fa3142cd4fd7200c571b9117.zip
Tweaks for better optimizations.
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis.scala4
-rw-r--r--src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala2
-rw-r--r--src/compiler/scala/tools/nsc/backend/opt/Inliners.scala8
3 files changed, 9 insertions, 5 deletions
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)