171 return Op_LoadVector;
172
173 case Op_StoreB:
174 case Op_StoreC:
175 case Op_StoreI:
176 case Op_StoreL:
177 case Op_StoreF:
178 case Op_StoreD:
179 return Op_StoreVector;
180 }
181 return 0; // Unimplemented
182 }
183
184 // Also used to check if the code generator
185 // supports the vector operation.
186 bool VectorNode::implemented(int opc, uint vlen, BasicType bt) {
187 if (is_java_primitive(bt) &&
188 (vlen > 1) && is_power_of_2(vlen) &&
189 Matcher::vector_size_supported(bt, vlen)) {
190 int vopc = VectorNode::opcode(opc, bt);
191 return vopc > 0 && Matcher::match_rule_supported(vopc) && (vopc != Op_CMoveD || vlen == 4);
192 }
193 return false;
194 }
195
196 bool VectorNode::is_shift(Node* n) {
197 switch (n->Opcode()) {
198 case Op_LShiftI:
199 case Op_LShiftL:
200 case Op_RShiftI:
201 case Op_RShiftL:
202 case Op_URShiftI:
203 case Op_URShiftL:
204 return true;
205 }
206 return false;
207 }
208
209 // Check if input is loop invariant vector.
210 bool VectorNode::is_invariant_vector(Node* n) {
211 // Only Replicate vector nodes are loop invariant for now.
|
171 return Op_LoadVector;
172
173 case Op_StoreB:
174 case Op_StoreC:
175 case Op_StoreI:
176 case Op_StoreL:
177 case Op_StoreF:
178 case Op_StoreD:
179 return Op_StoreVector;
180 }
181 return 0; // Unimplemented
182 }
183
184 // Also used to check if the code generator
185 // supports the vector operation.
186 bool VectorNode::implemented(int opc, uint vlen, BasicType bt) {
187 if (is_java_primitive(bt) &&
188 (vlen > 1) && is_power_of_2(vlen) &&
189 Matcher::vector_size_supported(bt, vlen)) {
190 int vopc = VectorNode::opcode(opc, bt);
191 return vopc > 0 && Matcher::match_rule_supported_vector(vopc, vlen);
192 }
193 return false;
194 }
195
196 bool VectorNode::is_shift(Node* n) {
197 switch (n->Opcode()) {
198 case Op_LShiftI:
199 case Op_LShiftL:
200 case Op_RShiftI:
201 case Op_RShiftL:
202 case Op_URShiftI:
203 case Op_URShiftL:
204 return true;
205 }
206 return false;
207 }
208
209 // Check if input is loop invariant vector.
210 bool VectorNode::is_invariant_vector(Node* n) {
211 // Only Replicate vector nodes are loop invariant for now.
|