< prev index next >
src/hotspot/share/opto/vectornode.cpp
Print this page
*** 194,203 ****
--- 194,205 ----
case Op_StoreI:
case Op_StoreL:
case Op_StoreF:
case Op_StoreD:
return Op_StoreVector;
+ case Op_MulAddS2I:
+ return Op_MulAddVS2VI;
default:
return 0; // Unimplemented
}
}
*** 212,221 ****
--- 214,242 ----
return vopc > 0 && Matcher::match_rule_supported_vector(vopc, vlen);
}
return false;
}
+ bool VectorNode::is_type_transition_short_to_int(Node* n) {
+ switch (n->Opcode()) {
+ case Op_MulAddS2I:
+ return true;
+ }
+ return false;
+ }
+
+ bool VectorNode::is_type_transition_to_int(Node* n) {
+ return is_type_transition_short_to_int(n);
+ }
+
+ bool VectorNode::is_muladds2i(Node* n) {
+ if (n->Opcode() == Op_MulAddS2I) {
+ return true;
+ }
+ return false;
+ }
+
bool VectorNode::is_shift(Node* n) {
switch (n->Opcode()) {
case Op_LShiftI:
case Op_LShiftL:
case Op_RShiftI:
*** 275,284 ****
--- 296,306 ----
case Op_MulI: case Op_MulL: case Op_MulF: case Op_MulD:
case Op_DivF: case Op_DivD:
case Op_AndI: case Op_AndL:
case Op_OrI: case Op_OrL:
case Op_XorI: case Op_XorL:
+ case Op_MulAddS2I:
*start = 1;
*end = 3; // 2 vector operands
break;
case Op_CMoveI: case Op_CMoveL: case Op_CMoveF: case Op_CMoveD:
*start = 2;
*** 352,361 ****
--- 374,385 ----
case Op_URShiftVL: return new URShiftVLNode(n1, n2, vt);
case Op_AndV: return new AndVNode(n1, n2, vt);
case Op_OrV: return new OrVNode (n1, n2, vt);
case Op_XorV: return new XorVNode(n1, n2, vt);
+
+ case Op_MulAddVS2VI: return new MulAddVS2VINode(n1, n2, vt);
default:
fatal("Missed vector creation for '%s'", NodeClassNames[vopc]);
return NULL;
}
}
< prev index next >