Shark getstatic and putstatic improvements

Gary Benson gbenson at redhat.com
Thu Jun 4 08:13:35 PDT 2009


Hi all,

This commit replaced the interpreter-style constant pool lookup of
the receiving class for getstatic and putstatic with inlined oops.

Cheers,
Gary

-- 
http://gbenson.net/
-------------- next part --------------
diff -r 89bd8e0f38c5 ChangeLog
--- a/ChangeLog	Thu Jun 04 09:48:19 2009 -0400
+++ b/ChangeLog	Thu Jun 04 11:07:23 2009 -0400
@@ -1,3 +1,20 @@
+2009-06-04  Gary Benson  <gbenson at redhat.com>
+
+	* ports/hotspot/src/share/vm/shark/sharkBlock.hpp
+	(SharkBlock::lookup_for_field_access): Removed.
+	* ports/hotspot/src/share/vm/shark/sharkBlock.cpp
+	(SharkBlock::do_field_access): Inline receiver for static fields.
+	(SharkBlock::lookup_for_field_access): Removed.
+
+	* ports/hotspot/src/share/vm/shark/sharkInliner.cpp
+	(SharkInlinerHelper::do_field_access): Allow static fields.
+
+	* ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.hpp
+	(SharkBlock::lookup_for_field_access): Removed.
+	* ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp
+	(SharkTopLevelBlock::scan_for_traps): Removed static field traps.
+	(SharkBlock::lookup_for_field_access): Removed.
+
 2009-06-04  Gary Benson  <gbenson at redhat.com>
 
 	* ports/hotspot/src/share/vm/shark/sharkConstant.hpp: New file.
diff -r 89bd8e0f38c5 ports/hotspot/src/share/vm/shark/sharkBlock.cpp
--- a/ports/hotspot/src/share/vm/shark/sharkBlock.cpp	Thu Jun 04 09:48:19 2009 -0400
+++ b/ports/hotspot/src/share/vm/shark/sharkBlock.cpp	Thu Jun 04 11:07:23 2009 -0400
@@ -1002,7 +1002,7 @@
   }
   if (!is_get || value == NULL) {
     if (!is_field)
-      object = lookup_for_field_access();
+      object = builder()->CreateInlineOop(field->holder());
 
     BasicType   basic_type = field->type()->basic_type();
     const Type *stack_type = SharkType::to_stackType(basic_type);
@@ -1165,11 +1165,6 @@
   ShouldNotCallThis();
 }
 
-Value* SharkBlock::lookup_for_field_access()
-{
-  ShouldNotCallThis();
-}
-
 void SharkBlock::do_arraylength()
 {
   ShouldNotCallThis();
diff -r 89bd8e0f38c5 ports/hotspot/src/share/vm/shark/sharkBlock.hpp
--- a/ports/hotspot/src/share/vm/shark/sharkBlock.hpp	Thu Jun 04 09:48:19 2009 -0400
+++ b/ports/hotspot/src/share/vm/shark/sharkBlock.hpp	Thu Jun 04 11:07:23 2009 -0400
@@ -202,7 +202,6 @@
   // Helpers
  protected:
   virtual void do_zero_check(SharkValue* value);
-  virtual llvm::Value* lookup_for_field_access();
 
   // Leaf calls
  protected:
diff -r 89bd8e0f38c5 ports/hotspot/src/share/vm/shark/sharkInliner.cpp
--- a/ports/hotspot/src/share/vm/shark/sharkInliner.cpp	Thu Jun 04 09:48:19 2009 -0400
+++ b/ports/hotspot/src/share/vm/shark/sharkInliner.cpp	Thu Jun 04 11:07:23 2009 -0400
@@ -760,12 +760,8 @@
       }
     }
 
-    if (!result_pushed) {
-      if (!is_field)
-        return false;
-
+    if (!result_pushed)
       push(false);
-    }
 
     if (field->type()->is_two_word())
       push(false);
diff -r 89bd8e0f38c5 ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp
--- a/ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp	Thu Jun 04 09:48:19 2009 -0400
+++ b/ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp	Thu Jun 04 11:07:23 2009 -0400
@@ -74,20 +74,6 @@
             Deoptimization::Action_none), bci());
         return;
       }
-
-      // If this is a getfield or putfield then there won't be a
-      // pool access and we're done
-      if (is_field)
-        break;
-
-      // There won't be a pool access if this is a constant getstatic
-      if (bc() == Bytecodes::_getstatic && field->is_constant()) {
-        if (SharkConstant::for_field(iter())->is_loaded())
-          break;
-      }
-
-      // Continue to the check
-      index = iter()->get_field_index();
       break;
 
     case Bytecodes::_invokevirtual:
@@ -606,17 +592,6 @@
   }
 
   builder()->CreateRetVoid();
-}
-
-Value* SharkTopLevelBlock::lookup_for_field_access()
-{
-  SharkConstantPool constants(this);
-  Value *cache = constants.cache_entry_at(iter()->get_field_index());
-
-  return builder()->CreateValueOfStructEntry(
-   cache, ConstantPoolCacheEntry::f1_offset(),
-   SharkType::jobject_type(),
-   "object");
 }
 
 void SharkTopLevelBlock::do_arraylength()
diff -r 89bd8e0f38c5 ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.hpp
--- a/ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.hpp	Thu Jun 04 09:48:19 2009 -0400
+++ b/ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.hpp	Thu Jun 04 11:07:23 2009 -0400
@@ -220,9 +220,8 @@
  public:
   void emit_IR();
 
-  // Helpers
+  // Branch helpers
  private:
-  llvm::Value* lookup_for_field_access();
   void do_branch(int successor_index);
 
   // Zero checks


More information about the distro-pkg-dev mailing list