< prev index next >
src/hotspot/share/c1/c1_Optimizer.cpp
Print this page
@@ -500,10 +500,11 @@
void do_Convert (Convert* x);
void do_NullCheck (NullCheck* x);
void do_TypeCast (TypeCast* x);
void do_Invoke (Invoke* x);
void do_NewInstance (NewInstance* x);
+ void do_NewValueTypeInstance(NewValueTypeInstance* x);
void do_NewTypeArray (NewTypeArray* x);
void do_NewObjectArray (NewObjectArray* x);
void do_NewMultiArray (NewMultiArray* x);
void do_CheckCast (CheckCast* x);
void do_InstanceOf (InstanceOf* x);
@@ -648,10 +649,11 @@
void handle_LoadIndexed (LoadIndexed* x);
void handle_StoreIndexed (StoreIndexed* x);
void handle_NullCheck (NullCheck* x);
void handle_Invoke (Invoke* x);
void handle_NewInstance (NewInstance* x);
+ void handle_NewValueTypeInstance(NewValueTypeInstance* x);
void handle_NewArray (NewArray* x);
void handle_AccessMonitor (AccessMonitor* x);
void handle_Intrinsic (Intrinsic* x);
void handle_ExceptionObject (ExceptionObject* x);
void handle_Phi (Phi* x);
@@ -686,10 +688,11 @@
void NullCheckVisitor::do_Convert (Convert* x) {}
void NullCheckVisitor::do_NullCheck (NullCheck* x) { nce()->handle_NullCheck(x); }
void NullCheckVisitor::do_TypeCast (TypeCast* x) {}
void NullCheckVisitor::do_Invoke (Invoke* x) { nce()->handle_Invoke(x); }
void NullCheckVisitor::do_NewInstance (NewInstance* x) { nce()->handle_NewInstance(x); }
+void NullCheckVisitor::do_NewValueTypeInstance(NewValueTypeInstance* x) { nce()->handle_NewValueTypeInstance(x); }
void NullCheckVisitor::do_NewTypeArray (NewTypeArray* x) { nce()->handle_NewArray(x); }
void NullCheckVisitor::do_NewObjectArray (NewObjectArray* x) { nce()->handle_NewArray(x); }
void NullCheckVisitor::do_NewMultiArray (NewMultiArray* x) { nce()->handle_NewArray(x); }
void NullCheckVisitor::do_CheckCast (CheckCast* x) { nce()->clear_last_explicit_null_check(); }
void NullCheckVisitor::do_InstanceOf (InstanceOf* x) {}
@@ -860,11 +863,11 @@
// the non-null map
ciField* field = x->field();
if (field->is_constant()) {
ciConstant field_val = field->constant_value();
BasicType field_type = field_val.basic_type();
- if (field_type == T_OBJECT || field_type == T_ARRAY) {
+ if (field_type == T_OBJECT || field_type == T_ARRAY || field_type == T_VALUETYPE) {
ciObject* obj_val = field_val.as_object();
if (!obj_val->is_null_object()) {
if (PrintNullCheckElimination) {
tty->print_cr("AccessField %d proven non-null by static final non-null oop check",
x->id());
@@ -1038,10 +1041,17 @@
if (PrintNullCheckElimination) {
tty->print_cr("NewInstance %d is non-null", x->id());
}
}
+void NullCheckEliminator::handle_NewValueTypeInstance(NewValueTypeInstance* x) {
+ set_put(x);
+ if (PrintNullCheckElimination) {
+ tty->print_cr("NewValueTypeInstance %d is non-null", x->id());
+ }
+}
+
void NullCheckEliminator::handle_NewArray(NewArray* x) {
set_put(x);
if (PrintNullCheckElimination) {
tty->print_cr("NewArray %d is non-null", x->id());
< prev index next >