< prev index next >
src/hotspot/share/opto/vectornode.cpp
Print this page
@@ -194,10 +194,12 @@
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,10 +214,29 @@
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,10 +296,11 @@
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,10 +374,12 @@
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 >