2341 case Op_StrCompressedCopy: 2342 case Op_StrInflatedCopy: 2343 case Op_EncodeISOArray: { 2344 // Restructure into a binary tree for Matching. 2345 Node* pair = new BinaryNode(n->in(3), n->in(4)); 2346 n->set_req(3, pair); 2347 n->del_req(4); 2348 break; 2349 } 2350 case Op_FmaD: 2351 case Op_FmaF: 2352 case Op_FmaVD: 2353 case Op_FmaVF: { 2354 // Restructure into a binary tree for Matching. 2355 Node* pair = new BinaryNode(n->in(1), n->in(2)); 2356 n->set_req(2, pair); 2357 n->set_req(1, n->in(3)); 2358 n->del_req(3); 2359 break; 2360 } 2361 case Op_MulAddS2I: { 2362 Node* pair1 = new BinaryNode(n->in(1), n->in(2)); 2363 Node* pair2 = new BinaryNode(n->in(3), n->in(4)); 2364 n->set_req(1, pair1); 2365 n->set_req(2, pair2); 2366 n->del_req(4); 2367 n->del_req(3); 2368 break; 2369 } 2370 default: 2371 break; 2372 } 2373 } 2374 2375 #ifdef ASSERT 2376 // machine-independent root to machine-dependent root 2377 void Matcher::dump_old2new_map() { 2378 _old2new_map.dump(); 2379 } 2380 #endif 2381 2382 //---------------------------collect_null_checks------------------------------- 2383 // Find null checks in the ideal graph; write a machine-specific node for 2384 // it. Used by later implicit-null-check handling. Actually collects 2385 // either an IfTrue or IfFalse for the common NOT-null path, AND the ideal 2386 // value being tested. 2387 void Matcher::collect_null_checks( Node *proj, Node *orig_proj ) { 2388 Node *iff = proj->in(0); 2389 if( iff->Opcode() == Op_If ) { | 2341 case Op_StrCompressedCopy: 2342 case Op_StrInflatedCopy: 2343 case Op_EncodeISOArray: { 2344 // Restructure into a binary tree for Matching. 2345 Node* pair = new BinaryNode(n->in(3), n->in(4)); 2346 n->set_req(3, pair); 2347 n->del_req(4); 2348 break; 2349 } 2350 case Op_FmaD: 2351 case Op_FmaF: 2352 case Op_FmaVD: 2353 case Op_FmaVF: { 2354 // Restructure into a binary tree for Matching. 2355 Node* pair = new BinaryNode(n->in(1), n->in(2)); 2356 n->set_req(2, pair); 2357 n->set_req(1, n->in(3)); 2358 n->del_req(3); 2359 break; 2360 } 2361 case Op_VectorBlend: 2362 case Op_VectorInsert: { 2363 Node* pair = new BinaryNode(n->in(1), n->in(2)); 2364 n->set_req(1, pair); 2365 n->set_req(2, n->in(3)); 2366 n->del_req(3); 2367 break; 2368 } 2369 case Op_StoreVectorScatter: { 2370 Node* pair = new BinaryNode(n->in(MemNode::ValueIn), n->in(MemNode::ValueIn+1)); 2371 n->set_req(MemNode::ValueIn, pair); 2372 n->del_req(MemNode::ValueIn+1); 2373 break; 2374 } 2375 case Op_MulAddS2I: { 2376 Node* pair1 = new BinaryNode(n->in(1), n->in(2)); 2377 Node* pair2 = new BinaryNode(n->in(3), n->in(4)); 2378 n->set_req(1, pair1); 2379 n->set_req(2, pair2); 2380 n->del_req(4); 2381 n->del_req(3); 2382 break; 2383 } 2384 #ifdef X86 2385 case Op_VectorMaskCmp: { 2386 n->set_req(1, new BinaryNode(n->in(1), n->in(2))); 2387 n->set_req(2, n->in(3)); 2388 n->del_req(3); 2389 break; 2390 } 2391 #endif 2392 default: 2393 break; 2394 } 2395 } 2396 2397 #ifdef ASSERT 2398 // machine-independent root to machine-dependent root 2399 void Matcher::dump_old2new_map() { 2400 _old2new_map.dump(); 2401 } 2402 #endif 2403 2404 //---------------------------collect_null_checks------------------------------- 2405 // Find null checks in the ideal graph; write a machine-specific node for 2406 // it. Used by later implicit-null-check handling. Actually collects 2407 // either an IfTrue or IfFalse for the common NOT-null path, AND the ideal 2408 // value being tested. 2409 void Matcher::collect_null_checks( Node *proj, Node *orig_proj ) { 2410 Node *iff = proj->in(0); 2411 if( iff->Opcode() == Op_If ) { |