529 } else {
530 Constant* con = x->obj()->as_Constant();
531 if (con) {
532 ObjectType* c = con->type()->as_ObjectType();
533 if (c && c->is_loaded()) {
534 ObjectConstant* oc = c->as_ObjectConstant();
535 if (!oc || !oc->value()->is_null_object()) {
536 set_canonical(con);
537 }
538 }
539 }
540 }
541 }
542
543 void Canonicalizer::do_Invoke (Invoke* x) {}
544 void Canonicalizer::do_NewInstance (NewInstance* x) {}
545 void Canonicalizer::do_NewTypeArray (NewTypeArray* x) {}
546 void Canonicalizer::do_NewObjectArray (NewObjectArray* x) {}
547 void Canonicalizer::do_NewMultiArray (NewMultiArray* x) {}
548 void Canonicalizer::do_CheckCast (CheckCast* x) {
549 if (x->klass()->is_loaded()) {
550 Value obj = x->obj();
551 ciType* klass = obj->exact_type();
552 if (klass == NULL) klass = obj->declared_type();
553 if (klass != NULL && klass->is_loaded() && klass->is_subtype_of(x->klass())) {
554 set_canonical(obj);
555 return;
556 }
557 // checkcast of null returns null
558 if (obj->as_Constant() && obj->type()->as_ObjectType()->constant_value()->is_null_object()) {
559 set_canonical(obj);
560 }
561 }
562 }
563 void Canonicalizer::do_InstanceOf (InstanceOf* x) {
564 if (x->klass()->is_loaded()) {
565 Value obj = x->obj();
566 ciType* exact = obj->exact_type();
567 if (exact != NULL && exact->is_loaded() && (obj->as_NewInstance() || obj->as_NewArray())) {
568 set_constant(exact->is_subtype_of(x->klass()) ? 1 : 0);
569 return;
|
529 } else {
530 Constant* con = x->obj()->as_Constant();
531 if (con) {
532 ObjectType* c = con->type()->as_ObjectType();
533 if (c && c->is_loaded()) {
534 ObjectConstant* oc = c->as_ObjectConstant();
535 if (!oc || !oc->value()->is_null_object()) {
536 set_canonical(con);
537 }
538 }
539 }
540 }
541 }
542
543 void Canonicalizer::do_Invoke (Invoke* x) {}
544 void Canonicalizer::do_NewInstance (NewInstance* x) {}
545 void Canonicalizer::do_NewTypeArray (NewTypeArray* x) {}
546 void Canonicalizer::do_NewObjectArray (NewObjectArray* x) {}
547 void Canonicalizer::do_NewMultiArray (NewMultiArray* x) {}
548 void Canonicalizer::do_CheckCast (CheckCast* x) {
549 if (!x->is_profile_inlining() && x->klass()->is_loaded()) {
550 Value obj = x->obj();
551 ciType* klass = obj->exact_type();
552 if (klass == NULL) klass = obj->declared_type();
553 if (klass != NULL && klass->is_loaded() && klass->is_subtype_of(x->klass())) {
554 set_canonical(obj);
555 return;
556 }
557 // checkcast of null returns null
558 if (obj->as_Constant() && obj->type()->as_ObjectType()->constant_value()->is_null_object()) {
559 set_canonical(obj);
560 }
561 }
562 }
563 void Canonicalizer::do_InstanceOf (InstanceOf* x) {
564 if (x->klass()->is_loaded()) {
565 Value obj = x->obj();
566 ciType* exact = obj->exact_type();
567 if (exact != NULL && exact->is_loaded() && (obj->as_NewInstance() || obj->as_NewArray())) {
568 set_constant(exact->is_subtype_of(x->klass()) ? 1 : 0);
569 return;
|