hotspot/src/share/vm/opto/library_call.cpp

Print this page

        

@@ -44,23 +44,26 @@
   // Extend the set of intrinsics known to the runtime:
  public:
  private:
   bool             _is_virtual;
   bool             _is_predicted;
+  bool             _is_low_priority;
   vmIntrinsics::ID _intrinsic_id;
 
  public:
-  LibraryIntrinsic(ciMethod* m, bool is_virtual, bool is_predicted, vmIntrinsics::ID id)
+  LibraryIntrinsic(ciMethod* m, bool is_virtual, bool is_predicted, bool is_low_priority, vmIntrinsics::ID id)
     : InlineCallGenerator(m),
       _is_virtual(is_virtual),
       _is_predicted(is_predicted),
+      _is_low_priority(is_low_priority),
       _intrinsic_id(id)
   {
   }
   virtual bool is_intrinsic() const { return true; }
   virtual bool is_virtual()   const { return _is_virtual; }
   virtual bool is_predicted()   const { return _is_predicted; }
+  virtual bool is_low_priority()   const { return _is_low_priority; }
   virtual JVMState* generate(JVMState* jvms);
   virtual Node* generate_predicate(JVMState* jvms);
   vmIntrinsics::ID intrinsic_id() const { return _intrinsic_id; }
 };
 

@@ -350,10 +353,11 @@
       return NULL;
     }
   }
 
   bool is_predicted = false;
+  bool is_low_priority = false;
 
   switch (id) {
   case vmIntrinsics::_compareTo:
     if (!SpecialStringCompareTo)  return NULL;
     if (!Matcher::match_rule_supported(Op_StrComp))  return NULL;

@@ -376,10 +380,11 @@
     if (StubRoutines::unsafe_arraycopy() == NULL)  return NULL;
     if (!InlineArrayCopy)  return NULL;
     break;
   case vmIntrinsics::_hashCode:
     if (!InlineObjectHash)  return NULL;
+    is_low_priority = true;
     break;
   case vmIntrinsics::_clone:
   case vmIntrinsics::_copyOf:
   case vmIntrinsics::_copyOfRange:
     if (!InlineObjectCopy)  return NULL;

@@ -527,11 +532,11 @@
   // -XX:-InlineUnsafeOps disables natives from the Unsafe class.
   if (m->holder()->name() == ciSymbol::sun_misc_Unsafe()) {
     if (!InlineUnsafeOps)  return NULL;
   }
 
-  return new LibraryIntrinsic(m, is_virtual, is_predicted, (vmIntrinsics::ID) id);
+  return new LibraryIntrinsic(m, is_virtual, is_predicted, is_low_priority, (vmIntrinsics::ID) id);
 }
 
 //----------------------register_library_intrinsics-----------------------
 // Initialize this file's data structures, for each Compile instance.
 void Compile::register_library_intrinsics() {