예제 #1
0
 public DeoptimizationAction decodeDeoptAction(Constant constant) {
   HotSpotVMConfig config = runtime.getConfig();
   int actionValue =
       ((~constant.asInt()) >> config.deoptimizationActionShift)
           & intMaskRight(config.deoptimizationActionBits);
   DeoptimizationAction action = convertDeoptAction(actionValue);
   return action;
 }
예제 #2
0
 public DeoptimizationReason convertDeoptReason(int reason) {
   HotSpotVMConfig config = runtime.getConfig();
   if (reason == config.deoptReasonNone) {
     return DeoptimizationReason.None;
   }
   if (reason == config.deoptReasonNullCheck) {
     return DeoptimizationReason.NullCheckException;
   }
   if (reason == config.deoptReasonRangeCheck) {
     return DeoptimizationReason.BoundsCheckException;
   }
   if (reason == config.deoptReasonClassCheck) {
     return DeoptimizationReason.ClassCastException;
   }
   if (reason == config.deoptReasonArrayCheck) {
     return DeoptimizationReason.ArrayStoreException;
   }
   if (reason == config.deoptReasonUnreached0) {
     return DeoptimizationReason.UnreachedCode;
   }
   if (reason == config.deoptReasonTypeCheckInlining) {
     return DeoptimizationReason.TypeCheckedInliningViolated;
   }
   if (reason == config.deoptReasonOptimizedTypeCheck) {
     return DeoptimizationReason.OptimizedTypeCheckViolated;
   }
   if (reason == config.deoptReasonNotCompiledExceptionHandler) {
     return DeoptimizationReason.NotCompiledExceptionHandler;
   }
   if (reason == config.deoptReasonUnresolved) {
     return DeoptimizationReason.Unresolved;
   }
   if (reason == config.deoptReasonJsrMismatch) {
     return DeoptimizationReason.JavaSubroutineMismatch;
   }
   if (reason == config.deoptReasonDiv0Check) {
     return DeoptimizationReason.ArithmeticException;
   }
   if (reason == config.deoptReasonConstraint) {
     return DeoptimizationReason.RuntimeConstraint;
   }
   if (reason == config.deoptReasonLoopLimitCheck) {
     return DeoptimizationReason.LoopLimitCheck;
   }
   if (reason == config.deoptReasonAliasing) {
     return DeoptimizationReason.Aliasing;
   }
   if (reason == config.deoptReasonTransferToInterpreter) {
     return DeoptimizationReason.TransferToInterpreter;
   }
   throw GraalInternalError.shouldNotReachHere(Integer.toHexString(reason));
 }
예제 #3
0
 @Override
 public Constant encodeDeoptActionAndReason(
     DeoptimizationAction action, DeoptimizationReason reason, int debugId) {
   HotSpotVMConfig config = runtime.getConfig();
   int actionValue = convertDeoptAction(action);
   int reasonValue = convertDeoptReason(reason);
   int debugValue = debugId & intMaskRight(config.deoptimizationDebugIdBits);
   Constant c =
       Constant.forInt(
           ~((debugValue << config.deoptimizationDebugIdShift)
               | (reasonValue << config.deoptimizationReasonShift)
               | (actionValue << config.deoptimizationActionShift)));
   assert c.asInt() < 0;
   return c;
 }
예제 #4
0
 public int convertDeoptAction(DeoptimizationAction action) {
   HotSpotVMConfig config = runtime.getConfig();
   switch (action) {
     case None:
       return config.deoptActionNone;
     case RecompileIfTooManyDeopts:
       return config.deoptActionMaybeRecompile;
     case InvalidateReprofile:
       return config.deoptActionReinterpret;
     case InvalidateRecompile:
       return config.deoptActionMakeNotEntrant;
     case InvalidateStopCompiling:
       return config.deoptActionMakeNotCompilable;
     default:
       throw GraalInternalError.shouldNotReachHere();
   }
 }
예제 #5
0
 public DeoptimizationAction convertDeoptAction(int action) {
   HotSpotVMConfig config = runtime.getConfig();
   if (action == config.deoptActionNone) {
     return DeoptimizationAction.None;
   }
   if (action == config.deoptActionMaybeRecompile) {
     return DeoptimizationAction.RecompileIfTooManyDeopts;
   }
   if (action == config.deoptActionReinterpret) {
     return DeoptimizationAction.InvalidateReprofile;
   }
   if (action == config.deoptActionMakeNotEntrant) {
     return DeoptimizationAction.InvalidateRecompile;
   }
   if (action == config.deoptActionMakeNotCompilable) {
     return DeoptimizationAction.InvalidateStopCompiling;
   }
   throw GraalInternalError.shouldNotReachHere();
 }
예제 #6
0
 public int convertDeoptReason(DeoptimizationReason reason) {
   HotSpotVMConfig config = runtime.getConfig();
   switch (reason) {
     case None:
       return config.deoptReasonNone;
     case NullCheckException:
       return config.deoptReasonNullCheck;
     case BoundsCheckException:
       return config.deoptReasonRangeCheck;
     case ClassCastException:
       return config.deoptReasonClassCheck;
     case ArrayStoreException:
       return config.deoptReasonArrayCheck;
     case UnreachedCode:
       return config.deoptReasonUnreached0;
     case TypeCheckedInliningViolated:
       return config.deoptReasonTypeCheckInlining;
     case OptimizedTypeCheckViolated:
       return config.deoptReasonOptimizedTypeCheck;
     case NotCompiledExceptionHandler:
       return config.deoptReasonNotCompiledExceptionHandler;
     case Unresolved:
       return config.deoptReasonUnresolved;
     case JavaSubroutineMismatch:
       return config.deoptReasonJsrMismatch;
     case ArithmeticException:
       return config.deoptReasonDiv0Check;
     case RuntimeConstraint:
       return config.deoptReasonConstraint;
     case LoopLimitCheck:
       return config.deoptReasonLoopLimitCheck;
     case Aliasing:
       return config.deoptReasonAliasing;
     case TransferToInterpreter:
       return config.deoptReasonTransferToInterpreter;
     default:
       throw GraalInternalError.shouldNotReachHere();
   }
 }
예제 #7
0
 public int decodeDebugId(Constant constant) {
   HotSpotVMConfig config = runtime.getConfig();
   return ((~constant.asInt()) >> config.deoptimizationDebugIdShift)
       & intMaskRight(config.deoptimizationDebugIdBits);
 }