comparison src/share/vm/opto/superword.cpp @ 3842:c7b60b601eb4

7069452: Cleanup NodeFlags Summary: Remove flags which duplicate information in Node::NodeClasses. Reviewed-by: never
author kvn
date Wed, 27 Jul 2011 17:28:36 -0700
parents 08eb13460b3a
children 6987871cfb9b
comparison
equal deleted inserted replaced
3841:0f34fdee809e 3842:c7b60b601eb4
1165 const TypePtr* atyp = n->adr_type(); 1165 const TypePtr* atyp = n->adr_type();
1166 vn = VectorLoadNode::make(_phase->C, opc, ctl, mem, adr, atyp, vlen); 1166 vn = VectorLoadNode::make(_phase->C, opc, ctl, mem, adr, atyp, vlen);
1167 1167
1168 } else if (n->is_Store()) { 1168 } else if (n->is_Store()) {
1169 // Promote value to be stored to vector 1169 // Promote value to be stored to vector
1170 VectorNode* val = vector_opd(p, MemNode::ValueIn); 1170 Node* val = vector_opd(p, MemNode::ValueIn);
1171 1171
1172 int opc = n->Opcode(); 1172 int opc = n->Opcode();
1173 Node* ctl = n->in(MemNode::Control); 1173 Node* ctl = n->in(MemNode::Control);
1174 Node* mem = first->in(MemNode::Memory); 1174 Node* mem = first->in(MemNode::Memory);
1175 Node* adr = low_adr->in(MemNode::Address); 1175 Node* adr = low_adr->in(MemNode::Address);
1197 } 1197 }
1198 } 1198 }
1199 1199
1200 //------------------------------vector_opd--------------------------- 1200 //------------------------------vector_opd---------------------------
1201 // Create a vector operand for the nodes in pack p for operand: in(opd_idx) 1201 // Create a vector operand for the nodes in pack p for operand: in(opd_idx)
1202 VectorNode* SuperWord::vector_opd(Node_List* p, int opd_idx) { 1202 Node* SuperWord::vector_opd(Node_List* p, int opd_idx) {
1203 Node* p0 = p->at(0); 1203 Node* p0 = p->at(0);
1204 uint vlen = p->size(); 1204 uint vlen = p->size();
1205 Node* opd = p0->in(opd_idx); 1205 Node* opd = p0->in(opd_idx);
1206 1206
1207 bool same_opd = true; 1207 bool same_opd = true;
1213 break; 1213 break;
1214 } 1214 }
1215 } 1215 }
1216 1216
1217 if (same_opd) { 1217 if (same_opd) {
1218 if (opd->is_Vector()) { 1218 if (opd->is_Vector() || opd->is_VectorLoad()) {
1219 return (VectorNode*)opd; // input is matching vector 1219 return opd; // input is matching vector
1220 } 1220 }
1221 assert(!opd->is_VectorStore(), "such vector is not expected here");
1221 // Convert scalar input to vector. Use p0's type because it's container 1222 // Convert scalar input to vector. Use p0's type because it's container
1222 // maybe smaller than the operand's container. 1223 // maybe smaller than the operand's container.
1223 const Type* opd_t = velt_type(!in_bb(opd) ? p0 : opd); 1224 const Type* opd_t = velt_type(!in_bb(opd) ? p0 : opd);
1224 const Type* p0_t = velt_type(p0); 1225 const Type* p0_t = velt_type(p0);
1225 if (p0_t->higher_equal(opd_t)) opd_t = p0_t; 1226 if (p0_t->higher_equal(opd_t)) opd_t = p0_t;