src/share/vm/opto/loopTransform.cpp

changeset 6468
cfd05ec74089
parent 5513
bcc4f6f54d83
child 6472
2b8e28fdf503
equal deleted inserted replaced
6467:f3806614494a 6468:cfd05ec74089
2690 } else if (t == T_DOUBLE) { 2690 } else if (t == T_DOUBLE) {
2691 store_value = new (C) MoveD2LNode(store_value); 2691 store_value = new (C) MoveD2LNode(store_value);
2692 _igvn.register_new_node_with_optimizer(store_value); 2692 _igvn.register_new_node_with_optimizer(store_value);
2693 } 2693 }
2694 2694
2695 if (CCallingConventionRequiresIntsAsLongs &&
2696 // See StubRoutines::select_fill_function for types. FLOAT has been converted to INT.
2697 (t == T_FLOAT || t == T_INT || is_subword_type(t))) {
2698 store_value = new (C) ConvI2LNode(store_value);
2699 _igvn.register_new_node_with_optimizer(store_value);
2700 }
2701
2695 Node* mem_phi = store->in(MemNode::Memory); 2702 Node* mem_phi = store->in(MemNode::Memory);
2696 Node* result_ctrl; 2703 Node* result_ctrl;
2697 Node* result_mem; 2704 Node* result_mem;
2698 const TypeFunc* call_type = OptoRuntime::array_fill_Type(); 2705 const TypeFunc* call_type = OptoRuntime::array_fill_Type();
2699 CallLeafNode *call = new (C) CallLeafNoFPNode(call_type, fill, 2706 CallLeafNode *call = new (C) CallLeafNoFPNode(call_type, fill,
2700 fill_name, TypeAryPtr::get_array_body_type(t)); 2707 fill_name, TypeAryPtr::get_array_body_type(t));
2701 call->init_req(TypeFunc::Parms+0, from); 2708 uint cnt = 0;
2702 call->init_req(TypeFunc::Parms+1, store_value); 2709 call->init_req(TypeFunc::Parms + cnt++, from);
2710 call->init_req(TypeFunc::Parms + cnt++, store_value);
2711 if (CCallingConventionRequiresIntsAsLongs) {
2712 call->init_req(TypeFunc::Parms + cnt++, C->top());
2713 }
2703 #ifdef _LP64 2714 #ifdef _LP64
2704 len = new (C) ConvI2LNode(len); 2715 len = new (C) ConvI2LNode(len);
2705 _igvn.register_new_node_with_optimizer(len); 2716 _igvn.register_new_node_with_optimizer(len);
2706 #endif 2717 #endif
2707 call->init_req(TypeFunc::Parms+2, len); 2718 call->init_req(TypeFunc::Parms + cnt++, len);
2708 #ifdef _LP64 2719 #ifdef _LP64
2709 call->init_req(TypeFunc::Parms+3, C->top()); 2720 call->init_req(TypeFunc::Parms + cnt++, C->top());
2710 #endif 2721 #endif
2711 call->init_req( TypeFunc::Control, head->init_control()); 2722 call->init_req(TypeFunc::Control, head->init_control());
2712 call->init_req( TypeFunc::I_O , C->top() ) ; // does no i/o 2723 call->init_req(TypeFunc::I_O, C->top()); // Does no I/O.
2713 call->init_req( TypeFunc::Memory , mem_phi->in(LoopNode::EntryControl) ); 2724 call->init_req(TypeFunc::Memory, mem_phi->in(LoopNode::EntryControl));
2714 call->init_req( TypeFunc::ReturnAdr, C->start()->proj_out(TypeFunc::ReturnAdr) ); 2725 call->init_req(TypeFunc::ReturnAdr, C->start()->proj_out(TypeFunc::ReturnAdr));
2715 call->init_req( TypeFunc::FramePtr, C->start()->proj_out(TypeFunc::FramePtr) ); 2726 call->init_req(TypeFunc::FramePtr, C->start()->proj_out(TypeFunc::FramePtr));
2716 _igvn.register_new_node_with_optimizer(call); 2727 _igvn.register_new_node_with_optimizer(call);
2717 result_ctrl = new (C) ProjNode(call,TypeFunc::Control); 2728 result_ctrl = new (C) ProjNode(call,TypeFunc::Control);
2718 _igvn.register_new_node_with_optimizer(result_ctrl); 2729 _igvn.register_new_node_with_optimizer(result_ctrl);
2719 result_mem = new (C) ProjNode(call,TypeFunc::Memory); 2730 result_mem = new (C) ProjNode(call,TypeFunc::Memory);
2720 _igvn.register_new_node_with_optimizer(result_mem); 2731 _igvn.register_new_node_with_optimizer(result_mem);

mercurial