< 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 >