src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotProfilingPlugin.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
hotspot Cdiff src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotProfilingPlugin.java
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotProfilingPlugin.java
Print this page
*** 31,90 ****
import org.graalvm.compiler.nodes.ValueNode;
import org.graalvm.compiler.nodes.calc.ConditionalNode;
import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderContext;
import org.graalvm.compiler.nodes.graphbuilderconf.ProfilingPlugin;
import org.graalvm.compiler.options.Option;
import org.graalvm.compiler.options.OptionType;
! import org.graalvm.compiler.options.OptionValue;
import jdk.vm.ci.meta.ResolvedJavaMethod;
public abstract class HotSpotProfilingPlugin implements ProfilingPlugin {
public static class Options {
@Option(help = "Emit profiling of invokes", type = OptionType.Expert)//
! public static final OptionValue<Boolean> ProfileInvokes = new OptionValue<>(true);
@Option(help = "Emit profiling of backedges", type = OptionType.Expert)//
! public static final OptionValue<Boolean> ProfileBackedges = new OptionValue<>(true);
}
! public abstract int invokeNotifyFreqLog();
! public abstract int invokeInlineeNotifyFreqLog();
! public abstract int invokeProfilePobabilityLog();
! public abstract int backedgeNotifyFreqLog();
! public abstract int backedgeProfilePobabilityLog();
@Override
public boolean shouldProfile(GraphBuilderContext builder, ResolvedJavaMethod method) {
return !builder.parsingIntrinsic();
}
@Override
public void profileInvoke(GraphBuilderContext builder, ResolvedJavaMethod method, FrameState frameState) {
assert shouldProfile(builder, method);
! if (Options.ProfileInvokes.getValue() && !method.isClassInitializer()) {
! ProfileNode p = builder.append(new ProfileInvokeNode(method, invokeNotifyFreqLog(), invokeProfilePobabilityLog()));
p.setStateBefore(frameState);
}
}
@Override
public void profileGoto(GraphBuilderContext builder, ResolvedJavaMethod method, int bci, int targetBci, FrameState frameState) {
assert shouldProfile(builder, method);
! if (Options.ProfileBackedges.getValue() && targetBci <= bci) {
! ProfileNode p = builder.append(new ProfileBranchNode(method, backedgeNotifyFreqLog(), backedgeProfilePobabilityLog(), bci, targetBci));
p.setStateBefore(frameState);
}
}
@Override
public void profileIf(GraphBuilderContext builder, ResolvedJavaMethod method, int bci, LogicNode condition, int trueBranchBci, int falseBranchBci, FrameState frameState) {
assert shouldProfile(builder, method);
! if (Options.ProfileBackedges.getValue() && (falseBranchBci <= bci || trueBranchBci <= bci)) {
boolean negate = false;
int targetBci = trueBranchBci;
if (falseBranchBci <= bci) {
assert trueBranchBci > bci;
negate = true;
--- 31,94 ----
import org.graalvm.compiler.nodes.ValueNode;
import org.graalvm.compiler.nodes.calc.ConditionalNode;
import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderContext;
import org.graalvm.compiler.nodes.graphbuilderconf.ProfilingPlugin;
import org.graalvm.compiler.options.Option;
+ import org.graalvm.compiler.options.OptionKey;
import org.graalvm.compiler.options.OptionType;
! import org.graalvm.compiler.options.OptionValues;
import jdk.vm.ci.meta.ResolvedJavaMethod;
public abstract class HotSpotProfilingPlugin implements ProfilingPlugin {
public static class Options {
@Option(help = "Emit profiling of invokes", type = OptionType.Expert)//
! public static final OptionKey<Boolean> ProfileInvokes = new OptionKey<>(true);
@Option(help = "Emit profiling of backedges", type = OptionType.Expert)//
! public static final OptionKey<Boolean> ProfileBackedges = new OptionKey<>(true);
}
! public abstract int invokeNotifyFreqLog(OptionValues options);
! public abstract int invokeInlineeNotifyFreqLog(OptionValues options);
! public abstract int invokeProfilePobabilityLog(OptionValues options);
! public abstract int backedgeNotifyFreqLog(OptionValues options);
! public abstract int backedgeProfilePobabilityLog(OptionValues options);
@Override
public boolean shouldProfile(GraphBuilderContext builder, ResolvedJavaMethod method) {
return !builder.parsingIntrinsic();
}
@Override
public void profileInvoke(GraphBuilderContext builder, ResolvedJavaMethod method, FrameState frameState) {
assert shouldProfile(builder, method);
! OptionValues options = builder.getOptions();
! if (Options.ProfileInvokes.getValue(options) && !method.isClassInitializer()) {
! ProfileNode p = builder.append(new ProfileInvokeNode(method, invokeNotifyFreqLog(options), invokeProfilePobabilityLog(options)));
p.setStateBefore(frameState);
}
}
@Override
public void profileGoto(GraphBuilderContext builder, ResolvedJavaMethod method, int bci, int targetBci, FrameState frameState) {
assert shouldProfile(builder, method);
! OptionValues options = builder.getOptions();
! if (Options.ProfileBackedges.getValue(options) && targetBci <= bci) {
! ProfileNode p = builder.append(new ProfileBranchNode(method, backedgeNotifyFreqLog(options), backedgeProfilePobabilityLog(options), bci, targetBci));
p.setStateBefore(frameState);
}
}
@Override
public void profileIf(GraphBuilderContext builder, ResolvedJavaMethod method, int bci, LogicNode condition, int trueBranchBci, int falseBranchBci, FrameState frameState) {
assert shouldProfile(builder, method);
! OptionValues options = builder.getOptions();
! if (Options.ProfileBackedges.getValue(options) && (falseBranchBci <= bci || trueBranchBci <= bci)) {
boolean negate = false;
int targetBci = trueBranchBci;
if (falseBranchBci <= bci) {
assert trueBranchBci > bci;
negate = true;
*** 93,102 ****
assert trueBranchBci <= bci && falseBranchBci > bci;
}
ValueNode trueValue = builder.append(ConstantNode.forBoolean(!negate));
ValueNode falseValue = builder.append(ConstantNode.forBoolean(negate));
ConditionalNode branchCondition = builder.append(new ConditionalNode(condition, trueValue, falseValue));
! ProfileNode p = builder.append(new ProfileBranchNode(method, backedgeNotifyFreqLog(), backedgeProfilePobabilityLog(), branchCondition, bci, targetBci));
p.setStateBefore(frameState);
}
}
}
--- 97,106 ----
assert trueBranchBci <= bci && falseBranchBci > bci;
}
ValueNode trueValue = builder.append(ConstantNode.forBoolean(!negate));
ValueNode falseValue = builder.append(ConstantNode.forBoolean(negate));
ConditionalNode branchCondition = builder.append(new ConditionalNode(condition, trueValue, falseValue));
! ProfileNode p = builder.append(new ProfileBranchNode(method, backedgeNotifyFreqLog(options), backedgeProfilePobabilityLog(options), branchCondition, bci, targetBci));
p.setStateBefore(frameState);
}
}
}
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotProfilingPlugin.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File