< prev index next >

src/share/vm/opto/superword.cpp

Print this page




2307         Node* src1 = vector_opd(p, 2); //2=CMoveNode::IfFalse
2308         if (src1 == NULL) {
2309           if (do_reserve_copy()) {
2310             NOT_PRODUCT(if(is_trace_loop_reverse() || TraceLoopOpts) {tty->print_cr("SWPointer::output: src1 should not be NULL, exiting SuperWord");})
2311             return; //and reverse to backup IG
2312           }
2313           ShouldNotReachHere();
2314         }
2315         Node* src2 = vector_opd(p, 3); //3=CMoveNode::IfTrue
2316         if (src2 == NULL) {
2317           if (do_reserve_copy()) {
2318             NOT_PRODUCT(if(is_trace_loop_reverse() || TraceLoopOpts) {tty->print_cr("SWPointer::output: src2 should not be NULL, exiting SuperWord");})
2319             return; //and reverse to backup IG
2320           }
2321           ShouldNotReachHere();
2322         }
2323         BasicType bt = velt_basic_type(n);
2324         const TypeVect* vt = TypeVect::make(bt, vlen);
2325         vn = new CMoveVDNode(cc, src1, src2, vt);
2326         NOT_PRODUCT(if(is_trace_cmov()) {tty->print("SWPointer::output: created new CMove node %d: ", vn->_idx); vn->dump();})







2327       } else {
2328         if (do_reserve_copy()) {
2329           NOT_PRODUCT(if(is_trace_loop_reverse() || TraceLoopOpts) {tty->print_cr("SWPointer::output: ShouldNotReachHere, exiting SuperWord");})
2330           return; //and reverse to backup IG
2331         }
2332         ShouldNotReachHere();
2333       }
2334 
2335       assert(vn != NULL, "sanity");
2336       if (vn == NULL) {
2337         if (do_reserve_copy()){
2338           NOT_PRODUCT(if(is_trace_loop_reverse() || TraceLoopOpts) {tty->print_cr("SWPointer::output: got NULL node, cannot proceed, exiting SuperWord");})
2339           return; //and reverse to backup IG
2340         }
2341         ShouldNotReachHere();
2342       }
2343 
2344       _block.at_put(i, vn);
2345       _igvn.register_new_node_with_optimizer(vn);
2346       _phase->set_ctrl(vn, _phase->get_ctrl(p->at(0)));




2307         Node* src1 = vector_opd(p, 2); //2=CMoveNode::IfFalse
2308         if (src1 == NULL) {
2309           if (do_reserve_copy()) {
2310             NOT_PRODUCT(if(is_trace_loop_reverse() || TraceLoopOpts) {tty->print_cr("SWPointer::output: src1 should not be NULL, exiting SuperWord");})
2311             return; //and reverse to backup IG
2312           }
2313           ShouldNotReachHere();
2314         }
2315         Node* src2 = vector_opd(p, 3); //3=CMoveNode::IfTrue
2316         if (src2 == NULL) {
2317           if (do_reserve_copy()) {
2318             NOT_PRODUCT(if(is_trace_loop_reverse() || TraceLoopOpts) {tty->print_cr("SWPointer::output: src2 should not be NULL, exiting SuperWord");})
2319             return; //and reverse to backup IG
2320           }
2321           ShouldNotReachHere();
2322         }
2323         BasicType bt = velt_basic_type(n);
2324         const TypeVect* vt = TypeVect::make(bt, vlen);
2325         vn = new CMoveVDNode(cc, src1, src2, vt);
2326         NOT_PRODUCT(if(is_trace_cmov()) {tty->print("SWPointer::output: created new CMove node %d: ", vn->_idx); vn->dump();})
2327       } else if (opc == Op_FmaD || opc == Op_FmaF) {
2328         // Promote operands to vector
2329         Node* in1 = vector_opd(p, 1);
2330         Node* in2 = vector_opd(p, 2);
2331         Node* in3 = vector_opd(p, 3);
2332         vn = VectorNode::make(opc, in1, in2, in3, vlen, velt_basic_type(n));
2333         vlen_in_bytes = vn->as_Vector()->length_in_bytes();
2334       } else {
2335         if (do_reserve_copy()) {
2336           NOT_PRODUCT(if(is_trace_loop_reverse() || TraceLoopOpts) {tty->print_cr("SWPointer::output: ShouldNotReachHere, exiting SuperWord");})
2337           return; //and reverse to backup IG
2338         }
2339         ShouldNotReachHere();
2340       }
2341 
2342       assert(vn != NULL, "sanity");
2343       if (vn == NULL) {
2344         if (do_reserve_copy()){
2345           NOT_PRODUCT(if(is_trace_loop_reverse() || TraceLoopOpts) {tty->print_cr("SWPointer::output: got NULL node, cannot proceed, exiting SuperWord");})
2346           return; //and reverse to backup IG
2347         }
2348         ShouldNotReachHere();
2349       }
2350 
2351       _block.at_put(i, vn);
2352       _igvn.register_new_node_with_optimizer(vn);
2353       _phase->set_ctrl(vn, _phase->get_ctrl(p->at(0)));


< prev index next >