comparison src/share/vm/opto/superword.cpp @ 20311:b1bc1af04c6e

8052081: Optimize generated by C2 code for Intel's Atom processor Summary: Allow to execute vectorization and crc32 optimization on Atom. Enable UseFPUForSpilling by default on x86. Reviewed-by: roland
author kvn
date Tue, 05 Aug 2014 15:02:10 -0700
parents 42274879e644
children 7848fc12602b a1b5fe34c604
comparison
equal deleted inserted replaced
20310:bfba6779654b 20311:b1bc1af04c6e
1372 Node* first = executed_first(p); 1372 Node* first = executed_first(p);
1373 int opc = n->Opcode(); 1373 int opc = n->Opcode();
1374 if (n->is_Load()) { 1374 if (n->is_Load()) {
1375 Node* ctl = n->in(MemNode::Control); 1375 Node* ctl = n->in(MemNode::Control);
1376 Node* mem = first->in(MemNode::Memory); 1376 Node* mem = first->in(MemNode::Memory);
1377 SWPointer p1(n->as_Mem(), this);
1378 // Identify the memory dependency for the new loadVector node by
1379 // walking up through memory chain.
1380 // This is done to give flexibility to the new loadVector node so that
1381 // it can move above independent storeVector nodes.
1382 while (mem->is_StoreVector()) {
1383 SWPointer p2(mem->as_Mem(), this);
1384 int cmp = p1.cmp(p2);
1385 if (SWPointer::not_equal(cmp) || !SWPointer::comparable(cmp)) {
1386 mem = mem->in(MemNode::Memory);
1387 } else {
1388 break; // dependent memory
1389 }
1390 }
1377 Node* adr = low_adr->in(MemNode::Address); 1391 Node* adr = low_adr->in(MemNode::Address);
1378 const TypePtr* atyp = n->adr_type(); 1392 const TypePtr* atyp = n->adr_type();
1379 vn = LoadVectorNode::make(C, opc, ctl, mem, adr, atyp, vlen, velt_basic_type(n)); 1393 vn = LoadVectorNode::make(C, opc, ctl, mem, adr, atyp, vlen, velt_basic_type(n));
1380 vlen_in_bytes = vn->as_LoadVector()->memory_size(); 1394 vlen_in_bytes = vn->as_LoadVector()->memory_size();
1381 } else if (n->is_Store()) { 1395 } else if (n->is_Store()) {