< prev index next >

src/hotspot/share/c1/c1_Canonicalizer.cpp

Print this page


 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     }


< prev index next >