hotspot/src/share/vm/opto/loopTransform.cpp
changeset 22834 3e2df6a4a28c
parent 19283 4df251ee863c
child 22838 82c7497fbad4
equal deleted inserted replaced
22833:92d74f188f73 22834:3e2df6a4a28c
  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);