< prev index next >

src/hotspot/share/opto/valuetypenode.cpp

Print this page




 895 
 896   // Process users
 897   for (DUIterator_Fast imax, i = fast_outs(imax); i < imax; i++) {
 898     Node* out = fast_out(i);
 899     if (out->isa_ValueType() != NULL) {
 900       // Recursively process value type users
 901       out->as_ValueType()->remove_redundant_allocations(igvn, phase);
 902     } else if (out->isa_Allocate() != NULL) {
 903       // Allocate users should be linked
 904       assert(out->in(AllocateNode::ValueNode) == this, "should be linked");
 905     } else {
 906 #ifdef ASSERT
 907       // The value type should not have any other users at this time
 908       out->dump();
 909       assert(false, "unexpected user of value type");
 910 #endif
 911     }
 912   }
 913 }
 914 
 915 ValueTypePtrNode* ValueTypePtrNode::make_from_value_type(PhaseGVN& gvn, ValueTypeNode* vt) {
 916   ValueTypePtrNode* vtptr = new ValueTypePtrNode(vt->value_klass(), vt->get_oop());

 917   for (uint i = Oop+1; i < vt->req(); i++) {
 918     vtptr->init_req(i, vt->in(i));
 919   }
 920   return gvn.transform(vtptr)->as_ValueTypePtr();
 921 }
 922 
 923 ValueTypePtrNode* ValueTypePtrNode::make_from_call(GraphKit* kit, ciValueKlass* vk, CallNode* call) {
 924   ValueTypePtrNode* vtptr = new ValueTypePtrNode(vk, kit->zerocon(T_VALUETYPE));
 925   vtptr->initialize(kit, call, vk);
 926   return vtptr;
 927 }
 928 
 929 ValueTypePtrNode* ValueTypePtrNode::make_from_oop(GraphKit* kit, Node* oop) {
 930   // Create and initialize a ValueTypePtrNode by loading all field
 931   // values from a heap-allocated version and also save the oop.
 932   ciValueKlass* vk = kit->gvn().type(oop)->value_klass();
 933   ValueTypePtrNode* vtptr = new ValueTypePtrNode(vk, oop);
 934   vtptr->load(kit, oop, oop, vk);
 935   return vtptr;
 936 }


 895 
 896   // Process users
 897   for (DUIterator_Fast imax, i = fast_outs(imax); i < imax; i++) {
 898     Node* out = fast_out(i);
 899     if (out->isa_ValueType() != NULL) {
 900       // Recursively process value type users
 901       out->as_ValueType()->remove_redundant_allocations(igvn, phase);
 902     } else if (out->isa_Allocate() != NULL) {
 903       // Allocate users should be linked
 904       assert(out->in(AllocateNode::ValueNode) == this, "should be linked");
 905     } else {
 906 #ifdef ASSERT
 907       // The value type should not have any other users at this time
 908       out->dump();
 909       assert(false, "unexpected user of value type");
 910 #endif
 911     }
 912   }
 913 }
 914 
 915 ValueTypePtrNode* ValueTypePtrNode::make_from_value_type(GraphKit* kit, ValueTypeNode* vt, bool deoptimize_on_exception) {
 916   Node* oop = vt->allocate(kit, deoptimize_on_exception)->get_oop();
 917   ValueTypePtrNode* vtptr = new ValueTypePtrNode(vt->value_klass(), oop);
 918   for (uint i = Oop+1; i < vt->req(); i++) {
 919     vtptr->init_req(i, vt->in(i));
 920   }
 921   return kit->gvn().transform(vtptr)->as_ValueTypePtr();
 922 }
 923 
 924 ValueTypePtrNode* ValueTypePtrNode::make_from_call(GraphKit* kit, ciValueKlass* vk, CallNode* call) {
 925   ValueTypePtrNode* vtptr = new ValueTypePtrNode(vk, kit->zerocon(T_VALUETYPE));
 926   vtptr->initialize(kit, call, vk);
 927   return vtptr;
 928 }
 929 
 930 ValueTypePtrNode* ValueTypePtrNode::make_from_oop(GraphKit* kit, Node* oop) {
 931   // Create and initialize a ValueTypePtrNode by loading all field
 932   // values from a heap-allocated version and also save the oop.
 933   ciValueKlass* vk = kit->gvn().type(oop)->value_klass();
 934   ValueTypePtrNode* vtptr = new ValueTypePtrNode(vk, oop);
 935   vtptr->load(kit, oop, oop, vk);
 936   return kit->gvn().transform(vtptr)->as_ValueTypePtr();
 937 }
< prev index next >