in src/hotspot/share/compiler/methodLiveness.cpp [469:756]
void MethodLiveness::BasicBlock::compute_gen_kill_single(ciBytecodeStream *instruction) {
// We prohibit _gen and _kill from having locals in common. If we
// know that one is definitely going to be applied before the other,
// we could save some computation time by relaxing this prohibition.
switch (instruction->cur_bc()) {
case Bytecodes::_nop:
case Bytecodes::_goto:
case Bytecodes::_goto_w:
case Bytecodes::_aconst_null:
case Bytecodes::_new:
case Bytecodes::_iconst_m1:
case Bytecodes::_iconst_0:
case Bytecodes::_iconst_1:
case Bytecodes::_iconst_2:
case Bytecodes::_iconst_3:
case Bytecodes::_iconst_4:
case Bytecodes::_iconst_5:
case Bytecodes::_fconst_0:
case Bytecodes::_fconst_1:
case Bytecodes::_fconst_2:
case Bytecodes::_bipush:
case Bytecodes::_sipush:
case Bytecodes::_lconst_0:
case Bytecodes::_lconst_1:
case Bytecodes::_dconst_0:
case Bytecodes::_dconst_1:
case Bytecodes::_ldc2_w:
case Bytecodes::_ldc:
case Bytecodes::_ldc_w:
case Bytecodes::_iaload:
case Bytecodes::_faload:
case Bytecodes::_baload:
case Bytecodes::_caload:
case Bytecodes::_saload:
case Bytecodes::_laload:
case Bytecodes::_daload:
case Bytecodes::_aaload:
case Bytecodes::_iastore:
case Bytecodes::_fastore:
case Bytecodes::_bastore:
case Bytecodes::_castore:
case Bytecodes::_sastore:
case Bytecodes::_lastore:
case Bytecodes::_dastore:
case Bytecodes::_aastore:
case Bytecodes::_pop:
case Bytecodes::_pop2:
case Bytecodes::_dup:
case Bytecodes::_dup_x1:
case Bytecodes::_dup_x2:
case Bytecodes::_dup2:
case Bytecodes::_dup2_x1:
case Bytecodes::_dup2_x2:
case Bytecodes::_swap:
case Bytecodes::_iadd:
case Bytecodes::_fadd:
case Bytecodes::_isub:
case Bytecodes::_fsub:
case Bytecodes::_imul:
case Bytecodes::_fmul:
case Bytecodes::_idiv:
case Bytecodes::_fdiv:
case Bytecodes::_irem:
case Bytecodes::_frem:
case Bytecodes::_ishl:
case Bytecodes::_ishr:
case Bytecodes::_iushr:
case Bytecodes::_iand:
case Bytecodes::_ior:
case Bytecodes::_ixor:
case Bytecodes::_l2f:
case Bytecodes::_l2i:
case Bytecodes::_d2f:
case Bytecodes::_d2i:
case Bytecodes::_fcmpl:
case Bytecodes::_fcmpg:
case Bytecodes::_ladd:
case Bytecodes::_dadd:
case Bytecodes::_lsub:
case Bytecodes::_dsub:
case Bytecodes::_lmul:
case Bytecodes::_dmul:
case Bytecodes::_ldiv:
case Bytecodes::_ddiv:
case Bytecodes::_lrem:
case Bytecodes::_drem:
case Bytecodes::_land:
case Bytecodes::_lor:
case Bytecodes::_lxor:
case Bytecodes::_ineg:
case Bytecodes::_fneg:
case Bytecodes::_i2f:
case Bytecodes::_f2i:
case Bytecodes::_i2c:
case Bytecodes::_i2s:
case Bytecodes::_i2b:
case Bytecodes::_lneg:
case Bytecodes::_dneg:
case Bytecodes::_l2d:
case Bytecodes::_d2l:
case Bytecodes::_lshl:
case Bytecodes::_lshr:
case Bytecodes::_lushr:
case Bytecodes::_i2l:
case Bytecodes::_i2d:
case Bytecodes::_f2l:
case Bytecodes::_f2d:
case Bytecodes::_lcmp:
case Bytecodes::_dcmpl:
case Bytecodes::_dcmpg:
case Bytecodes::_ifeq:
case Bytecodes::_ifne:
case Bytecodes::_iflt:
case Bytecodes::_ifge:
case Bytecodes::_ifgt:
case Bytecodes::_ifle:
case Bytecodes::_tableswitch:
case Bytecodes::_ireturn:
case Bytecodes::_freturn:
case Bytecodes::_if_icmpeq:
case Bytecodes::_if_icmpne:
case Bytecodes::_if_icmplt:
case Bytecodes::_if_icmpge:
case Bytecodes::_if_icmpgt:
case Bytecodes::_if_icmple:
case Bytecodes::_lreturn:
case Bytecodes::_dreturn:
case Bytecodes::_if_acmpeq:
case Bytecodes::_if_acmpne:
case Bytecodes::_jsr:
case Bytecodes::_jsr_w:
case Bytecodes::_getstatic:
case Bytecodes::_putstatic:
case Bytecodes::_getfield:
case Bytecodes::_putfield:
case Bytecodes::_invokevirtual:
case Bytecodes::_invokespecial:
case Bytecodes::_invokestatic:
case Bytecodes::_invokeinterface:
case Bytecodes::_invokedynamic:
case Bytecodes::_newarray:
case Bytecodes::_anewarray:
case Bytecodes::_checkcast:
case Bytecodes::_arraylength:
case Bytecodes::_instanceof:
case Bytecodes::_athrow:
case Bytecodes::_areturn:
case Bytecodes::_monitorenter:
case Bytecodes::_monitorexit:
case Bytecodes::_ifnull:
case Bytecodes::_ifnonnull:
case Bytecodes::_multianewarray:
case Bytecodes::_lookupswitch:
// These bytecodes have no effect on the method's locals.
break;
case Bytecodes::_return:
if (instruction->method()->intrinsic_id() == vmIntrinsics::_Object_init) {
// return from Object.init implicitly registers a finalizer
// for the receiver if needed, so keep it alive.
load_one(0);
}
break;
case Bytecodes::_lload:
case Bytecodes::_dload:
load_two(instruction->get_index());
break;
case Bytecodes::_lload_0:
case Bytecodes::_dload_0:
load_two(0);
break;
case Bytecodes::_lload_1:
case Bytecodes::_dload_1:
load_two(1);
break;
case Bytecodes::_lload_2:
case Bytecodes::_dload_2:
load_two(2);
break;
case Bytecodes::_lload_3:
case Bytecodes::_dload_3:
load_two(3);
break;
case Bytecodes::_iload:
case Bytecodes::_iinc:
case Bytecodes::_fload:
case Bytecodes::_aload:
case Bytecodes::_ret:
load_one(instruction->get_index());
break;
case Bytecodes::_iload_0:
case Bytecodes::_fload_0:
case Bytecodes::_aload_0:
load_one(0);
break;
case Bytecodes::_iload_1:
case Bytecodes::_fload_1:
case Bytecodes::_aload_1:
load_one(1);
break;
case Bytecodes::_iload_2:
case Bytecodes::_fload_2:
case Bytecodes::_aload_2:
load_one(2);
break;
case Bytecodes::_iload_3:
case Bytecodes::_fload_3:
case Bytecodes::_aload_3:
load_one(3);
break;
case Bytecodes::_lstore:
case Bytecodes::_dstore:
store_two(instruction->get_index());
break;
case Bytecodes::_lstore_0:
case Bytecodes::_dstore_0:
store_two(0);
break;
case Bytecodes::_lstore_1:
case Bytecodes::_dstore_1:
store_two(1);
break;
case Bytecodes::_lstore_2:
case Bytecodes::_dstore_2:
store_two(2);
break;
case Bytecodes::_lstore_3:
case Bytecodes::_dstore_3:
store_two(3);
break;
case Bytecodes::_istore:
case Bytecodes::_fstore:
case Bytecodes::_astore:
store_one(instruction->get_index());
break;
case Bytecodes::_istore_0:
case Bytecodes::_fstore_0:
case Bytecodes::_astore_0:
store_one(0);
break;
case Bytecodes::_istore_1:
case Bytecodes::_fstore_1:
case Bytecodes::_astore_1:
store_one(1);
break;
case Bytecodes::_istore_2:
case Bytecodes::_fstore_2:
case Bytecodes::_astore_2:
store_one(2);
break;
case Bytecodes::_istore_3:
case Bytecodes::_fstore_3:
case Bytecodes::_astore_3:
store_one(3);
break;
case Bytecodes::_wide:
fatal("Iterator should skip this bytecode");
break;
default:
tty->print("unexpected opcode: %d\n", instruction->cur_bc());
ShouldNotReachHere();
break;
}
}