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();
|