hotspot/src/share/vm/opto/loopTransform.cpp
changeset 22872 b6902ee5bc8d
parent 22234 da823d78ad65
parent 22851 4c4b6a45be43
child 22911 ff49c48c887d
equal deleted inserted replaced
22511:fae90cb64946 22872:b6902ee5bc8d
  2697   } else if (t == T_DOUBLE) {
  2697   } else if (t == T_DOUBLE) {
  2698     store_value = new (C) MoveD2LNode(store_value);
  2698     store_value = new (C) MoveD2LNode(store_value);
  2699     _igvn.register_new_node_with_optimizer(store_value);
  2699     _igvn.register_new_node_with_optimizer(store_value);
  2700   }
  2700   }
  2701 
  2701 
       
  2702   if (CCallingConventionRequiresIntsAsLongs &&
       
  2703       // See StubRoutines::select_fill_function for types. FLOAT has been converted to INT.
       
  2704       (t == T_FLOAT || t == T_INT ||  is_subword_type(t))) {
       
  2705     store_value = new (C) ConvI2LNode(store_value);
       
  2706     _igvn.register_new_node_with_optimizer(store_value);
       
  2707   }
       
  2708 
  2702   Node* mem_phi = store->in(MemNode::Memory);
  2709   Node* mem_phi = store->in(MemNode::Memory);
  2703   Node* result_ctrl;
  2710   Node* result_ctrl;
  2704   Node* result_mem;
  2711   Node* result_mem;
  2705   const TypeFunc* call_type = OptoRuntime::array_fill_Type();
  2712   const TypeFunc* call_type = OptoRuntime::array_fill_Type();
  2706   CallLeafNode *call = new (C) CallLeafNoFPNode(call_type, fill,
  2713   CallLeafNode *call = new (C) CallLeafNoFPNode(call_type, fill,
  2707                                                 fill_name, TypeAryPtr::get_array_body_type(t));
  2714                                                 fill_name, TypeAryPtr::get_array_body_type(t));
  2708   call->init_req(TypeFunc::Parms+0, from);
  2715   uint cnt = 0;
  2709   call->init_req(TypeFunc::Parms+1, store_value);
  2716   call->init_req(TypeFunc::Parms + cnt++, from);
       
  2717   call->init_req(TypeFunc::Parms + cnt++, store_value);
       
  2718   if (CCallingConventionRequiresIntsAsLongs) {
       
  2719     call->init_req(TypeFunc::Parms + cnt++, C->top());
       
  2720   }
  2710 #ifdef _LP64
  2721 #ifdef _LP64
  2711   len = new (C) ConvI2LNode(len);
  2722   len = new (C) ConvI2LNode(len);
  2712   _igvn.register_new_node_with_optimizer(len);
  2723   _igvn.register_new_node_with_optimizer(len);
  2713 #endif
  2724 #endif
  2714   call->init_req(TypeFunc::Parms+2, len);
  2725   call->init_req(TypeFunc::Parms + cnt++, len);
  2715 #ifdef _LP64
  2726 #ifdef _LP64
  2716   call->init_req(TypeFunc::Parms+3, C->top());
  2727   call->init_req(TypeFunc::Parms + cnt++, C->top());
  2717 #endif
  2728 #endif
  2718   call->init_req( TypeFunc::Control, head->init_control());
  2729   call->init_req(TypeFunc::Control,   head->init_control());
  2719   call->init_req( TypeFunc::I_O    , C->top() )        ;   // does no i/o
  2730   call->init_req(TypeFunc::I_O,       C->top());       // Does no I/O.
  2720   call->init_req( TypeFunc::Memory ,  mem_phi->in(LoopNode::EntryControl) );
  2731   call->init_req(TypeFunc::Memory,    mem_phi->in(LoopNode::EntryControl));
  2721   call->init_req( TypeFunc::ReturnAdr, C->start()->proj_out(TypeFunc::ReturnAdr) );
  2732   call->init_req(TypeFunc::ReturnAdr, C->start()->proj_out(TypeFunc::ReturnAdr));
  2722   call->init_req( TypeFunc::FramePtr, C->start()->proj_out(TypeFunc::FramePtr) );
  2733   call->init_req(TypeFunc::FramePtr,  C->start()->proj_out(TypeFunc::FramePtr));
  2723   _igvn.register_new_node_with_optimizer(call);
  2734   _igvn.register_new_node_with_optimizer(call);
  2724   result_ctrl = new (C) ProjNode(call,TypeFunc::Control);
  2735   result_ctrl = new (C) ProjNode(call,TypeFunc::Control);
  2725   _igvn.register_new_node_with_optimizer(result_ctrl);
  2736   _igvn.register_new_node_with_optimizer(result_ctrl);
  2726   result_mem = new (C) ProjNode(call,TypeFunc::Memory);
  2737   result_mem = new (C) ProjNode(call,TypeFunc::Memory);
  2727   _igvn.register_new_node_with_optimizer(result_mem);
  2738   _igvn.register_new_node_with_optimizer(result_mem);