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)); |