hotspot/src/share/vm/c1/c1_LIR.cpp
changeset 43676 c6eed495a42b
parent 42877 6cbcb55d5232
child 46630 75aa3e39d02c
--- a/hotspot/src/share/vm/c1/c1_LIR.cpp	Tue Jan 31 01:11:40 2017 +0300
+++ b/hotspot/src/share/vm/c1/c1_LIR.cpp	Tue Jan 31 18:42:45 2017 +0100
@@ -1413,6 +1413,17 @@
   append(c);
 }
 
+void LIR_List::null_check(LIR_Opr opr, CodeEmitInfo* info, bool deoptimize_on_null) {
+  if (deoptimize_on_null) {
+    // Emit an explicit null check and deoptimize if opr is null
+    CodeStub* deopt = new DeoptimizeStub(info, Deoptimization::Reason_null_check, Deoptimization::Action_none);
+    cmp(lir_cond_equal, opr, LIR_OprFact::oopConst(NULL));
+    branch(lir_cond_equal, T_OBJECT, deopt);
+  } else {
+    // Emit an implicit null check
+    append(new LIR_Op1(lir_null_check, opr, info));
+  }
+}
 
 void LIR_List::cas_long(LIR_Opr addr, LIR_Opr cmp_value, LIR_Opr new_value,
                         LIR_Opr t1, LIR_Opr t2, LIR_Opr result) {