本文整理汇总了Java中jdk.vm.ci.meta.DeoptimizationReason类的典型用法代码示例。如果您正苦于以下问题:Java DeoptimizationReason类的具体用法?Java DeoptimizationReason怎么用?Java DeoptimizationReason使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
DeoptimizationReason类属于jdk.vm.ci.meta包,在下文中一共展示了DeoptimizationReason类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Java代码示例。
示例1: test3
import jdk.vm.ci.meta.DeoptimizationReason; //导入依赖的package包/类
@Test
public void test3() {
Assume.assumeTrue("Only works on jdk8 right now", Java8OrEarlier);
ResolvedJavaMethod method = getResolvedJavaMethod("test3Snippet");
for (int i = 0; i < 2; i++) {
Result actual;
boolean expectedCompiledCode = (method.getProfilingInfo().getDeoptimizationCount(DeoptimizationReason.NotCompiledExceptionHandler) != 0);
InstalledCode code = getCode(method, null, false, true, new OptionValues(getInitialOptions(), HighTier.Options.Inline, false));
assertTrue(code.isValid());
try {
actual = new Result(code.executeVarargs(false), null);
} catch (Exception e) {
actual = new Result(null, e);
}
assertTrue(i > 0 == expectedCompiledCode, "expect compiled code to stay around after the first iteration");
assertEquals(new Result(expectedCompiledCode, null), actual);
assertTrue(expectedCompiledCode == code.isValid());
}
}
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:23,代码来源:DeoptimizeOnExceptionTest.java
示例2: runTest
import jdk.vm.ci.meta.DeoptimizationReason; //导入依赖的package包/类
protected void runTest(OptionValues options, Set<DeoptimizationReason> shouldNotDeopt, boolean bind, boolean noProfile, String name, Object... args) {
ResolvedJavaMethod method = getResolvedJavaMethod(name);
Object receiver = method.isStatic() ? null : this;
Result expect = executeExpected(method, receiver, args);
if (noProfile) {
method.reprofile();
}
testAgainstExpected(options, method, expect, shouldNotDeopt, receiver, args);
if (args.length > 0 && bind) {
if (noProfile) {
method.reprofile();
}
this.argsToBind = args;
testAgainstExpected(options, method, expect, shouldNotDeopt, receiver, args);
this.argsToBind = null;
}
}
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:22,代码来源:JTTTest.java
示例3: tryUseTrappingNullCheck
import jdk.vm.ci.meta.DeoptimizationReason; //导入依赖的package包/类
private static void tryUseTrappingNullCheck(AbstractDeoptimizeNode deopt, Node predecessor, DeoptimizationReason deoptimizationReason, JavaConstant speculation, long implicitNullCheckLimit) {
if (deoptimizationReason != DeoptimizationReason.NullCheckException && deoptimizationReason != DeoptimizationReason.UnreachedCode) {
return;
}
if (speculation != null && !speculation.equals(JavaConstant.NULL_POINTER)) {
return;
}
if (predecessor instanceof AbstractMergeNode) {
AbstractMergeNode merge = (AbstractMergeNode) predecessor;
if (merge.phis().isEmpty()) {
for (AbstractEndNode end : merge.cfgPredecessors().snapshot()) {
checkPredecessor(deopt, end.predecessor(), deoptimizationReason, implicitNullCheckLimit);
}
}
} else if (predecessor instanceof AbstractBeginNode) {
checkPredecessor(deopt, predecessor, deoptimizationReason, implicitNullCheckLimit);
}
}
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:19,代码来源:UseTrappingNullChecksPhase.java
示例4: checkPredecessor
import jdk.vm.ci.meta.DeoptimizationReason; //导入依赖的package包/类
private static void checkPredecessor(AbstractDeoptimizeNode deopt, Node predecessor, DeoptimizationReason deoptimizationReason, long implicitNullCheckLimit) {
Node current = predecessor;
AbstractBeginNode branch = null;
while (current instanceof AbstractBeginNode) {
branch = (AbstractBeginNode) current;
if (branch.anchored().isNotEmpty()) {
// some input of the deopt framestate is anchored to this branch
return;
}
current = current.predecessor();
}
if (current instanceof IfNode) {
IfNode ifNode = (IfNode) current;
if (branch != ifNode.trueSuccessor()) {
return;
}
LogicNode condition = ifNode.condition();
if (condition instanceof IsNullNode) {
replaceWithTrappingNullCheck(deopt, ifNode, condition, deoptimizationReason, implicitNullCheckLimit);
}
}
}
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:23,代码来源:UseTrappingNullChecksPhase.java
示例5: createGuard
import jdk.vm.ci.meta.DeoptimizationReason; //导入依赖的package包/类
@Override
public GuardingNode createGuard(FixedNode before, LogicNode condition, DeoptimizationReason deoptReason, DeoptimizationAction action, JavaConstant speculation, boolean negated) {
StructuredGraph graph = before.graph();
if (OptEliminateGuards.getValue(graph.getOptions())) {
for (Node usage : condition.usages()) {
if (!activeGuards.isNew(usage) && activeGuards.isMarked(usage) && ((GuardNode) usage).isNegated() == negated) {
return (GuardNode) usage;
}
}
}
if (!condition.graph().getGuardsStage().allowsFloatingGuards()) {
FixedGuardNode fixedGuard = graph.add(new FixedGuardNode(condition, deoptReason, action, speculation, negated));
graph.addBeforeFixed(before, fixedGuard);
DummyGuardHandle handle = graph.add(new DummyGuardHandle(fixedGuard));
fixedGuard.lower(this);
GuardingNode result = handle.getGuard();
handle.safeDelete();
return result;
} else {
GuardNode newGuard = graph.unique(new GuardNode(condition, guardAnchor, deoptReason, action, negated, speculation));
if (OptEliminateGuards.getValue(graph.getOptions())) {
activeGuards.markAndGrow(newGuard);
}
return newGuard;
}
}
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:27,代码来源:LoweringPhase.java
示例6: canonical
import jdk.vm.ci.meta.DeoptimizationReason; //导入依赖的package包/类
private static ValueNode canonical(LoadFieldNode loadFieldNode, StampPair stamp, ValueNode forObject, ResolvedJavaField field,
ConstantFieldProvider constantFields, ConstantReflectionProvider constantReflection,
OptionValues options, MetaAccessProvider metaAccess, boolean canonicalizeReads, boolean allUsagesAvailable) {
LoadFieldNode self = loadFieldNode;
if (canonicalizeReads && metaAccess != null) {
ConstantNode constant = asConstant(constantFields, constantReflection, metaAccess, options, forObject, field);
if (constant != null) {
return constant;
}
if (allUsagesAvailable) {
PhiNode phi = asPhi(constantFields, constantReflection, metaAccess, options, forObject,
field, stamp.getTrustedStamp());
if (phi != null) {
return phi;
}
}
}
if (self != null && !field.isStatic() && forObject.isNullConstant()) {
return new DeoptimizeNode(DeoptimizationAction.InvalidateReprofile, DeoptimizationReason.NullCheckException);
}
if (self == null) {
self = new LoadFieldNode(stamp, forObject, field);
}
return self;
}
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:26,代码来源:LoadFieldNode.java
示例7: simplify
import jdk.vm.ci.meta.DeoptimizationReason; //导入依赖的package包/类
@Override
public void simplify(SimplifierTool tool) {
if (hasNoUsages()) {
Stamp lengthStamp = length().stamp();
if (lengthStamp instanceof IntegerStamp) {
IntegerStamp lengthIntegerStamp = (IntegerStamp) lengthStamp;
if (lengthIntegerStamp.isPositive()) {
GraphUtil.removeFixedWithUnusedInputs(this);
return;
}
}
// Should be areFrameStatesAtSideEffects but currently SVM will complain about
// RuntimeConstraint
if (graph().getGuardsStage().allowsFloatingGuards()) {
LogicNode lengthNegativeCondition = CompareNode.createCompareNode(graph(), Condition.LT, length(), ConstantNode.forInt(0, graph()), tool.getConstantReflection());
// we do not have a non-deopting path for that at the moment so action=None.
FixedGuardNode guard = graph().add(new FixedGuardNode(lengthNegativeCondition, DeoptimizationReason.RuntimeConstraint, DeoptimizationAction.None, true));
graph().replaceFixedWithFixed(this, guard);
}
}
}
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:22,代码来源:NewArrayNode.java
示例8: lower
import jdk.vm.ci.meta.DeoptimizationReason; //导入依赖的package包/类
@Override
public void lower(LoweringTool tool) {
if (graph().getGuardsStage().allowsFloatingGuards()) {
/*
* Don't allow guards with action None and reason RuntimeConstraint to float. In cases
* where 2 guards are testing equivalent conditions they might be lowered at the same
* location. If the guard with the None action is lowered before the other guard then
* the code will be stuck repeatedly deoptimizing without invalidating the code.
* Conditional elimination will eliminate the guard if it's truly redundant in this
* case.
*/
if (getAction() != DeoptimizationAction.None || getReason() != DeoptimizationReason.RuntimeConstraint) {
ValueNode guard = tool.createGuard(this, getCondition(), getReason(), getAction(), getSpeculation(), isNegated()).asNode();
this.replaceAtUsages(guard);
graph().removeFixed(this);
}
} else {
lowerToIf().lower(tool);
}
}
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:21,代码来源:FixedGuardNode.java
示例9: checkLimits
import jdk.vm.ci.meta.DeoptimizationReason; //导入依赖的package包/类
private static void checkLimits(Object src, int srcPos, Object dest, int destPos, int length, Counters counters) {
if (probability(SLOW_PATH_PROBABILITY, srcPos < 0)) {
counters.checkAIOOBECounter.inc();
DeoptimizeNode.deopt(DeoptimizationAction.None, DeoptimizationReason.RuntimeConstraint);
}
if (probability(SLOW_PATH_PROBABILITY, destPos < 0)) {
counters.checkAIOOBECounter.inc();
DeoptimizeNode.deopt(DeoptimizationAction.None, DeoptimizationReason.RuntimeConstraint);
}
if (probability(SLOW_PATH_PROBABILITY, length < 0)) {
counters.checkAIOOBECounter.inc();
DeoptimizeNode.deopt(DeoptimizationAction.None, DeoptimizationReason.RuntimeConstraint);
}
if (probability(SLOW_PATH_PROBABILITY, srcPos > ArrayLengthNode.arrayLength(src) - length)) {
counters.checkAIOOBECounter.inc();
DeoptimizeNode.deopt(DeoptimizationAction.None, DeoptimizationReason.RuntimeConstraint);
}
if (probability(SLOW_PATH_PROBABILITY, destPos > ArrayLengthNode.arrayLength(dest) - length)) {
counters.checkAIOOBECounter.inc();
DeoptimizeNode.deopt(DeoptimizationAction.None, DeoptimizationReason.RuntimeConstraint);
}
counters.checkSuccessCounter.inc();
}
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:24,代码来源:ArrayCopySnippets.java
示例10: arraycopyPredictedExactIntrinsic
import jdk.vm.ci.meta.DeoptimizationReason; //导入依赖的package包/类
/**
* This intrinsic is useful for the case where we know something statically about one of the
* inputs but not the other.
*/
@Snippet
public static void arraycopyPredictedExactIntrinsic(Object src, int srcPos, Object dest, int destPos, int length, @ConstantParameter JavaKind elementKind,
@ConstantParameter SnippetCounter counter, @ConstantParameter SnippetCounter copiedCounter, @ConstantParameter Counters counters) {
Object nonNullSrc = GraalDirectives.guardingNonNull(src);
Object nonNullDest = GraalDirectives.guardingNonNull(dest);
KlassPointer srcHub = loadHub(nonNullSrc);
KlassPointer destHub = loadHub(nonNullDest);
if (probability(SLOW_PATH_PROBABILITY, srcHub != destHub)) {
DeoptimizeNode.deopt(DeoptimizationAction.None, DeoptimizationReason.RuntimeConstraint);
}
checkLimits(nonNullSrc, srcPos, nonNullDest, destPos, length, counters);
counter.inc();
copiedCounter.add(length);
ArrayCopyCallNode.arraycopy(nonNullSrc, srcPos, nonNullDest, destPos, length, elementKind);
if (length == 0) {
counters.zeroLengthDynamicCounter.inc();
} else {
counters.nonZeroLengthDynamicCounter.inc();
counters.nonZeroLengthDynamicCopiedCounter.add(length);
}
}
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:26,代码来源:ArrayCopySnippets.java
示例11: insertDeoptimization
import jdk.vm.ci.meta.DeoptimizationReason; //导入依赖的package包/类
protected void insertDeoptimization(VirtualizerTool tool) {
/*
* Escape analysis does not allow insertion of a DeoptimizeNode. We work around this
* restriction by inserting an always-failing guard, which will be canonicalized to a
* DeoptimizeNode later on.
*/
LogicNode condition = LogicConstantNode.contradiction();
tool.addNode(condition);
JavaConstant speculation = graph().getSpeculationLog().speculate(frame.getIntrinsifyAccessorsSpeculation());
tool.addNode(new FixedGuardNode(condition, DeoptimizationReason.RuntimeConstraint, DeoptimizationAction.InvalidateReprofile, speculation, false));
if (getStackKind() == JavaKind.Void) {
tool.delete();
} else {
/*
* Even though all usages will be eventually dead, we need to provide a valid
* replacement value for now.
*/
ConstantNode unusedValue = ConstantNode.forConstant(JavaConstant.defaultForKind(getStackKind()), tool.getMetaAccessProvider());
tool.addNode(unusedValue);
tool.replaceWith(unusedValue);
}
}
开发者ID:graalvm,项目名称:graal-core,代码行数:24,代码来源:VirtualFrameAccessorNode.java
示例12: lower
import jdk.vm.ci.meta.DeoptimizationReason; //导入依赖的package包/类
static void lower(LoweringTool tool, IntegerExactArithmeticNode node) {
if (node.asNode().graph().getGuardsStage() == StructuredGraph.GuardsStage.FIXED_DEOPTS) {
FloatingNode floatingNode = (FloatingNode) node;
FixedWithNextNode previous = tool.lastFixedNode();
FixedNode next = previous.next();
previous.setNext(null);
DeoptimizeNode deopt = floatingNode.graph().add(new DeoptimizeNode(DeoptimizationAction.InvalidateReprofile, DeoptimizationReason.ArithmeticException));
AbstractBeginNode normalBegin = floatingNode.graph().add(new BeginNode());
normalBegin.setNext(next);
IntegerExactArithmeticSplitNode split = node.createSplit(normalBegin, BeginNode.begin(deopt));
previous.setNext(split);
floatingNode.replaceAndDelete(split);
}
}
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:15,代码来源:IntegerExactArithmeticSplitNode.java
示例13: registerMethodHandleImplPlugins
import jdk.vm.ci.meta.DeoptimizationReason; //导入依赖的package包/类
private static void registerMethodHandleImplPlugins(InvocationPlugins plugins, SnippetReflectionProvider snippetReflection, BytecodeProvider bytecodeProvider) {
Registration r = new Registration(plugins, "java.lang.invoke.MethodHandleImpl", bytecodeProvider);
r.register2("profileBoolean", boolean.class, int[].class, new InvocationPlugin() {
@Override
public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode result, ValueNode counters) {
if (result.isConstant()) {
b.push(JavaKind.Boolean, result);
return true;
}
if (counters.isConstant()) {
ValueNode newResult = result;
int[] ctrs = snippetReflection.asObject(int[].class, (JavaConstant) counters.asConstant());
if (ctrs != null && ctrs.length == 2) {
int falseCount = ctrs[0];
int trueCount = ctrs[1];
int totalCount = trueCount + falseCount;
if (totalCount == 0) {
b.add(new DeoptimizeNode(DeoptimizationAction.InvalidateReprofile, DeoptimizationReason.TransferToInterpreter));
} else if (falseCount == 0 || trueCount == 0) {
boolean expected = falseCount == 0;
LogicNode condition = b.addWithInputs(
IntegerEqualsNode.create(b.getConstantReflection(), b.getMetaAccess(), b.getOptions(), null, result, b.add(ConstantNode.forBoolean(!expected))));
b.append(new FixedGuardNode(condition, DeoptimizationReason.UnreachedCode, DeoptimizationAction.InvalidateReprofile, true));
newResult = b.add(ConstantNode.forBoolean(expected));
} else {
// We cannot use BranchProbabilityNode here since there's no guarantee
// the result of MethodHandleImpl.profileBoolean() is used as the
// test in an `if` statement (as required by BranchProbabilityNode).
}
}
b.addPush(JavaKind.Boolean, newResult);
return true;
}
return false;
}
});
}
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:39,代码来源:StandardGraphBuilderPlugins.java
示例14: getLength
import jdk.vm.ci.meta.DeoptimizationReason; //导入依赖的package包/类
@MethodSubstitution
public static int getLength(Object array) {
if (!array.getClass().isArray()) {
DeoptimizeNode.deopt(DeoptimizationAction.None, DeoptimizationReason.RuntimeConstraint);
}
return ArrayLengthNode.arrayLength(array);
}
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:8,代码来源:ArraySubstitutions.java
示例15: emitDeoptimizeCaller
import jdk.vm.ci.meta.DeoptimizationReason; //导入依赖的package包/类
@Override
public void emitDeoptimizeCaller(DeoptimizationAction action, DeoptimizationReason reason) {
Value actionAndReason = emitJavaConstant(getMetaAccess().encodeDeoptActionAndReason(action, reason, 0));
Value nullValue = emitConstant(LIRKind.reference(AMD64Kind.QWORD), JavaConstant.NULL_POINTER);
moveDeoptValuesToThread(actionAndReason, nullValue);
append(new AMD64HotSpotDeoptimizeCallerOp());
}
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:8,代码来源:AMD64HotSpotLIRGenerator.java
示例16: bytecodeParserShouldInlineInvoke
import jdk.vm.ci.meta.DeoptimizationReason; //导入依赖的package包/类
@Override
protected InlineInvokePlugin.InlineInfo bytecodeParserShouldInlineInvoke(GraphBuilderContext b, ResolvedJavaMethod method, ValueNode[] args) {
if (method.getName().equals("throwException")) {
if (b.getMethod().getProfilingInfo().getDeoptimizationCount(DeoptimizationReason.NotCompiledExceptionHandler) != 0) {
return InlineInvokePlugin.InlineInfo.DO_NOT_INLINE_WITH_EXCEPTION;
} else {
return InlineInvokePlugin.InlineInfo.DO_NOT_INLINE_NO_EXCEPTION;
}
}
return super.bytecodeParserShouldInlineInvoke(b, method, args);
}
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:12,代码来源:DeoptimizeOnExceptionTest.java
示例17: emitDeoptimizeCaller
import jdk.vm.ci.meta.DeoptimizationReason; //导入依赖的package包/类
@Override
public void emitDeoptimizeCaller(DeoptimizationAction action, DeoptimizationReason reason) {
Value actionAndReason = emitJavaConstant(getMetaAccess().encodeDeoptActionAndReason(action, reason, 0));
Value nullValue = emitJavaConstant(JavaConstant.NULL_POINTER);
moveDeoptValuesToThread(actionAndReason, nullValue);
append(new SPARCHotSpotDeoptimizeCallerOp());
}
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:8,代码来源:SPARCHotSpotLIRGenerator.java
示例18: tryCheckCastSingleImplementor
import jdk.vm.ci.meta.DeoptimizationReason; //导入依赖的package包/类
private boolean tryCheckCastSingleImplementor(ValueNode receiver, TypeReference speculatedType) {
ResolvedJavaType singleImplementor = speculatedType.getType();
if (singleImplementor != null) {
ResolvedJavaMethod singleImplementorMethod = singleImplementor.resolveConcreteMethod(targetMethod(), invoke().getContextType());
if (singleImplementorMethod != null) {
/**
* We have an invoke on an interface with a single implementor. We can replace this
* with an invoke virtual.
*
* To do so we need to ensure two properties: 1) the receiver must implement the
* interface (declaredReceiverType). The verifier does not prove this so we need a
* dynamic check. 2) we need to ensure that there is still only one implementor of
* this interface, i.e. that we are calling the right method. We could do this with
* an assumption but as we need an instanceof check anyway we can verify both
* properties by checking of the receiver is an instance of the single implementor.
*/
ValueAnchorNode anchor = new ValueAnchorNode(null);
if (anchor != null) {
graph().add(anchor);
graph().addBeforeFixed(invoke().asNode(), anchor);
}
LogicNode condition = graph().addOrUniqueWithInputs(InstanceOfNode.create(speculatedType, receiver, getProfile(), anchor));
FixedGuardNode guard = graph().add(new FixedGuardNode(condition, DeoptimizationReason.OptimizedTypeCheckViolated, DeoptimizationAction.InvalidateRecompile, false));
graph().addBeforeFixed(invoke().asNode(), guard);
ValueNode valueNode = graph().addOrUnique(new PiNode(receiver, StampFactory.objectNonNull(speculatedType), guard));
arguments().set(0, valueNode);
if (speculatedType.isExact()) {
setInvokeKind(InvokeKind.Special);
} else {
setInvokeKind(InvokeKind.Virtual);
}
setTargetMethod(singleImplementorMethod);
return true;
}
}
return false;
}
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:38,代码来源:MethodCallTargetNode.java
示例19: GuardNode
import jdk.vm.ci.meta.DeoptimizationReason; //导入依赖的package包/类
protected GuardNode(NodeClass<? extends GuardNode> c, LogicNode condition, AnchoringNode anchor, DeoptimizationReason reason, DeoptimizationAction action, boolean negated,
JavaConstant speculation) {
super(c, StampFactory.forVoid(), anchor);
this.condition = condition;
this.reason = reason;
this.action = action;
this.negated = negated;
this.speculation = speculation;
}
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:10,代码来源:GuardNode.java
示例20: DeoptimizeNode
import jdk.vm.ci.meta.DeoptimizationReason; //导入依赖的package包/类
public DeoptimizeNode(DeoptimizationAction action, DeoptimizationReason reason, int debugId, JavaConstant speculation, FrameState stateBefore) {
super(TYPE, stateBefore);
assert action != null;
assert reason != null;
assert speculation.getJavaKind() == JavaKind.Object;
this.action = action;
this.reason = reason;
this.debugId = debugId;
this.speculation = speculation;
}
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:11,代码来源:DeoptimizeNode.java
注:本文中的jdk.vm.ci.meta.DeoptimizationReason类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论