627 void Canonicalizer::do_NullCheck (NullCheck* x) {
628 if (x->obj()->as_NewArray() != NULL || x->obj()->as_NewInstance() != NULL) {
629 set_canonical(x->obj());
630 } else {
631 Constant* con = x->obj()->as_Constant();
632 if (con) {
633 ObjectType* c = con->type()->as_ObjectType();
634 if (c && c->is_loaded()) {
635 ObjectConstant* oc = c->as_ObjectConstant();
636 if (!oc || !oc->value()->is_null_object()) {
637 set_canonical(con);
638 }
639 }
640 }
641 }
642 }
643
644 void Canonicalizer::do_TypeCast (TypeCast* x) {}
645 void Canonicalizer::do_Invoke (Invoke* x) {}
646 void Canonicalizer::do_NewInstance (NewInstance* x) {}
647 void Canonicalizer::do_NewTypeArray (NewTypeArray* x) {}
648 void Canonicalizer::do_NewObjectArray (NewObjectArray* x) {}
649 void Canonicalizer::do_NewMultiArray (NewMultiArray* x) {}
650 void Canonicalizer::do_CheckCast (CheckCast* x) {
651 if (x->klass()->is_loaded()) {
652 Value obj = x->obj();
653 ciType* klass = obj->exact_type();
654 if (klass == NULL) {
655 klass = obj->declared_type();
656 }
657 if (klass != NULL && klass->is_loaded()) {
658 bool is_interface = klass->is_instance_klass() &&
659 klass->as_instance_klass()->is_interface();
660 // Interface casts can't be statically optimized away since verifier doesn't
661 // enforce interface types in bytecode.
662 if (!is_interface && klass->is_subtype_of(x->klass())) {
663 set_canonical(obj);
664 return;
665 }
666 }
667 // checkcast of null returns null
668 if (obj->as_Constant() && obj->type()->as_ObjectType()->constant_value()->is_null_object()) {
669 set_canonical(obj);
670 }
671 }
|
627 void Canonicalizer::do_NullCheck (NullCheck* x) {
628 if (x->obj()->as_NewArray() != NULL || x->obj()->as_NewInstance() != NULL) {
629 set_canonical(x->obj());
630 } else {
631 Constant* con = x->obj()->as_Constant();
632 if (con) {
633 ObjectType* c = con->type()->as_ObjectType();
634 if (c && c->is_loaded()) {
635 ObjectConstant* oc = c->as_ObjectConstant();
636 if (!oc || !oc->value()->is_null_object()) {
637 set_canonical(con);
638 }
639 }
640 }
641 }
642 }
643
644 void Canonicalizer::do_TypeCast (TypeCast* x) {}
645 void Canonicalizer::do_Invoke (Invoke* x) {}
646 void Canonicalizer::do_NewInstance (NewInstance* x) {}
647 void Canonicalizer::do_NewValueTypeInstance(NewValueTypeInstance* x) {}
648 void Canonicalizer::do_NewTypeArray (NewTypeArray* x) {}
649 void Canonicalizer::do_NewObjectArray (NewObjectArray* x) {}
650 void Canonicalizer::do_NewMultiArray (NewMultiArray* x) {}
651 void Canonicalizer::do_CheckCast (CheckCast* x) {
652 if (x->klass()->is_loaded() && !x->is_never_null()) {
653 // Don't canonicalize for non-nullable types -- we need to throw NPE.
654 Value obj = x->obj();
655 ciType* klass = obj->exact_type();
656 if (klass == NULL) {
657 klass = obj->declared_type();
658 }
659 if (klass != NULL && klass->is_loaded()) {
660 bool is_interface = klass->is_instance_klass() &&
661 klass->as_instance_klass()->is_interface();
662 // Interface casts can't be statically optimized away since verifier doesn't
663 // enforce interface types in bytecode.
664 if (!is_interface && klass->is_subtype_of(x->klass())) {
665 set_canonical(obj);
666 return;
667 }
668 }
669 // checkcast of null returns null
670 if (obj->as_Constant() && obj->type()->as_ObjectType()->constant_value()->is_null_object()) {
671 set_canonical(obj);
672 }
673 }
|