src/share/vm/opto/graphKit.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/opto/graphKit.cpp Wed Feb 4 21:22:05 2009
--- new/src/share/vm/opto/graphKit.cpp Wed Feb 4 21:22:05 2009
*** 2943,2962 ****
--- 2943,2956 ----
if (!tklass) tklass = TypeKlassPtr::OBJECT;
const TypeOopPtr* oop_type = tklass->as_instance_type();
// Now generate allocation code
// With escape analysis, the entire memory state is needed to be able to
// eliminate the allocation. If the allocations cannot be eliminated, this
// will be optimized to the raw slice when the allocation is expanded.
Node *mem;
if (C->do_escape_analysis()) {
mem = reset_memory();
set_all_memory(mem);
} else {
mem = memory(Compile::AliasIdxRaw);
}
+ // The entire memory state is needed for slow path of the allocation
+ // since GC and deoptimization can happened.
+ Node *mem = reset_memory();
+ set_all_memory(mem); // Create new memory state
AllocateNode* alloc
= new (C, AllocateNode::ParmLimit)
AllocateNode(C, AllocateNode::alloc_type(),
control(), mem, i_o(),
*** 3089,3108 ****
--- 3083,3096 ----
(*return_size_val) = size;
}
// Now generate allocation code
// With escape analysis, the entire memory state is needed to be able to
// eliminate the allocation. If the allocations cannot be eliminated, this
// will be optimized to the raw slice when the allocation is expanded.
Node *mem;
if (C->do_escape_analysis()) {
mem = reset_memory();
set_all_memory(mem);
} else {
mem = memory(Compile::AliasIdxRaw);
}
+ // The entire memory state is needed for slow path of the allocation
+ // since GC and deoptimization can happened.
+ Node *mem = reset_memory();
+ set_all_memory(mem); // Create new memory state
// Create the AllocateArrayNode and its result projections
AllocateArrayNode* alloc
= new (C, AllocateArrayNode::ParmLimit)
AllocateArrayNode(C, AllocateArrayNode::alloc_type(),
src/share/vm/opto/graphKit.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File