src/share/vm/c1/c1_Canonicalizer.cpp

Print this page
rev 2893 : 7121756: Improve C1 inlining policy by using profiling at call sites
Summary: profile based recompilation of methods with C1 with more inlining.
Reviewed-by:


 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;