diff src/share/vm/opto/machnode.cpp @ 20447:fc2c88ea11a9

8036588: VerifyFieldClosure fails instanceKlass:3133 Summary: Changed deopt live-pointer test to use returns-object instead of live-and-returns-object Reviewed-by: iveresov, kvn, jrose
author drchase
date Fri, 11 Jul 2014 19:51:36 -0400
parents 15120a36272d
children 7848fc12602b
line wrap: on
line diff
--- a/src/share/vm/opto/machnode.cpp	Tue Sep 09 19:18:13 2014 +0000
+++ b/src/share/vm/opto/machnode.cpp	Fri Jul 11 19:51:36 2014 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. 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
@@ -639,7 +639,6 @@
 }
 #endif
 
-
 bool MachCallNode::return_value_is_used() const {
   if (tf()->range()->cnt() == TypeFunc::Parms) {
     // void return
@@ -657,6 +656,14 @@
   return false;
 }
 
+// Similar to cousin class CallNode::returns_pointer
+// Because this is used in deoptimization, we want the type info, not the data
+// flow info; the interpreter will "use" things that are dead to the optimizer.
+bool MachCallNode::returns_pointer() const {
+  const TypeTuple *r = tf()->range();
+  return (r->cnt() > TypeFunc::Parms &&
+          r->field_at(TypeFunc::Parms)->isa_ptr());
+}
 
 //------------------------------Registers--------------------------------------
 const RegMask &MachCallNode::in_RegMask(uint idx) const {