< 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,185 ****
--- 176,197 ----
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,384 ****
--- 387,399 ----
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,589 ****
--- 595,620 ----
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,613 ****
--- 635,646 ----
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 >