changeset in /hg/icedtea: 2009-03-04 Gary Benson <gbenson at redh...
Gary Benson
gbenson at redhat.com
Thu Mar 19 03:48:23 PDT 2009
changeset b593d3ef9dce in /hg/icedtea
details: http://icedtea.classpath.org/hg/icedtea?cmd=changeset;node=b593d3ef9dce
description:
2009-03-04 Gary Benson <gbenson at redhat.com>
* ports/hotspot/src/share/vm/shark/sharkInliner.hpp: New file.
* ports/hotspot/src/share/vm/shark/sharkInliner.cpp: Likewise.
* ports/hotspot/src/share/vm/shark/sharkBlock.hpp: Moved partly into...
* ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.hpp: New file.
* ports/hotspot/src/share/vm/shark/sharkBlock.cpp: Likewise into...
* ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp: New file.
* ports/hotspot/src/share/vm/shark/sharkState.hpp:
Merged SharkTrackingState into SharkState, and moved
SharkEntryState into sharkFunction.cpp and SharkPHIState
into sharkTopLevelBlock.cpp.
* ports/hotspot/src/share/vm/shark/sharkState.inline.hpp: Likewise.
* ports/hotspot/src/share/vm/shark/sharkState.cpp: Likewise.
* ports/hotspot/src/share/vm/shark/sharkConstantPool.hpp:
s/SharkBlock/SharkTopLevelBlock/g
* ports/hotspot/src/share/vm/shark/sharkMonitor.hpp: Likewise.
* ports/hotspot/src/share/vm/shark/sharkMonitor.cpp: Likewise.
* ports/hotspot/src/share/vm/shark/sharkFunction.hpp: Likewise.
* ports/hotspot/src/share/vm/shark/sharkFunction.cpp: Likewise.
* ports/hotspot/src/share/vm/shark/shark_globals.hpp
(SharkMaxInlineSize): New parameter.
* ports/hotspot/src/share/vm/shark/sharkBuilder.hpp
(SharkBuilder::GetBlockInsertionPoint): New method.
(SharkBuilder::CreateBlock): Likewise.
* ports/hotspot/src/share/vm/includeDB_shark: Updated.
diffstat:
18 files changed, 3491 insertions(+), 2450 deletions(-)
ChangeLog | 33
ports/hotspot/src/share/vm/includeDB_shark | 106
ports/hotspot/src/share/vm/shark/sharkBlock.cpp | 1904 +--------------
ports/hotspot/src/share/vm/shark/sharkBlock.hpp | 488 +--
ports/hotspot/src/share/vm/shark/sharkBuilder.hpp | 29
ports/hotspot/src/share/vm/shark/sharkConstantPool.hpp | 6
ports/hotspot/src/share/vm/shark/sharkFunction.cpp | 74
ports/hotspot/src/share/vm/shark/sharkFunction.hpp | 24
ports/hotspot/src/share/vm/shark/sharkInliner.cpp | 761 +++++
ports/hotspot/src/share/vm/shark/sharkInliner.hpp | 32
ports/hotspot/src/share/vm/shark/sharkMonitor.cpp | 4
ports/hotspot/src/share/vm/shark/sharkMonitor.hpp | 6
ports/hotspot/src/share/vm/shark/sharkState.cpp | 243 -
ports/hotspot/src/share/vm/shark/sharkState.hpp | 104
ports/hotspot/src/share/vm/shark/sharkState.inline.hpp | 59
ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp | 1716 +++++++++++++
ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.hpp | 344 ++
ports/hotspot/src/share/vm/shark/shark_globals.hpp | 8
diffs (truncated from 6546 to 500 lines):
diff -r 22425c2ed9a9 -r b593d3ef9dce ChangeLog
--- a/ChangeLog Wed Mar 04 11:01:54 2009 +0100
+++ b/ChangeLog Wed Mar 04 10:41:13 2009 -0500
@@ -1,3 +1,36 @@ 2009-03-04 Matthias Klose <doko at ubuntu
+2009-03-04 Gary Benson <gbenson at redhat.com>
+
+ * ports/hotspot/src/share/vm/shark/sharkInliner.hpp: New file.
+ * ports/hotspot/src/share/vm/shark/sharkInliner.cpp: Likewise.
+
+ * ports/hotspot/src/share/vm/shark/sharkBlock.hpp: Moved partly into...
+ * ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.hpp: New file.
+ * ports/hotspot/src/share/vm/shark/sharkBlock.cpp: Likewise into...
+ * ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp: New file.
+
+ * ports/hotspot/src/share/vm/shark/sharkState.hpp:
+ Merged SharkTrackingState into SharkState, and moved
+ SharkEntryState into sharkFunction.cpp and SharkPHIState
+ into sharkTopLevelBlock.cpp.
+ * ports/hotspot/src/share/vm/shark/sharkState.inline.hpp: Likewise.
+ * ports/hotspot/src/share/vm/shark/sharkState.cpp: Likewise.
+
+ * ports/hotspot/src/share/vm/shark/sharkConstantPool.hpp:
+ s/SharkBlock/SharkTopLevelBlock/g
+ * ports/hotspot/src/share/vm/shark/sharkMonitor.hpp: Likewise.
+ * ports/hotspot/src/share/vm/shark/sharkMonitor.cpp: Likewise.
+ * ports/hotspot/src/share/vm/shark/sharkFunction.hpp: Likewise.
+ * ports/hotspot/src/share/vm/shark/sharkFunction.cpp: Likewise.
+
+ * ports/hotspot/src/share/vm/shark/shark_globals.hpp
+ (SharkMaxInlineSize): New parameter.
+
+ * ports/hotspot/src/share/vm/shark/sharkBuilder.hpp
+ (SharkBuilder::GetBlockInsertionPoint): New method.
+ (SharkBuilder::CreateBlock): Likewise.
+
+ * ports/hotspot/src/share/vm/includeDB_shark: Updated.
+
2009-03-04 Matthias Klose <doko at ubuntu.com>
* configure.ac: Set version to 1.5pre.
diff -r 22425c2ed9a9 -r b593d3ef9dce ports/hotspot/src/share/vm/includeDB_shark
--- a/ports/hotspot/src/share/vm/includeDB_shark Wed Mar 04 11:01:54 2009 +0100
+++ b/ports/hotspot/src/share/vm/includeDB_shark Wed Mar 04 10:41:13 2009 -0500
@@ -24,6 +24,25 @@
//
// NOTE: DO NOT CHANGE THIS COPYRIGHT TO NEW STYLE - IT WILL BREAK makeDeps!
+
+sharkBlock.cpp debug.hpp
+sharkBlock.cpp bytecodes.hpp
+sharkBlock.cpp llvmHeaders.hpp
+sharkBlock.cpp shark_globals.hpp
+sharkBlock.cpp sharkBlock.hpp
+sharkBlock.cpp sharkBuilder.hpp
+sharkBlock.cpp sharkRuntime.hpp
+sharkBlock.cpp sharkState.inline.hpp
+sharkBlock.cpp sharkValue.inline.hpp
+
+sharkBlock.hpp allocation.hpp
+sharkBlock.hpp ciMethod.hpp
+sharkBlock.hpp ciStreams.hpp
+sharkBlock.hpp debug.hpp
+sharkBlock.hpp llvmHeaders.hpp
+sharkBlock.hpp sharkBuilder.hpp
+sharkBlock.hpp sharkState.hpp
+sharkBlock.hpp sharkValue.hpp
ciMethod.cpp ciTypeFlow.hpp
ciMethod.cpp methodOop.hpp
@@ -63,33 +82,35 @@ shark_globals.hpp
shark_globals.hpp shark_globals_<arch>.hpp
shark_globals.hpp globals.hpp
-sharkBlock.cpp allocation.hpp
-sharkBlock.cpp bytecodes.hpp
-sharkBlock.cpp ciField.hpp
-sharkBlock.cpp ciStreams.hpp
-sharkBlock.cpp ciType.hpp
-sharkBlock.cpp ciTypeFlow.hpp
-sharkBlock.cpp debug.hpp
-sharkBlock.cpp llvmHeaders.hpp
-sharkBlock.cpp shark_globals.hpp
-sharkBlock.cpp sharkBlock.hpp
-sharkBlock.cpp sharkBuilder.hpp
-sharkBlock.cpp sharkConstantPool.hpp
-sharkBlock.cpp sharkRuntime.hpp
-sharkBlock.cpp sharkState.inline.hpp
-sharkBlock.cpp sharkValue.inline.hpp
-
-sharkBlock.hpp allocation.hpp
-sharkBlock.hpp bytecodes.hpp
-sharkBlock.hpp ciStreams.hpp
-sharkBlock.hpp ciType.hpp
-sharkBlock.hpp ciTypeFlow.hpp
-sharkBlock.hpp llvmHeaders.hpp
-sharkBlock.hpp sharkBuilder.hpp
-sharkBlock.hpp sharkFunction.hpp
-sharkBlock.hpp sharkMonitor.hpp
-sharkBlock.hpp sharkState.hpp
-sharkBlock.hpp sharkValue.inline.hpp
+sharkTopLevelBlock.cpp allocation.hpp
+sharkTopLevelBlock.cpp bytecodes.hpp
+sharkTopLevelBlock.cpp ciField.hpp
+sharkTopLevelBlock.cpp ciStreams.hpp
+sharkTopLevelBlock.cpp ciType.hpp
+sharkTopLevelBlock.cpp ciTypeFlow.hpp
+sharkTopLevelBlock.cpp debug.hpp
+sharkTopLevelBlock.cpp llvmHeaders.hpp
+sharkTopLevelBlock.cpp shark_globals.hpp
+sharkTopLevelBlock.cpp sharkTopLevelBlock.hpp
+sharkTopLevelBlock.cpp sharkBuilder.hpp
+sharkTopLevelBlock.cpp sharkConstantPool.hpp
+sharkTopLevelBlock.cpp sharkInliner.hpp
+sharkTopLevelBlock.cpp sharkRuntime.hpp
+sharkTopLevelBlock.cpp sharkState.inline.hpp
+sharkTopLevelBlock.cpp sharkValue.inline.hpp
+
+sharkTopLevelBlock.hpp allocation.hpp
+sharkTopLevelBlock.hpp bytecodes.hpp
+sharkTopLevelBlock.hpp ciStreams.hpp
+sharkTopLevelBlock.hpp ciType.hpp
+sharkTopLevelBlock.hpp ciTypeFlow.hpp
+sharkTopLevelBlock.hpp llvmHeaders.hpp
+sharkTopLevelBlock.hpp sharkBlock.hpp
+sharkTopLevelBlock.hpp sharkBuilder.hpp
+sharkTopLevelBlock.hpp sharkFunction.hpp
+sharkTopLevelBlock.hpp sharkMonitor.hpp
+sharkTopLevelBlock.hpp sharkState.inline.hpp
+sharkTopLevelBlock.hpp sharkValue.inline.hpp
sharkBuilder.cpp ciMethod.hpp
sharkBuilder.cpp debug.hpp
@@ -163,8 +184,8 @@ sharkConstantPool.cpp
sharkConstantPool.hpp allocation.hpp
sharkConstantPool.hpp llvmHeaders.hpp
-sharkConstantPool.hpp sharkBlock.hpp
sharkConstantPool.hpp sharkBuilder.hpp
+sharkConstantPool.hpp sharkTopLevelBlock.hpp
sharkEntry.cpp sharkEntry.hpp
@@ -175,12 +196,12 @@ sharkFunction.cpp
sharkFunction.cpp debug.hpp
sharkFunction.cpp llvmHeaders.hpp
sharkFunction.cpp shark_globals.hpp
-sharkFunction.cpp sharkBlock.hpp
sharkFunction.cpp sharkBuilder.hpp
sharkFunction.cpp sharkEntry.hpp
sharkFunction.cpp sharkFunction.hpp
sharkFunction.cpp sharkMonitor.hpp
sharkFunction.cpp sharkState.inline.hpp
+sharkFunction.cpp sharkTopLevelBlock.hpp
sharkFunction.hpp allocation.hpp
sharkFunction.hpp ciEnv.hpp
@@ -189,11 +210,25 @@ sharkFunction.hpp
sharkFunction.hpp llvmHeaders.hpp
sharkFunction.hpp sharkBuilder.hpp
+sharkInliner.cpp allocation.hpp
+sharkInliner.cpp bytecodes.hpp
+sharkInliner.cpp ciField.hpp
+sharkInliner.cpp ciMethod.hpp
+sharkInliner.cpp ciStreams.hpp
+sharkInliner.cpp shark_globals.hpp
+sharkInliner.cpp sharkInliner.hpp
+sharkInliner.cpp sharkState.inline.hpp
+sharkInliner.cpp sharkValue.inline.hpp
+
+sharkInliner.hpp allocation.hpp
+sharkInliner.hpp ciMethod.hpp
+sharkInliner.hpp sharkState.inline.hpp
+
sharkMonitor.cpp llvmHeaders.hpp
-sharkMonitor.cpp sharkBlock.hpp
sharkMonitor.cpp sharkMonitor.hpp
sharkMonitor.cpp sharkRuntime.hpp
sharkMonitor.cpp sharkState.inline.hpp
+sharkMonitor.cpp sharkTopLevelBlock.hpp
sharkMonitor.hpp allocation.hpp
sharkMonitor.hpp llvmHeaders.hpp
@@ -218,21 +253,22 @@ sharkState.cpp
sharkState.cpp allocation.hpp
sharkState.cpp ciType.hpp
sharkState.cpp ciTypeFlow.hpp
-sharkState.cpp sharkBlock.hpp
sharkState.cpp sharkBuilder.hpp
+sharkState.cpp sharkCacheDecache.hpp
sharkState.cpp sharkState.inline.hpp
+sharkState.cpp sharkTopLevelBlock.hpp
sharkState.cpp sharkType.hpp
sharkState.cpp sharkValue.inline.hpp
sharkState.hpp allocation.hpp
+sharkState.hpp ciMethod.hpp
+sharkState.hpp llvmHeaders.hpp
sharkState.hpp sharkBuilder.hpp
-sharkState.hpp sharkFunction.hpp
-sharkState.hpp sharkValue.inline.hpp
-sharkState.hpp vmreg.hpp
+sharkState.hpp sharkValue.hpp
sharkState.inline.hpp sharkBlock.hpp
+sharkState.inline.hpp sharkBuilder.hpp
sharkState.inline.hpp sharkState.hpp
-sharkState.inline.hpp sharkCacheDecache.hpp
sharkStateScanner.cpp sharkState.inline.hpp
sharkStateScanner.cpp sharkStateScanner.hpp
diff -r 22425c2ed9a9 -r b593d3ef9dce ports/hotspot/src/share/vm/shark/sharkBlock.cpp
--- a/ports/hotspot/src/share/vm/shark/sharkBlock.cpp Wed Mar 04 11:01:54 2009 +0100
+++ b/ports/hotspot/src/share/vm/shark/sharkBlock.cpp Wed Mar 04 10:41:13 2009 -0500
@@ -25,112 +25,26 @@
#include "incls/_precompiled.incl"
#include "incls/_sharkBlock.cpp.incl"
-#include "ciArrayKlass.hpp" // XXX fuck you makeDeps
-#include "ciObjArrayKlass.hpp" // XXX likewise
using namespace llvm;
-void SharkBlock::enter(SharkBlock* predecessor, bool is_exception)
-{
- // This block requires phis:
- // - if it is entered more than once
- // - if it is an exception handler, because in which
- // case we assume it's entered more than once.
- // - if the predecessor will be compiled after this
- // block, in which case we can't simple propagate
- // the state forward.
- if (!needs_phis() &&
- (entered() ||
- is_exception ||
- (predecessor && predecessor->index() >= index())))
- _needs_phis = true;
-
- // Recurse into the tree
- if (!entered()) {
- _entered = true;
-
- if (!has_trap()) {
- for (int i = 0; i < num_successors(); i++) {
- successor(i)->enter(this, false);
- }
- for (int i = 0; i < num_exceptions(); i++) {
- exception(i)->enter(this, true);
- }
- }
- }
-}
-
-void SharkBlock::initialize()
-{
- char name[28];
- snprintf(name, sizeof(name),
- "bci_%d%s",
- start(), is_private_copy() ? "_private_copy" : "");
- _entry_block = function()->CreateBlock(name);
-}
-
-void SharkBlock::acquire_method_lock()
-{
- Value *object;
- if (target()->is_static()) {
- SharkConstantPool constants(this);
- object = constants.java_mirror();
- }
- else {
- object = local(0)->jobject_value();
- }
- iter()->force_bci(start()); // for the decache
- function()->monitor(0)->acquire(this, object);
- check_pending_exception(false);
-}
-
-void SharkBlock::release_method_lock()
-{
- function()->monitor(0)->release(this);
-
- // We neither need nor want to check for pending exceptions here.
- // This method is only called by handle_return, which copes with
- // them implicitly:
- // - if a value is being returned then we just carry on as normal;
- // the caller will see the pending exception and handle it.
- // - if an exception is being thrown then that exception takes
- // priority and ours will be ignored.
-}
-
-void SharkBlock::parse()
+void SharkBlock::parse_bytecode(int start, int limit)
{
SharkValue *a, *b, *c, *d;
int i;
- builder()->SetInsertPoint(entry_block());
-
- if (has_trap()) {
- iter()->force_bci(start());
-
- current_state()->decache_for_trap();
- builder()->CreateCall2(
- SharkRuntime::uncommon_trap(),
- thread(),
- LLVMValue::jint_constant(trap_index()));
- builder()->CreateRetVoid();
- return;
- }
-
- iter()->reset_to_bci(start());
- bool successors_done = false;
- while (iter()->next() != ciBytecodeStream::EOBC() && bci() < limit()) {
- NOT_PRODUCT(a = b = c = d = NULL);
+ iter()->reset_to_bci(start);
+ while (iter()->next_bci() < limit) {
+ NOT_PRODUCT(a = b = c = d = NULL);
+ iter()->next();
if (SharkTraceBytecodes)
tty->print_cr("%4d: %s", bci(), Bytecodes::name(bc()));
- if(UseLoopSafepoints) {
- int len;
-
+ if (UseLoopSafepoints) {
// XXX if a lcmp is followed by an if_?? then C2 maybe-inserts
// the safepoint before the lcmp rather than before the if.
// Maybe we should do this too. See parse2.cpp for details.
-
switch (bc()) {
case Bytecodes::_goto:
case Bytecodes::_ifnull:
@@ -164,15 +78,15 @@ void SharkBlock::parse()
add_safepoint();
break;
}
- len = switch_table_length();
- for (i = 0; i < len; i++) {
+ int len = switch_table_length();
+ for (int i = 0; i < len; i++) {
if (switch_dest(i) <= bci()) {
add_safepoint();
break;
}
}
break;
- }
+ }
}
switch (bc()) {
@@ -809,19 +723,16 @@ void SharkBlock::parse()
case Bytecodes::_goto:
case Bytecodes::_goto_w:
- builder()->CreateBr(successor(ciTypeFlow::GOTO_TARGET)->entry_block());
+ do_goto();
break;
case Bytecodes::_jsr:
case Bytecodes::_jsr_w:
- push(SharkValue::create_returnAddress(iter()->next_bci()));
- builder()->CreateBr(successor(ciTypeFlow::GOTO_TARGET)->entry_block());
+ do_jsr();
break;
case Bytecodes::_ret:
- assert(local(iter()->get_index())->returnAddress_value() ==
- successor(ciTypeFlow::GOTO_TARGET)->start(), "should be");
- builder()->CreateBr(successor(ciTypeFlow::GOTO_TARGET)->entry_block());
+ do_ret();
break;
case Bytecodes::_ifnull:
@@ -831,11 +742,13 @@ void SharkBlock::parse()
do_if(ICmpInst::ICMP_NE, SharkValue::null(), pop());
break;
case Bytecodes::_if_acmpeq:
- b = pop(); a = pop();
+ b = pop();
+ a = pop();
do_if(ICmpInst::ICMP_EQ, b, a);
break;
case Bytecodes::_if_acmpne:
- b = pop(); a = pop();
+ b = pop();
+ a = pop();
do_if(ICmpInst::ICMP_NE, b, a);
break;
case Bytecodes::_ifeq:
@@ -857,34 +770,39 @@ void SharkBlock::parse()
do_if(ICmpInst::ICMP_SGE, SharkValue::jint_constant(0), pop());
break;
case Bytecodes::_if_icmpeq:
- b = pop(); a = pop();
+ b = pop();
+ a = pop();
do_if(ICmpInst::ICMP_EQ, b, a);
break;
case Bytecodes::_if_icmpne:
- b = pop(); a = pop();
+ b = pop();
+ a = pop();
do_if(ICmpInst::ICMP_NE, b, a);
break;
case Bytecodes::_if_icmplt:
- b = pop(); a = pop();
+ b = pop();
+ a = pop();
do_if(ICmpInst::ICMP_SLT, b, a);
break;
case Bytecodes::_if_icmple:
- b = pop(); a = pop();
+ b = pop();
+ a = pop();
do_if(ICmpInst::ICMP_SLE, b, a);
break;
case Bytecodes::_if_icmpgt:
- b = pop(); a = pop();
+ b = pop();
+ a = pop();
do_if(ICmpInst::ICMP_SGT, b, a);
break;
case Bytecodes::_if_icmpge:
- b = pop(); a = pop();
+ b = pop();
+ a = pop();
do_if(ICmpInst::ICMP_SGE, b, a);
break;
case Bytecodes::_tableswitch:
case Bytecodes::_lookupswitch:
do_switch();
- successors_done = true;
break;
case Bytecodes::_invokestatic:
@@ -923,533 +841,58 @@ void SharkBlock::parse()
ShouldNotReachHere();
}
}
-
- if (falls_through()) {
- builder()->CreateBr(successor(ciTypeFlow::FALL_THROUGH)->entry_block());
- }
-
- if (!successors_done) {
- for (int i = 0; i < num_successors(); i++)
- successor(i)->add_incoming(current_state());
- }
-}
-
-SharkBlock* SharkBlock::bci_successor(int bci) const
-{
- // XXX now with Linear Search Technology (tm)
- for (int i = 0; i < num_successors(); i++) {
- ciTypeFlow::Block *successor = ciblock()->successors()->at(i);
- if (successor->start() == bci)
- return function()->block(successor->pre_order());
- }
- ShouldNotReachHere();
-}
-
-void SharkBlock::check_zero(SharkValue *value)
-{
- if (value->zero_checked())
- return;
-
- BasicBlock *zero = function()->CreateBlock("zero");
- BasicBlock *not_zero = function()->CreateBlock("not_zero");
-
- Value *a, *b;
- switch (value->basic_type()) {
- case T_BYTE:
- case T_CHAR:
- case T_SHORT:
- case T_INT:
- a = value->jint_value();
- b = LLVMValue::jint_constant(0);
- break;
- case T_LONG:
- a = value->jlong_value();
- b = LLVMValue::jlong_constant(0);
- break;
- case T_OBJECT:
- case T_ARRAY:
- a = value->jobject_value();
- b = LLVMValue::LLVMValue::null();
- break;
+}
+
+SharkState* SharkBlock::initial_current_state()
+{
+ return new SharkState(entry_state());
+}
+
+int SharkBlock::switch_default_dest()
+{
+ return iter()->get_dest_table(0);
More information about the distro-pkg-dev
mailing list