src/share/vm/c1/c1_LIR.cpp

Print this page
rev 2897 : 7123253: C1: in store check code, usage of registers may be incorrect
Summary: fix usage of input register in assembly code for store check.
Reviewed-by:


 837 
 838 // LIR_OpDelay
 839     case lir_delay_slot: {
 840       assert(op->as_OpDelay() != NULL, "must be");
 841       LIR_OpDelay* opDelay = (LIR_OpDelay*)op;
 842 
 843       visit(opDelay->delay_op());
 844       break;
 845     }
 846 
 847 // LIR_OpTypeCheck
 848     case lir_instanceof:
 849     case lir_checkcast:
 850     case lir_store_check: {
 851       assert(op->as_OpTypeCheck() != NULL, "must be");
 852       LIR_OpTypeCheck* opTypeCheck = (LIR_OpTypeCheck*)op;
 853 
 854       if (opTypeCheck->_info_for_exception)       do_info(opTypeCheck->_info_for_exception);
 855       if (opTypeCheck->_info_for_patch)           do_info(opTypeCheck->_info_for_patch);
 856       if (opTypeCheck->_object->is_valid())       do_input(opTypeCheck->_object);



 857       if (opTypeCheck->_array->is_valid())        do_input(opTypeCheck->_array);
 858       if (opTypeCheck->_tmp1->is_valid())         do_temp(opTypeCheck->_tmp1);
 859       if (opTypeCheck->_tmp2->is_valid())         do_temp(opTypeCheck->_tmp2);
 860       if (opTypeCheck->_tmp3->is_valid())         do_temp(opTypeCheck->_tmp3);
 861       if (opTypeCheck->_result->is_valid())       do_output(opTypeCheck->_result);
 862                                                   do_stub(opTypeCheck->_stub);
 863       break;
 864     }
 865 
 866 // LIR_OpCompareAndSwap
 867     case lir_cas_long:
 868     case lir_cas_obj:
 869     case lir_cas_int: {
 870       assert(op->as_OpCompareAndSwap() != NULL, "must be");
 871       LIR_OpCompareAndSwap* opCompareAndSwap = (LIR_OpCompareAndSwap*)op;
 872 
 873       assert(opCompareAndSwap->_addr->is_valid(),      "used");
 874       assert(opCompareAndSwap->_cmp_value->is_valid(), "used");
 875       assert(opCompareAndSwap->_new_value->is_valid(), "used");
 876       if (opCompareAndSwap->_info)                    do_info(opCompareAndSwap->_info);




 837 
 838 // LIR_OpDelay
 839     case lir_delay_slot: {
 840       assert(op->as_OpDelay() != NULL, "must be");
 841       LIR_OpDelay* opDelay = (LIR_OpDelay*)op;
 842 
 843       visit(opDelay->delay_op());
 844       break;
 845     }
 846 
 847 // LIR_OpTypeCheck
 848     case lir_instanceof:
 849     case lir_checkcast:
 850     case lir_store_check: {
 851       assert(op->as_OpTypeCheck() != NULL, "must be");
 852       LIR_OpTypeCheck* opTypeCheck = (LIR_OpTypeCheck*)op;
 853 
 854       if (opTypeCheck->_info_for_exception)       do_info(opTypeCheck->_info_for_exception);
 855       if (opTypeCheck->_info_for_patch)           do_info(opTypeCheck->_info_for_patch);
 856       if (opTypeCheck->_object->is_valid())       do_input(opTypeCheck->_object);
 857       if (op->code() == lir_store_check && opTypeCheck->_object->is_valid()) {
 858         do_temp(opTypeCheck->_object);
 859       }
 860       if (opTypeCheck->_array->is_valid())        do_input(opTypeCheck->_array);
 861       if (opTypeCheck->_tmp1->is_valid())         do_temp(opTypeCheck->_tmp1);
 862       if (opTypeCheck->_tmp2->is_valid())         do_temp(opTypeCheck->_tmp2);
 863       if (opTypeCheck->_tmp3->is_valid())         do_temp(opTypeCheck->_tmp3);
 864       if (opTypeCheck->_result->is_valid())       do_output(opTypeCheck->_result);
 865                                                   do_stub(opTypeCheck->_stub);
 866       break;
 867     }
 868 
 869 // LIR_OpCompareAndSwap
 870     case lir_cas_long:
 871     case lir_cas_obj:
 872     case lir_cas_int: {
 873       assert(op->as_OpCompareAndSwap() != NULL, "must be");
 874       LIR_OpCompareAndSwap* opCompareAndSwap = (LIR_OpCompareAndSwap*)op;
 875 
 876       assert(opCompareAndSwap->_addr->is_valid(),      "used");
 877       assert(opCompareAndSwap->_cmp_value->is_valid(), "used");
 878       assert(opCompareAndSwap->_new_value->is_valid(), "used");
 879       if (opCompareAndSwap->_info)                    do_info(opCompareAndSwap->_info);