Mercurial > hg > graal-compiler
changeset 22488:f89487f1d185
Make deoptimization-safety optional in MethodHandlePlugin
author | Christian Wimmer <christian.wimmer@oracle.com> |
---|---|
date | Wed, 19 Aug 2015 16:05:14 -0700 |
parents | 2d56522533a2 |
children | 8b24fab0a573 |
files | graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotGraphBuilderPlugins.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/MethodHandlePlugin.java |
diffstat | 2 files changed, 11 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotGraphBuilderPlugins.java Wed Aug 19 16:03:54 2015 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotGraphBuilderPlugins.java Wed Aug 19 16:05:14 2015 -0700 @@ -77,7 +77,7 @@ plugins.appendParameterPlugin(nodePlugin); plugins.appendNodePlugin(nodePlugin); - plugins.appendNodePlugin(new MethodHandlePlugin(constantReflection.getMethodHandleAccess())); + plugins.appendNodePlugin(new MethodHandlePlugin(constantReflection.getMethodHandleAccess(), true)); plugins.appendInlineInvokePlugin(replacements); if (InlineDuringParsing.getValue()) {
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/MethodHandlePlugin.java Wed Aug 19 16:03:54 2015 -0700 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/MethodHandlePlugin.java Wed Aug 19 16:05:14 2015 -0700 @@ -33,9 +33,11 @@ public class MethodHandlePlugin implements NodePlugin { private final MethodHandleAccessProvider methodHandleAccess; + private final boolean safeForDeoptimization; - public MethodHandlePlugin(MethodHandleAccessProvider methodHandleAccess) { + public MethodHandlePlugin(MethodHandleAccessProvider methodHandleAccess, boolean safeForDeoptimization) { this.methodHandleAccess = methodHandleAccess; + this.safeForDeoptimization = safeForDeoptimization; } @Override @@ -62,10 +64,13 @@ argumentsList.initialize(i, b.recursiveAppend(argumentsList.get(i))); } - // If a MemberName suffix argument is dropped, the replaced call cannot - // deoptimized since the necessary frame state cannot be reconstructed. - // As such, it needs to recursively inline everything. - boolean inlineEverything = args.length != argumentsList.size(); + boolean inlineEverything = false; + if (safeForDeoptimization) { + // If a MemberName suffix argument is dropped, the replaced call cannot + // deoptimized since the necessary frame state cannot be reconstructed. + // As such, it needs to recursively inline everything. + inlineEverything = args.length != argumentsList.size(); + } b.handleReplacedInvoke(invoke.getInvokeKind(), callTarget.targetMethod(), argumentsList.toArray(new ValueNode[argumentsList.size()]), inlineEverything); } return true;