< prev index next >

src/hotspot/share/opto/idealKit.cpp

Print this page

        

@@ -486,17 +486,17 @@
 }
 
 
 //----------------------------- make_call  ----------------------------
 // Trivial runtime call
-void IdealKit::make_leaf_call(const TypeFunc *slow_call_type,
-                              address slow_call,
-                              const char *leaf_name,
-                              Node* parm0,
-                              Node* parm1,
-                              Node* parm2,
-                              Node* parm3) {
+Node* IdealKit::make_leaf_call(const TypeFunc *slow_call_type,
+                               address slow_call,
+                               const char *leaf_name,
+                               Node* parm0,
+                               Node* parm1,
+                               Node* parm2,
+                               Node* parm3) {
 
   // We only handle taking in RawMem and modifying RawMem
   const TypePtr* adr_type = TypeRawPtr::BOTTOM;
   uint adr_idx = C->get_alias_index(adr_type);
 

@@ -530,10 +530,16 @@
   // Set the RawPtr memory state only.
   set_memory(mem, adr_idx);
 
   assert(C->alias_type(call->adr_type()) == C->alias_type(adr_type),
          "call node must be constructed correctly");
+  Node* res = NULL;
+  if (slow_call_type->range()->cnt() > TypeFunc::Parms) {
+    assert(slow_call_type->range()->cnt() == TypeFunc::Parms+1, "only one return value");
+    res = transform(new ProjNode(call, TypeFunc::Parms));
+  }
+  return res;
 }
 
 void IdealKit::make_leaf_call_no_fp(const TypeFunc *slow_call_type,
                               address slow_call,
                               const char *leaf_name,
< prev index next >