60 class NegateOp; 61 class Op2; 62 class ArithmeticOp; 63 class ShiftOp; 64 class LogicOp; 65 class CompareOp; 66 class IfOp; 67 class Convert; 68 class NullCheck; 69 class TypeCast; 70 class OsrEntry; 71 class ExceptionObject; 72 class StateSplit; 73 class Invoke; 74 class NewInstance; 75 class NewValueTypeInstance; 76 class NewArray; 77 class NewTypeArray; 78 class NewObjectArray; 79 class NewMultiArray; 80 class TypeCheck; 81 class CheckCast; 82 class InstanceOf; 83 class AccessMonitor; 84 class MonitorEnter; 85 class MonitorExit; 86 class Intrinsic; 87 class BlockBegin; 88 class BlockEnd; 89 class Goto; 90 class If; 91 class IfInstanceOf; 92 class Switch; 93 class TableSwitch; 94 class LookupSwitch; 95 class Return; 96 class Throw; 97 class Base; 98 class RoundFP; 99 class UnsafeOp; 165 virtual void do_LoadField (LoadField* x) = 0; 166 virtual void do_StoreField (StoreField* x) = 0; 167 virtual void do_ArrayLength (ArrayLength* x) = 0; 168 virtual void do_LoadIndexed (LoadIndexed* x) = 0; 169 virtual void do_StoreIndexed (StoreIndexed* x) = 0; 170 virtual void do_NegateOp (NegateOp* x) = 0; 171 virtual void do_ArithmeticOp (ArithmeticOp* x) = 0; 172 virtual void do_ShiftOp (ShiftOp* x) = 0; 173 virtual void do_LogicOp (LogicOp* x) = 0; 174 virtual void do_CompareOp (CompareOp* x) = 0; 175 virtual void do_IfOp (IfOp* x) = 0; 176 virtual void do_Convert (Convert* x) = 0; 177 virtual void do_NullCheck (NullCheck* x) = 0; 178 virtual void do_TypeCast (TypeCast* x) = 0; 179 virtual void do_Invoke (Invoke* x) = 0; 180 virtual void do_NewInstance (NewInstance* x) = 0; 181 virtual void do_NewValueTypeInstance(NewValueTypeInstance* x) = 0; 182 virtual void do_NewTypeArray (NewTypeArray* x) = 0; 183 virtual void do_NewObjectArray (NewObjectArray* x) = 0; 184 virtual void do_NewMultiArray (NewMultiArray* x) = 0; 185 virtual void do_CheckCast (CheckCast* x) = 0; 186 virtual void do_InstanceOf (InstanceOf* x) = 0; 187 virtual void do_MonitorEnter (MonitorEnter* x) = 0; 188 virtual void do_MonitorExit (MonitorExit* x) = 0; 189 virtual void do_Intrinsic (Intrinsic* x) = 0; 190 virtual void do_BlockBegin (BlockBegin* x) = 0; 191 virtual void do_Goto (Goto* x) = 0; 192 virtual void do_If (If* x) = 0; 193 virtual void do_IfInstanceOf (IfInstanceOf* x) = 0; 194 virtual void do_TableSwitch (TableSwitch* x) = 0; 195 virtual void do_LookupSwitch (LookupSwitch* x) = 0; 196 virtual void do_Return (Return* x) = 0; 197 virtual void do_Throw (Throw* x) = 0; 198 virtual void do_Base (Base* x) = 0; 199 virtual void do_OsrEntry (OsrEntry* x) = 0; 200 virtual void do_ExceptionObject(ExceptionObject* x) = 0; 201 virtual void do_RoundFP (RoundFP* x) = 0; 202 virtual void do_UnsafeGetRaw (UnsafeGetRaw* x) = 0; 203 virtual void do_UnsafePutRaw (UnsafePutRaw* x) = 0; 204 virtual void do_UnsafeGetObject(UnsafeGetObject* x) = 0; 548 virtual LoadIndexed* as_LoadIndexed() { return NULL; } 549 virtual StoreIndexed* as_StoreIndexed() { return NULL; } 550 virtual NegateOp* as_NegateOp() { return NULL; } 551 virtual Op2* as_Op2() { return NULL; } 552 virtual ArithmeticOp* as_ArithmeticOp() { return NULL; } 553 virtual ShiftOp* as_ShiftOp() { return NULL; } 554 virtual LogicOp* as_LogicOp() { return NULL; } 555 virtual CompareOp* as_CompareOp() { return NULL; } 556 virtual IfOp* as_IfOp() { return NULL; } 557 virtual Convert* as_Convert() { return NULL; } 558 virtual NullCheck* as_NullCheck() { return NULL; } 559 virtual OsrEntry* as_OsrEntry() { return NULL; } 560 virtual StateSplit* as_StateSplit() { return NULL; } 561 virtual Invoke* as_Invoke() { return NULL; } 562 virtual NewInstance* as_NewInstance() { return NULL; } 563 virtual NewValueTypeInstance* as_NewValueTypeInstance() { return NULL; } 564 virtual NewArray* as_NewArray() { return NULL; } 565 virtual NewTypeArray* as_NewTypeArray() { return NULL; } 566 virtual NewObjectArray* as_NewObjectArray() { return NULL; } 567 virtual NewMultiArray* as_NewMultiArray() { return NULL; } 568 virtual TypeCheck* as_TypeCheck() { return NULL; } 569 virtual CheckCast* as_CheckCast() { return NULL; } 570 virtual InstanceOf* as_InstanceOf() { return NULL; } 571 virtual TypeCast* as_TypeCast() { return NULL; } 572 virtual AccessMonitor* as_AccessMonitor() { return NULL; } 573 virtual MonitorEnter* as_MonitorEnter() { return NULL; } 574 virtual MonitorExit* as_MonitorExit() { return NULL; } 575 virtual Intrinsic* as_Intrinsic() { return NULL; } 576 virtual BlockBegin* as_BlockBegin() { return NULL; } 577 virtual BlockEnd* as_BlockEnd() { return NULL; } 578 virtual Goto* as_Goto() { return NULL; } 579 virtual If* as_If() { return NULL; } 580 virtual IfInstanceOf* as_IfInstanceOf() { return NULL; } 581 virtual TableSwitch* as_TableSwitch() { return NULL; } 582 virtual LookupSwitch* as_LookupSwitch() { return NULL; } 583 virtual Return* as_Return() { return NULL; } 584 virtual Throw* as_Throw() { return NULL; } 585 virtual Base* as_Base() { return NULL; } 586 virtual RoundFP* as_RoundFP() { return NULL; } 587 virtual ExceptionObject* as_ExceptionObject() { return NULL; } 1450 // accessors 1451 ciKlass* klass() const { return _klass; } 1452 Values* dims() const { return _dims; } 1453 int rank() const { return dims()->length(); } 1454 1455 // generic 1456 virtual void input_values_do(ValueVisitor* f) { 1457 // NOTE: we do not call NewArray::input_values_do since "length" 1458 // is meaningless for a multi-dimensional array; passing the 1459 // zeroth element down to NewArray as its length is a bad idea 1460 // since there will be a copy in the "dims" array which doesn't 1461 // get updated, and the value must not be traversed twice. Was bug 1462 // - kbr 4/10/2001 1463 StateSplit::input_values_do(f); 1464 for (int i = 0; i < _dims->length(); i++) f->visit(_dims->adr_at(i)); 1465 } 1466 1467 ciType* exact_type() const; 1468 }; 1469 1470 1471 BASE(TypeCheck, StateSplit) 1472 private: 1473 ciKlass* _klass; 1474 Value _obj; 1475 1476 ciMethod* _profiled_method; 1477 int _profiled_bci; 1478 1479 public: 1480 // creation 1481 TypeCheck(ciKlass* klass, Value obj, ValueType* type, ValueStack* state_before) 1482 : StateSplit(type, state_before), _klass(klass), _obj(obj), 1483 _profiled_method(NULL), _profiled_bci(0) { 1484 ASSERT_VALUES 1485 set_direct_compare(false); 1486 } 1487 1488 // accessors 1489 ciKlass* klass() const { return _klass; } | 60 class NegateOp; 61 class Op2; 62 class ArithmeticOp; 63 class ShiftOp; 64 class LogicOp; 65 class CompareOp; 66 class IfOp; 67 class Convert; 68 class NullCheck; 69 class TypeCast; 70 class OsrEntry; 71 class ExceptionObject; 72 class StateSplit; 73 class Invoke; 74 class NewInstance; 75 class NewValueTypeInstance; 76 class NewArray; 77 class NewTypeArray; 78 class NewObjectArray; 79 class NewMultiArray; 80 class WithField; 81 class DefaultValue; 82 class TypeCheck; 83 class CheckCast; 84 class InstanceOf; 85 class AccessMonitor; 86 class MonitorEnter; 87 class MonitorExit; 88 class Intrinsic; 89 class BlockBegin; 90 class BlockEnd; 91 class Goto; 92 class If; 93 class IfInstanceOf; 94 class Switch; 95 class TableSwitch; 96 class LookupSwitch; 97 class Return; 98 class Throw; 99 class Base; 100 class RoundFP; 101 class UnsafeOp; 167 virtual void do_LoadField (LoadField* x) = 0; 168 virtual void do_StoreField (StoreField* x) = 0; 169 virtual void do_ArrayLength (ArrayLength* x) = 0; 170 virtual void do_LoadIndexed (LoadIndexed* x) = 0; 171 virtual void do_StoreIndexed (StoreIndexed* x) = 0; 172 virtual void do_NegateOp (NegateOp* x) = 0; 173 virtual void do_ArithmeticOp (ArithmeticOp* x) = 0; 174 virtual void do_ShiftOp (ShiftOp* x) = 0; 175 virtual void do_LogicOp (LogicOp* x) = 0; 176 virtual void do_CompareOp (CompareOp* x) = 0; 177 virtual void do_IfOp (IfOp* x) = 0; 178 virtual void do_Convert (Convert* x) = 0; 179 virtual void do_NullCheck (NullCheck* x) = 0; 180 virtual void do_TypeCast (TypeCast* x) = 0; 181 virtual void do_Invoke (Invoke* x) = 0; 182 virtual void do_NewInstance (NewInstance* x) = 0; 183 virtual void do_NewValueTypeInstance(NewValueTypeInstance* x) = 0; 184 virtual void do_NewTypeArray (NewTypeArray* x) = 0; 185 virtual void do_NewObjectArray (NewObjectArray* x) = 0; 186 virtual void do_NewMultiArray (NewMultiArray* x) = 0; 187 virtual void do_WithField (WithField* x) = 0; 188 virtual void do_DefaultValue (DefaultValue* x) = 0; 189 virtual void do_CheckCast (CheckCast* x) = 0; 190 virtual void do_InstanceOf (InstanceOf* x) = 0; 191 virtual void do_MonitorEnter (MonitorEnter* x) = 0; 192 virtual void do_MonitorExit (MonitorExit* x) = 0; 193 virtual void do_Intrinsic (Intrinsic* x) = 0; 194 virtual void do_BlockBegin (BlockBegin* x) = 0; 195 virtual void do_Goto (Goto* x) = 0; 196 virtual void do_If (If* x) = 0; 197 virtual void do_IfInstanceOf (IfInstanceOf* x) = 0; 198 virtual void do_TableSwitch (TableSwitch* x) = 0; 199 virtual void do_LookupSwitch (LookupSwitch* x) = 0; 200 virtual void do_Return (Return* x) = 0; 201 virtual void do_Throw (Throw* x) = 0; 202 virtual void do_Base (Base* x) = 0; 203 virtual void do_OsrEntry (OsrEntry* x) = 0; 204 virtual void do_ExceptionObject(ExceptionObject* x) = 0; 205 virtual void do_RoundFP (RoundFP* x) = 0; 206 virtual void do_UnsafeGetRaw (UnsafeGetRaw* x) = 0; 207 virtual void do_UnsafePutRaw (UnsafePutRaw* x) = 0; 208 virtual void do_UnsafeGetObject(UnsafeGetObject* x) = 0; 552 virtual LoadIndexed* as_LoadIndexed() { return NULL; } 553 virtual StoreIndexed* as_StoreIndexed() { return NULL; } 554 virtual NegateOp* as_NegateOp() { return NULL; } 555 virtual Op2* as_Op2() { return NULL; } 556 virtual ArithmeticOp* as_ArithmeticOp() { return NULL; } 557 virtual ShiftOp* as_ShiftOp() { return NULL; } 558 virtual LogicOp* as_LogicOp() { return NULL; } 559 virtual CompareOp* as_CompareOp() { return NULL; } 560 virtual IfOp* as_IfOp() { return NULL; } 561 virtual Convert* as_Convert() { return NULL; } 562 virtual NullCheck* as_NullCheck() { return NULL; } 563 virtual OsrEntry* as_OsrEntry() { return NULL; } 564 virtual StateSplit* as_StateSplit() { return NULL; } 565 virtual Invoke* as_Invoke() { return NULL; } 566 virtual NewInstance* as_NewInstance() { return NULL; } 567 virtual NewValueTypeInstance* as_NewValueTypeInstance() { return NULL; } 568 virtual NewArray* as_NewArray() { return NULL; } 569 virtual NewTypeArray* as_NewTypeArray() { return NULL; } 570 virtual NewObjectArray* as_NewObjectArray() { return NULL; } 571 virtual NewMultiArray* as_NewMultiArray() { return NULL; } 572 virtual WithField* as_WithField() { return NULL; } 573 virtual DefaultValue* as_DefaultValue() { return NULL; } 574 virtual TypeCheck* as_TypeCheck() { return NULL; } 575 virtual CheckCast* as_CheckCast() { return NULL; } 576 virtual InstanceOf* as_InstanceOf() { return NULL; } 577 virtual TypeCast* as_TypeCast() { return NULL; } 578 virtual AccessMonitor* as_AccessMonitor() { return NULL; } 579 virtual MonitorEnter* as_MonitorEnter() { return NULL; } 580 virtual MonitorExit* as_MonitorExit() { return NULL; } 581 virtual Intrinsic* as_Intrinsic() { return NULL; } 582 virtual BlockBegin* as_BlockBegin() { return NULL; } 583 virtual BlockEnd* as_BlockEnd() { return NULL; } 584 virtual Goto* as_Goto() { return NULL; } 585 virtual If* as_If() { return NULL; } 586 virtual IfInstanceOf* as_IfInstanceOf() { return NULL; } 587 virtual TableSwitch* as_TableSwitch() { return NULL; } 588 virtual LookupSwitch* as_LookupSwitch() { return NULL; } 589 virtual Return* as_Return() { return NULL; } 590 virtual Throw* as_Throw() { return NULL; } 591 virtual Base* as_Base() { return NULL; } 592 virtual RoundFP* as_RoundFP() { return NULL; } 593 virtual ExceptionObject* as_ExceptionObject() { return NULL; } 1456 // accessors 1457 ciKlass* klass() const { return _klass; } 1458 Values* dims() const { return _dims; } 1459 int rank() const { return dims()->length(); } 1460 1461 // generic 1462 virtual void input_values_do(ValueVisitor* f) { 1463 // NOTE: we do not call NewArray::input_values_do since "length" 1464 // is meaningless for a multi-dimensional array; passing the 1465 // zeroth element down to NewArray as its length is a bad idea 1466 // since there will be a copy in the "dims" array which doesn't 1467 // get updated, and the value must not be traversed twice. Was bug 1468 // - kbr 4/10/2001 1469 StateSplit::input_values_do(f); 1470 for (int i = 0; i < _dims->length(); i++) f->visit(_dims->adr_at(i)); 1471 } 1472 1473 ciType* exact_type() const; 1474 }; 1475 1476 LEAF(WithField, StateSplit) 1477 public: 1478 // creation 1479 WithField(ValueType* type, ValueStack* state_before) 1480 : StateSplit(type, state_before) {} 1481 }; 1482 1483 LEAF(DefaultValue, StateSplit) 1484 public: 1485 // creation 1486 DefaultValue(ValueType* type, ValueStack* state_before) 1487 : StateSplit(type, state_before) {} 1488 }; 1489 1490 BASE(TypeCheck, StateSplit) 1491 private: 1492 ciKlass* _klass; 1493 Value _obj; 1494 1495 ciMethod* _profiled_method; 1496 int _profiled_bci; 1497 1498 public: 1499 // creation 1500 TypeCheck(ciKlass* klass, Value obj, ValueType* type, ValueStack* state_before) 1501 : StateSplit(type, state_before), _klass(klass), _obj(obj), 1502 _profiled_method(NULL), _profiled_bci(0) { 1503 ASSERT_VALUES 1504 set_direct_compare(false); 1505 } 1506 1507 // accessors 1508 ciKlass* klass() const { return _klass; } |