summaryrefslogtreecommitdiff
path: root/src/compiler
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@gmail.com>2015-09-17 20:15:36 +0200
committerLukas Rytz <lukas.rytz@gmail.com>2015-09-18 10:32:28 +0200
commit41e5ef4396a1526cd8c58157912ffed830a96f1e (patch)
treed406ff22f3588ac9c47ff0067a002efa30ca5cef /src/compiler
parent59a5d3b8fd036d36afcf6349bc3cc527344981a1 (diff)
downloadscala-41e5ef4396a1526cd8c58157912ffed830a96f1e.tar.gz
scala-41e5ef4396a1526cd8c58157912ffed830a96f1e.tar.bz2
scala-41e5ef4396a1526cd8c58157912ffed830a96f1e.zip
First version of inliningh heuristics that prefer higher-order methos
When invoking a higher-order method and the value passed for the SAM type is either a function literal or a parameter of the callsite method, inline the higher-order method into the callee. This is a first version, the heuristics will be refined further.
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/opt/InlinerHeuristics.scala12
-rw-r--r--src/compiler/scala/tools/nsc/settings/ScalaSettings.scala4
2 files changed, 12 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/opt/InlinerHeuristics.scala b/src/compiler/scala/tools/nsc/backend/jvm/opt/InlinerHeuristics.scala
index cd10094204..e559b63c09 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/opt/InlinerHeuristics.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/opt/InlinerHeuristics.scala
@@ -84,8 +84,16 @@ class InlinerHeuristics[BT <: BTypes](val bTypes: BT) {
if (callee.safeToInline && callee.annotatedInline) Some(InlineRequest(callsite, Nil))
else None
-// case "default" =>
-
+ case "default" =>
+ val callee = callsite.callee.get
+ if (callee.safeToInline && !callee.annotatedNoInline) {
+ val shouldInlineHO = callee.samParamTypes.nonEmpty && (callee.samParamTypes exists {
+ case (index, _) => callsite.argInfos.contains(index)
+ })
+
+ if (shouldInlineHO || callee.annotatedInline) Some(InlineRequest(callsite, Nil))
+ else None
+ } else None
}
/*
diff --git a/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala b/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala
index ea9ad1d909..74d152a4cf 100644
--- a/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala
+++ b/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala
@@ -276,8 +276,8 @@ trait ScalaSettings extends AbsScalaSettings
name = "-Yopt-inline-heuristics",
helpArg = "strategy",
descr = "Set the heuristics for inlining decisions.",
- choices = List("at-inline-annotated", "everything"),
- default = "at-inline-annotated")
+ choices = List("at-inline-annotated", "everything", "default"),
+ default = "default")
object YoptWarningsChoices extends MultiChoiceEnumeration {
val none = Choice("none" , "No optimizer warnings.")