< prev index next >

src/hotspot/share/opto/macro.cpp

Print this page




2689   Node* ex_io = new Node(1);
2690   Node* res = new Node(1);
2691 
2692   Node* cast = transform_later(new CastP2XNode(ctl, res));
2693   Node* mask = MakeConX(0x1);
2694   Node* masked = transform_later(new AndXNode(cast, mask));
2695   Node* cmp = transform_later(new CmpXNode(masked, mask));
2696   Node* bol = transform_later(new BoolNode(cmp, BoolTest::eq));
2697   IfNode* allocation_iff = new IfNode(ctl, bol, PROB_MAX, COUNT_UNKNOWN);
2698   transform_later(allocation_iff);
2699   Node* allocation_ctl = transform_later(new IfTrueNode(allocation_iff));
2700   Node* no_allocation_ctl = transform_later(new IfFalseNode(allocation_iff));
2701 
2702   Node* no_allocation_res = transform_later(new CheckCastPPNode(no_allocation_ctl, res, TypeValueTypePtr::NOTNULL));
2703 
2704   Node* mask2 = MakeConX(-2);
2705   Node* masked2 = transform_later(new AndXNode(cast, mask2));
2706   Node* rawklassptr = transform_later(new CastX2PNode(masked2));
2707   Node* klass_node = transform_later(new CheckCastPPNode(allocation_ctl, rawklassptr, TypeKlassPtr::VALUE));
2708 
2709   Node* top_adr;
2710   Node* end_adr;
2711 
2712   Node* slowpath_bol = NULL;

2713   Node* old_top = NULL;
2714   Node* new_top = NULL;
2715   if (UseTLAB) {

2716     set_eden_pointers(top_adr, end_adr);
2717     Node* end = make_load(ctl, mem, end_adr, 0, TypeRawPtr::BOTTOM, T_ADDRESS);
2718     old_top = new LoadPNode(ctl, mem, top_adr, TypeRawPtr::BOTTOM, TypeRawPtr::BOTTOM, MemNode::unordered);
2719     transform_later(old_top);
2720     Node* layout_val = make_load(NULL, mem, klass_node, in_bytes(Klass::layout_helper_offset()), TypeInt::INT, T_INT);
2721     Node* size_in_bytes = ConvI2X(layout_val);
2722     new_top = new AddPNode(top(), old_top, size_in_bytes);
2723     transform_later(new_top);
2724     Node* slowpath_cmp = new CmpPNode(new_top, end);
2725     transform_later(slowpath_cmp);
2726     slowpath_bol = new BoolNode(slowpath_cmp, BoolTest::ge);
2727     transform_later(slowpath_bol);
2728   } else {
2729     slowpath_bol = intcon(1);

2730     old_top = top();
2731     new_top = top();
2732   }
2733   IfNode* slowpath_iff = new IfNode(allocation_ctl, slowpath_bol, PROB_UNLIKELY_MAG(4), COUNT_UNKNOWN);
2734   transform_later(slowpath_iff);
2735 
2736   Node* slowpath_true = new IfTrueNode(slowpath_iff);
2737   transform_later(slowpath_true);
2738 
2739 
2740   CallStaticJavaNode* slow_call = new CallStaticJavaNode(OptoRuntime::store_value_type_fields_Type(),
2741                                                          StubRoutines::store_value_type_fields_to_buf(),
2742                                                          "store_value_type_fields",
2743                                                          call->jvms()->bci(),
2744                                                          TypePtr::BOTTOM);
2745   slow_call->init_req(TypeFunc::Control, slowpath_true);
2746   slow_call->init_req(TypeFunc::Memory, mem);
2747   slow_call->init_req(TypeFunc::I_O, io);
2748   slow_call->init_req(TypeFunc::FramePtr, call->in(TypeFunc::FramePtr));
2749   slow_call->init_req(TypeFunc::ReturnAdr, call->in(TypeFunc::ReturnAdr));
2750   slow_call->init_req(TypeFunc::Parms, res);
2751 
2752   Node* slow_ctl = transform_later(new ProjNode(slow_call, TypeFunc::Control));
2753   Node* slow_mem = transform_later(new ProjNode(slow_call, TypeFunc::Memory));
2754   Node* slow_io = transform_later(new ProjNode(slow_call, TypeFunc::I_O));
2755   Node* slow_res = transform_later(new ProjNode(slow_call, TypeFunc::Parms));
2756   Node* slow_catc = transform_later(new CatchNode(slow_ctl, slow_io, 2));
2757   Node* slow_norm = transform_later(new CatchProjNode(slow_catc, CatchProjNode::fall_through_index, CatchProjNode::no_handler_bci));
2758   Node* slow_excp = transform_later(new CatchProjNode(slow_catc, CatchProjNode::catch_all_index,    CatchProjNode::no_handler_bci));




2689   Node* ex_io = new Node(1);
2690   Node* res = new Node(1);
2691 
2692   Node* cast = transform_later(new CastP2XNode(ctl, res));
2693   Node* mask = MakeConX(0x1);
2694   Node* masked = transform_later(new AndXNode(cast, mask));
2695   Node* cmp = transform_later(new CmpXNode(masked, mask));
2696   Node* bol = transform_later(new BoolNode(cmp, BoolTest::eq));
2697   IfNode* allocation_iff = new IfNode(ctl, bol, PROB_MAX, COUNT_UNKNOWN);
2698   transform_later(allocation_iff);
2699   Node* allocation_ctl = transform_later(new IfTrueNode(allocation_iff));
2700   Node* no_allocation_ctl = transform_later(new IfFalseNode(allocation_iff));
2701 
2702   Node* no_allocation_res = transform_later(new CheckCastPPNode(no_allocation_ctl, res, TypeValueTypePtr::NOTNULL));
2703 
2704   Node* mask2 = MakeConX(-2);
2705   Node* masked2 = transform_later(new AndXNode(cast, mask2));
2706   Node* rawklassptr = transform_later(new CastX2PNode(masked2));
2707   Node* klass_node = transform_later(new CheckCastPPNode(allocation_ctl, rawklassptr, TypeKlassPtr::VALUE));
2708 



2709   Node* slowpath_bol = NULL;
2710   Node* top_adr = NULL;
2711   Node* old_top = NULL;
2712   Node* new_top = NULL;
2713   if (UseTLAB) {
2714     Node* end_adr = NULL;
2715     set_eden_pointers(top_adr, end_adr);
2716     Node* end = make_load(ctl, mem, end_adr, 0, TypeRawPtr::BOTTOM, T_ADDRESS);
2717     old_top = new LoadPNode(ctl, mem, top_adr, TypeRawPtr::BOTTOM, TypeRawPtr::BOTTOM, MemNode::unordered);
2718     transform_later(old_top);
2719     Node* layout_val = make_load(NULL, mem, klass_node, in_bytes(Klass::layout_helper_offset()), TypeInt::INT, T_INT);
2720     Node* size_in_bytes = ConvI2X(layout_val);
2721     new_top = new AddPNode(top(), old_top, size_in_bytes);
2722     transform_later(new_top);
2723     Node* slowpath_cmp = new CmpPNode(new_top, end);
2724     transform_later(slowpath_cmp);
2725     slowpath_bol = new BoolNode(slowpath_cmp, BoolTest::ge);
2726     transform_later(slowpath_bol);
2727   } else {
2728     slowpath_bol = intcon(1);
2729     top_adr = top();
2730     old_top = top();
2731     new_top = top();
2732   }
2733   IfNode* slowpath_iff = new IfNode(allocation_ctl, slowpath_bol, PROB_UNLIKELY_MAG(4), COUNT_UNKNOWN);
2734   transform_later(slowpath_iff);
2735 
2736   Node* slowpath_true = new IfTrueNode(slowpath_iff);
2737   transform_later(slowpath_true);

2738 
2739   CallStaticJavaNode* slow_call = new CallStaticJavaNode(OptoRuntime::store_value_type_fields_Type(),
2740                                                          StubRoutines::store_value_type_fields_to_buf(),
2741                                                          "store_value_type_fields",
2742                                                          call->jvms()->bci(),
2743                                                          TypePtr::BOTTOM);
2744   slow_call->init_req(TypeFunc::Control, slowpath_true);
2745   slow_call->init_req(TypeFunc::Memory, mem);
2746   slow_call->init_req(TypeFunc::I_O, io);
2747   slow_call->init_req(TypeFunc::FramePtr, call->in(TypeFunc::FramePtr));
2748   slow_call->init_req(TypeFunc::ReturnAdr, call->in(TypeFunc::ReturnAdr));
2749   slow_call->init_req(TypeFunc::Parms, res);
2750 
2751   Node* slow_ctl = transform_later(new ProjNode(slow_call, TypeFunc::Control));
2752   Node* slow_mem = transform_later(new ProjNode(slow_call, TypeFunc::Memory));
2753   Node* slow_io = transform_later(new ProjNode(slow_call, TypeFunc::I_O));
2754   Node* slow_res = transform_later(new ProjNode(slow_call, TypeFunc::Parms));
2755   Node* slow_catc = transform_later(new CatchNode(slow_ctl, slow_io, 2));
2756   Node* slow_norm = transform_later(new CatchProjNode(slow_catc, CatchProjNode::fall_through_index, CatchProjNode::no_handler_bci));
2757   Node* slow_excp = transform_later(new CatchProjNode(slow_catc, CatchProjNode::catch_all_index,    CatchProjNode::no_handler_bci));


< prev index next >