2269 // We do not need to WRITE the memory state after a SafePoint. The control
2270 // edge will keep card-marks and oop-stores from floating up from below a
2271 // SafePoint and our true dependency added here will keep them from floating
2272 // down below a SafePoint.
2273
2274 // Clone the current memory state
2275 Node* mem = MergeMemNode::make(map()->memory());
2276
2277 mem = _gvn.transform(mem);
2278
2279 // Pass control through the safepoint
2280 sfpnt->init_req(TypeFunc::Control , control());
2281 // Fix edges normally used by a call
2282 sfpnt->init_req(TypeFunc::I_O , top() );
2283 sfpnt->init_req(TypeFunc::Memory , mem );
2284 sfpnt->init_req(TypeFunc::ReturnAdr, top() );
2285 sfpnt->init_req(TypeFunc::FramePtr , top() );
2286
2287 // Create a node for the polling address
2288 if( add_poll_param ) {
2289 Node *polladr = ConPNode::make((address)os::get_polling_page());
2290 sfpnt->init_req(TypeFunc::Parms+0, _gvn.transform(polladr));
2291 }
2292
2293 // Fix up the JVM State edges
2294 add_safepoint_edges(sfpnt);
2295 Node *transformed_sfpnt = _gvn.transform(sfpnt);
2296 set_control(transformed_sfpnt);
2297
2298 // Provide an edge from root to safepoint. This makes the safepoint
2299 // appear useful until the parse has completed.
2300 if( OptoRemoveUseless && transformed_sfpnt->is_SafePoint() ) {
2301 assert(C->root() != NULL, "Expect parse is still valid");
2302 C->root()->add_prec(transformed_sfpnt);
2303 }
2304 }
2305
2306 #ifndef PRODUCT
2307 //------------------------show_parse_info--------------------------------------
2308 void Parse::show_parse_info() {
2309 InlineTree* ilt = NULL;
|
2269 // We do not need to WRITE the memory state after a SafePoint. The control
2270 // edge will keep card-marks and oop-stores from floating up from below a
2271 // SafePoint and our true dependency added here will keep them from floating
2272 // down below a SafePoint.
2273
2274 // Clone the current memory state
2275 Node* mem = MergeMemNode::make(map()->memory());
2276
2277 mem = _gvn.transform(mem);
2278
2279 // Pass control through the safepoint
2280 sfpnt->init_req(TypeFunc::Control , control());
2281 // Fix edges normally used by a call
2282 sfpnt->init_req(TypeFunc::I_O , top() );
2283 sfpnt->init_req(TypeFunc::Memory , mem );
2284 sfpnt->init_req(TypeFunc::ReturnAdr, top() );
2285 sfpnt->init_req(TypeFunc::FramePtr , top() );
2286
2287 // Create a node for the polling address
2288 if( add_poll_param ) {
2289 Node *polladr;
2290 if (SafepointMechanism::uses_thread_local_poll()) {
2291 Node *thread = _gvn.transform(new ThreadLocalNode());
2292 Node *polling_page_load_addr = _gvn.transform(basic_plus_adr(top(), thread, in_bytes(Thread::polling_page_offset())));
2293 polladr = make_load(control(), polling_page_load_addr, TypeRawPtr::BOTTOM, T_ADDRESS, Compile::AliasIdxRaw, MemNode::unordered);
2294 } else {
2295 polladr = ConPNode::make((address)os::get_polling_page());
2296 }
2297 sfpnt->init_req(TypeFunc::Parms+0, _gvn.transform(polladr));
2298 }
2299
2300 // Fix up the JVM State edges
2301 add_safepoint_edges(sfpnt);
2302 Node *transformed_sfpnt = _gvn.transform(sfpnt);
2303 set_control(transformed_sfpnt);
2304
2305 // Provide an edge from root to safepoint. This makes the safepoint
2306 // appear useful until the parse has completed.
2307 if( OptoRemoveUseless && transformed_sfpnt->is_SafePoint() ) {
2308 assert(C->root() != NULL, "Expect parse is still valid");
2309 C->root()->add_prec(transformed_sfpnt);
2310 }
2311 }
2312
2313 #ifndef PRODUCT
2314 //------------------------show_parse_info--------------------------------------
2315 void Parse::show_parse_info() {
2316 InlineTree* ilt = NULL;
|