< prev index next >

src/share/vm/opto/parse1.cpp

Print this page




2108     t = o->bottom_type();  // Type::RETURN_ADDRESS or such-like.
2109   } else {
2110     assert(false, "no type information for this phi");
2111   }
2112 
2113   // If the type falls to bottom, then this must be a local that
2114   // is already dead or is mixing ints and oops or some such.
2115   // Forcing it to top makes it go dead.
2116   if (t == Type::BOTTOM) {
2117     map->set_req(idx, top());
2118     return NULL;
2119   }
2120 
2121   // Do not create phis for top either.
2122   // A top on a non-null control flow must be an unused even after the.phi.
2123   if (t == Type::TOP || t == Type::HALF) {
2124     map->set_req(idx, top());
2125     return NULL;
2126   }
2127 
2128   ValueTypeNode* vt = o->isa_ValueType();
2129   if (vt != NULL) {
2130     // Value types are merged by merging their field values.
2131     // Create a cloned ValueTypeNode with phi inputs that
2132     // represents the merged value type and update the map.
2133     vt = vt->clone_with_phis(&_gvn, region);
2134     map->set_req(idx, vt);
2135     return vt->get_oop()->as_Phi();
2136   } else {
2137     PhiNode* phi = PhiNode::make(region, o, t);
2138     gvn().set_type(phi, t);
2139     if (C->do_escape_analysis()) record_for_igvn(phi);
2140     map->set_req(idx, phi);
2141     return phi;
2142   }
2143 }
2144 
2145 //--------------------------ensure_memory_phi----------------------------------
2146 // Turn the idx'th slice of the current memory into a Phi
2147 PhiNode *Parse::ensure_memory_phi(int idx, bool nocreate) {
2148   MergeMemNode* mem = merged_memory();




2108     t = o->bottom_type();  // Type::RETURN_ADDRESS or such-like.
2109   } else {
2110     assert(false, "no type information for this phi");
2111   }
2112 
2113   // If the type falls to bottom, then this must be a local that
2114   // is already dead or is mixing ints and oops or some such.
2115   // Forcing it to top makes it go dead.
2116   if (t == Type::BOTTOM) {
2117     map->set_req(idx, top());
2118     return NULL;
2119   }
2120 
2121   // Do not create phis for top either.
2122   // A top on a non-null control flow must be an unused even after the.phi.
2123   if (t == Type::TOP || t == Type::HALF) {
2124     map->set_req(idx, top());
2125     return NULL;
2126   }
2127 
2128   ValueTypeBaseNode* vt = o->isa_ValueType();
2129   if (vt != NULL) {
2130     // Value types are merged by merging their field values.
2131     // Create a cloned ValueTypeNode with phi inputs that
2132     // represents the merged value type and update the map.
2133     vt = vt->clone_with_phis(&_gvn, region);
2134     map->set_req(idx, vt);
2135     return vt->get_oop()->as_Phi();
2136   } else {
2137     PhiNode* phi = PhiNode::make(region, o, t);
2138     gvn().set_type(phi, t);
2139     if (C->do_escape_analysis()) record_for_igvn(phi);
2140     map->set_req(idx, phi);
2141     return phi;
2142   }
2143 }
2144 
2145 //--------------------------ensure_memory_phi----------------------------------
2146 // Turn the idx'th slice of the current memory into a Phi
2147 PhiNode *Parse::ensure_memory_phi(int idx, bool nocreate) {
2148   MergeMemNode* mem = merged_memory();


< prev index next >