< prev index next >
src/hotspot/share/opto/vectornode.cpp
Print this page
rev 53101 : 8214922: Add vectorization support for fmin/fmax
Reviewed-by: duke
@@ -176,10 +176,22 @@
case Op_OrL:
return Op_OrV;
case Op_XorI:
case Op_XorL:
return Op_XorV;
+ case Op_MinF:
+ assert(bt == T_FLOAT, "must be");
+ return Op_MinV;
+ case Op_MinD:
+ assert(bt == T_DOUBLE, "must be");
+ return Op_MinV;
+ case Op_MaxF:
+ assert(bt == T_FLOAT, "must be");
+ return Op_MaxV;
+ case Op_MaxD:
+ assert(bt == T_DOUBLE, "must be");
+ return Op_MaxV;
case Op_LoadB:
case Op_LoadUB:
case Op_LoadUS:
case Op_LoadS:
@@ -375,10 +387,13 @@
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_MinV: return new MinVNode(n1, n2, vt);
+ case Op_MaxV: return new MaxVNode(n1, n2, vt);
+
case Op_MulAddVS2VI: return new MulAddVS2VINode(n1, n2, vt);
default:
fatal("Missed vector creation for '%s'", NodeClassNames[vopc]);
return NULL;
}
@@ -580,10 +595,26 @@
break;
case Op_MulD:
assert(bt == T_DOUBLE, "must be");
vopc = Op_MulReductionVD;
break;
+ case Op_MinF:
+ assert(bt == T_FLOAT, "must be");
+ vopc = Op_MinReductionV;
+ break;
+ case Op_MinD:
+ assert(bt == T_DOUBLE, "must be");
+ vopc = Op_MaxReductionV;
+ break;
+ case Op_MaxF:
+ assert(bt == T_FLOAT, "must be");
+ vopc = Op_MinReductionV;
+ break;
+ case Op_MaxD:
+ assert(bt == T_DOUBLE, "must be");
+ vopc = Op_MaxReductionV;
+ break;
// TODO: add MulL for targets that support it
default:
break;
}
return vopc;
@@ -604,10 +635,12 @@
case Op_AddReductionVD: return new AddReductionVDNode(ctrl, n1, n2);
case Op_MulReductionVI: return new MulReductionVINode(ctrl, n1, n2);
case Op_MulReductionVL: return new MulReductionVLNode(ctrl, n1, n2);
case Op_MulReductionVF: return new MulReductionVFNode(ctrl, n1, n2);
case Op_MulReductionVD: return new MulReductionVDNode(ctrl, n1, n2);
+ case Op_MinReductionV: return new MinReductionVNode(ctrl, n1, n2);
+ case Op_MaxReductionV: return new MaxReductionVNode(ctrl, n1, n2);
default:
fatal("Missed vector creation for '%s'", NodeClassNames[vopc]);
return NULL;
}
}
< prev index next >