hotspot/src/share/vm/opto/superword.cpp
changeset 46528 cf0da758e7b5
parent 38235 b2cbc7dbebb6
child 46630 75aa3e39d02c
--- a/hotspot/src/share/vm/opto/superword.cpp	Wed Jun 07 08:56:35 2017 -0700
+++ b/hotspot/src/share/vm/opto/superword.cpp	Wed Jun 07 13:09:46 2017 -0700
@@ -2324,6 +2324,13 @@
         const TypeVect* vt = TypeVect::make(bt, vlen);
         vn = new CMoveVDNode(cc, src1, src2, vt);
         NOT_PRODUCT(if(is_trace_cmov()) {tty->print("SWPointer::output: created new CMove node %d: ", vn->_idx); vn->dump();})
+      } else if (opc == Op_FmaD || opc == Op_FmaF) {
+        // Promote operands to vector
+        Node* in1 = vector_opd(p, 1);
+        Node* in2 = vector_opd(p, 2);
+        Node* in3 = vector_opd(p, 3);
+        vn = VectorNode::make(opc, in1, in2, in3, vlen, velt_basic_type(n));
+        vlen_in_bytes = vn->as_Vector()->length_in_bytes();
       } else {
         if (do_reserve_copy()) {
           NOT_PRODUCT(if(is_trace_loop_reverse() || TraceLoopOpts) {tty->print_cr("SWPointer::output: ShouldNotReachHere, exiting SuperWord");})