< prev index next >
src/share/vm/opto/machnode.cpp
Print this page
@@ -666,12 +666,12 @@
//=============================================================================
uint MachCallNode::cmp( const Node &n ) const
{ return _tf == ((MachCallNode&)n)._tf; }
-const Type *MachCallNode::bottom_type() const { return tf()->range(); }
-const Type* MachCallNode::Value(PhaseGVN* phase) const { return tf()->range(); }
+const Type *MachCallNode::bottom_type() const { return tf()->range_cc(); }
+const Type* MachCallNode::Value(PhaseGVN* phase) const { return tf()->range_cc(); }
#ifndef PRODUCT
void MachCallNode::dump_spec(outputStream *st) const {
st->print("# ");
if (tf() != NULL) tf()->dump_on(st);
@@ -679,15 +679,17 @@
if (jvms() != NULL) jvms()->dump_spec(st);
}
#endif
bool MachCallNode::return_value_is_used() const {
- if (tf()->range()->cnt() == TypeFunc::Parms) {
+ if (tf()->range_sig()->cnt() == TypeFunc::Parms) {
// void return
return false;
}
+ assert(tf()->returns_value_type_as_fields(), "multiple return values not supported");
+
// find the projection corresponding to the return value
for (DUIterator_Fast imax, i = fast_outs(imax); i < imax; i++) {
Node *use = fast_out(i);
if (!use->is_Proj()) continue;
if (use->as_Proj()->_con == TypeFunc::Parms) {
@@ -699,15 +701,19 @@
// 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();
+ const TypeTuple *r = tf()->range_sig();
return (r->cnt() > TypeFunc::Parms &&
r->field_at(TypeFunc::Parms)->isa_ptr());
}
+bool MachCallNode::returns_vt() const {
+ return tf()->returns_value_type_as_fields();
+}
+
//------------------------------Registers--------------------------------------
const RegMask &MachCallNode::in_RegMask(uint idx) const {
// Values in the domain use the users calling convention, embodied in the
// _in_rms array of RegMasks.
if (idx < tf()->domain_sig()->cnt()) {
< prev index next >