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 }
|
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()) {
653 Value obj = x->obj();
654 ciType* klass = obj->exact_type();
655 if (klass == NULL) {
656 klass = obj->declared_type();
657 }
658 if (klass != NULL && klass->is_loaded()) {
659 bool is_interface = klass->is_instance_klass() &&
660 klass->as_instance_klass()->is_interface();
661 // Interface casts can't be statically optimized away since verifier doesn't
662 // enforce interface types in bytecode.
663 if (!is_interface && klass->is_subtype_of(x->klass())) {
664 set_canonical(obj);
665 return;
666 }
667 }
|