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