7172843: C1: fix "assert(has_printable_bci()) failed: _printable_bci should have been set"
Reviewed-by: twisti
Contributed-by: Krystal Mok <sajia@taobao.com>
--- a/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp Fri May 25 11:39:13 2012 -0700
+++ b/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp Wed May 30 12:17:07 2012 -0700
@@ -42,6 +42,11 @@
// the instruction stream (because the instruction list is embedded
// in the instructions).
if (canonical() != x) {
+#ifndef PRODUCT
+ if (!x->has_printable_bci()) {
+ x->set_printable_bci(bci());
+ }
+#endif
if (PrintCanonicalization) {
PrintValueVisitor do_print_value;
canonical()->input_values_do(&do_print_value);
@@ -677,8 +682,8 @@
return;
}
}
+ set_bci(cmp->state_before()->bci());
set_canonical(canon);
- set_bci(cmp->state_before()->bci());
}
}
} else if (l->as_InstanceOf() != NULL) {
--- a/hotspot/src/share/vm/c1/c1_Instruction.hpp Fri May 25 11:39:13 2012 -0700
+++ b/hotspot/src/share/vm/c1/c1_Instruction.hpp Wed May 30 12:17:07 2012 -0700
@@ -302,8 +302,6 @@
void update_exception_state(ValueStack* state);
- bool has_printable_bci() const { return NOT_PRODUCT(_printable_bci != -99) PRODUCT_ONLY(false); }
-
protected:
void set_type(ValueType* type) {
assert(type != NULL, "type must exist");
@@ -392,8 +390,9 @@
// accessors
int id() const { return _id; }
#ifndef PRODUCT
+ bool has_printable_bci() const { return _printable_bci != -99; }
int printable_bci() const { assert(has_printable_bci(), "_printable_bci should have been set"); return _printable_bci; }
- void set_printable_bci(int bci) { NOT_PRODUCT(_printable_bci = bci;) }
+ void set_printable_bci(int bci) { _printable_bci = bci; }
#endif
int use_count() const { return _use_count; }
int pin_state() const { return _pin_state; }
@@ -576,6 +575,7 @@
, _block(b)
, _index(index)
{
+ NOT_PRODUCT(set_printable_bci(Value(b)->printable_bci()));
if (type->is_illegal()) {
make_illegal();
}
@@ -631,7 +631,9 @@
: Instruction(type)
, _java_index(index)
, _declared_type(declared)
- {}
+ {
+ NOT_PRODUCT(set_printable_bci(-1));
+ }
// accessors
int java_index() const { return _java_index; }