aboutsummaryrefslogtreecommitdiff
path: root/src/share/vm/opto/parse1.cpp
diff options
context:
space:
mode:
authornever <none@none>2010-02-25 11:38:50 -0800
committernever <none@none>2010-02-25 11:38:50 -0800
commit35153ffc24829a307b4ca6a3cef6ea10e3ba484f (patch)
tree2a38a221e29d82b9f42fc3464f0a58461d19b4a1 /src/share/vm/opto/parse1.cpp
parente6bee6690eb2ba3fe2d62da92922653c536f1fe0 (diff)
downloadjdk8u_hotspot-35153ffc24829a307b4ca6a3cef6ea10e3ba484f.tar.gz
6915557: assert(_gvn.type(l)->higher_equal(type),"must constrain OSR typestate") with debug build
Reviewed-by: kvn
Diffstat (limited to 'src/share/vm/opto/parse1.cpp')
-rw-r--r--src/share/vm/opto/parse1.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/share/vm/opto/parse1.cpp b/src/share/vm/opto/parse1.cpp
index 4cae42dd2..edac19b6b 100644
--- a/src/share/vm/opto/parse1.cpp
+++ b/src/share/vm/opto/parse1.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1997-2010 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -237,7 +237,6 @@ void Parse::load_interpreter_state(Node* osr_buf) {
C->record_method_not_compilable("OSR in empty or breakpointed method");
return;
}
- MethodLivenessResult raw_live_locals = method()->raw_liveness_at_bci(osr_bci());
// Extract the needed locals from the interpreter frame.
Node *locals_addr = basic_plus_adr(osr_buf, osr_buf, (max_locals-1)*wordSize);
@@ -306,6 +305,7 @@ void Parse::load_interpreter_state(Node* osr_buf) {
SafePointNode* bad_type_exit = clone_map();
bad_type_exit->set_control(new (C, 1) RegionNode(1));
+ assert(osr_block->flow()->jsrs()->size() == 0, "should be no jsrs live at osr point");
for (index = 0; index < max_locals; index++) {
if (stopped()) break;
Node* l = local(index);
@@ -317,8 +317,18 @@ void Parse::load_interpreter_state(Node* osr_buf) {
continue;
}
}
- if (type->basic_type() == T_ADDRESS && !raw_live_locals.at(index)) {
- // Skip type check for dead address locals
+ if (type->basic_type() == T_ADDRESS) {
+ // In our current system it's illegal for jsr addresses to be
+ // live into an OSR entry point because the compiler performs
+ // inlining of jsrs. ciTypeFlow has a bailout that detect this
+ // case and aborts the compile if addresses are live into an OSR
+ // entry point. Because of that we can assume that any address
+ // locals at the OSR entry point are dead. Method liveness
+ // isn't precise enought to figure out that they are dead in all
+ // cases so simply skip checking address locals all
+ // together. Any type check is guaranteed to fail since the
+ // interpreter type is the result of a load which might have any
+ // value and the expected type is a constant.
continue;
}
set_local(index, check_interpreter_type(l, type, bad_type_exit));