src/share/vm/opto/library_call.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/share/vm/opto

src/share/vm/opto/library_call.cpp

Print this page
rev 9032 : 8137167: JEP165: Compiler Control: Implementation task
Summary: Compiler Control JEP
Reviewed-by: roland, twisti


 309 
 310 //---------------------------make_vm_intrinsic----------------------------
 311 CallGenerator* Compile::make_vm_intrinsic(ciMethod* m, bool is_virtual) {
 312   vmIntrinsics::ID id = m->intrinsic_id();
 313   assert(id != vmIntrinsics::_none, "must be a VM intrinsic");
 314 
 315   if (!m->is_loaded()) {
 316     // Do not attempt to inline unloaded methods.
 317     return NULL;
 318   }
 319 
 320   C2Compiler* compiler = (C2Compiler*)CompileBroker::compiler(CompLevel_full_optimization);
 321   bool is_available = false;
 322 
 323   {
 324     // For calling is_intrinsic_supported and is_intrinsic_disabled_by_flag
 325     // the compiler must transition to '_thread_in_vm' state because both
 326     // methods access VM-internal data.
 327     VM_ENTRY_MARK;
 328     methodHandle mh(THREAD, m->get_Method());
 329     methodHandle ct(THREAD, method()->get_Method());
 330     is_available = compiler->is_intrinsic_supported(mh, is_virtual) &&
 331                    !vmIntrinsics::is_disabled_by_flags(mh, ct);


 332   }
 333 
 334   if (is_available) {
 335     assert(id <= vmIntrinsics::LAST_COMPILER_INLINE, "caller responsibility");
 336     assert(id != vmIntrinsics::_Object_init && id != vmIntrinsics::_invoke, "enum out of order?");
 337     return new LibraryIntrinsic(m, is_virtual,
 338                                 vmIntrinsics::predicates_needed(id),
 339                                 vmIntrinsics::does_virtual_dispatch(id),
 340                                 (vmIntrinsics::ID) id);
 341   } else {
 342     return NULL;
 343   }
 344 }
 345 
 346 //----------------------register_library_intrinsics-----------------------
 347 // Initialize this file's data structures, for each Compile instance.
 348 void Compile::register_library_intrinsics() {
 349   // Nothing to do here.
 350 }
 351 




 309 
 310 //---------------------------make_vm_intrinsic----------------------------
 311 CallGenerator* Compile::make_vm_intrinsic(ciMethod* m, bool is_virtual) {
 312   vmIntrinsics::ID id = m->intrinsic_id();
 313   assert(id != vmIntrinsics::_none, "must be a VM intrinsic");
 314 
 315   if (!m->is_loaded()) {
 316     // Do not attempt to inline unloaded methods.
 317     return NULL;
 318   }
 319 
 320   C2Compiler* compiler = (C2Compiler*)CompileBroker::compiler(CompLevel_full_optimization);
 321   bool is_available = false;
 322 
 323   {
 324     // For calling is_intrinsic_supported and is_intrinsic_disabled_by_flag
 325     // the compiler must transition to '_thread_in_vm' state because both
 326     // methods access VM-internal data.
 327     VM_ENTRY_MARK;
 328     methodHandle mh(THREAD, m->get_Method());

 329     is_available = compiler->is_intrinsic_supported(mh, is_virtual) &&
 330                    !C->directive()->is_intrinsic_disabled(mh) &&
 331                    !vmIntrinsics::is_disabled_by_flags(mh);
 332 
 333   }
 334 
 335   if (is_available) {
 336     assert(id <= vmIntrinsics::LAST_COMPILER_INLINE, "caller responsibility");
 337     assert(id != vmIntrinsics::_Object_init && id != vmIntrinsics::_invoke, "enum out of order?");
 338     return new LibraryIntrinsic(m, is_virtual,
 339                                 vmIntrinsics::predicates_needed(id),
 340                                 vmIntrinsics::does_virtual_dispatch(id),
 341                                 (vmIntrinsics::ID) id);
 342   } else {
 343     return NULL;
 344   }
 345 }
 346 
 347 //----------------------register_library_intrinsics-----------------------
 348 // Initialize this file's data structures, for each Compile instance.
 349 void Compile::register_library_intrinsics() {
 350   // Nothing to do here.
 351 }
 352 


src/share/vm/opto/library_call.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File