comparison src/share/vm/opto/graphKit.cpp @ 565:7fe62bb75bf4

6799693: Server compiler leads to data corruption when expression throws an Exception Summary: Use merged memory state for an allocation's slow path. Reviewed-by: never
author kvn
date Thu, 05 Feb 2009 14:43:58 -0800
parents 1b9fc6e3171b
children dca06e7f503d
comparison
equal deleted inserted replaced
564:323728917cf4 565:7fe62bb75bf4
2940 if (!tklass) tklass = TypeKlassPtr::OBJECT; 2940 if (!tklass) tklass = TypeKlassPtr::OBJECT;
2941 const TypeOopPtr* oop_type = tklass->as_instance_type(); 2941 const TypeOopPtr* oop_type = tklass->as_instance_type();
2942 2942
2943 // Now generate allocation code 2943 // Now generate allocation code
2944 2944
2945 // With escape analysis, the entire memory state is needed to be able to 2945 // The entire memory state is needed for slow path of the allocation
2946 // eliminate the allocation. If the allocations cannot be eliminated, this 2946 // since GC and deoptimization can happened.
2947 // will be optimized to the raw slice when the allocation is expanded. 2947 Node *mem = reset_memory();
2948 Node *mem; 2948 set_all_memory(mem); // Create new memory state
2949 if (C->do_escape_analysis()) {
2950 mem = reset_memory();
2951 set_all_memory(mem);
2952 } else {
2953 mem = memory(Compile::AliasIdxRaw);
2954 }
2955 2949
2956 AllocateNode* alloc 2950 AllocateNode* alloc
2957 = new (C, AllocateNode::ParmLimit) 2951 = new (C, AllocateNode::ParmLimit)
2958 AllocateNode(C, AllocateNode::alloc_type(), 2952 AllocateNode(C, AllocateNode::alloc_type(),
2959 control(), mem, i_o(), 2953 control(), mem, i_o(),
3086 (*return_size_val) = size; 3080 (*return_size_val) = size;
3087 } 3081 }
3088 3082
3089 // Now generate allocation code 3083 // Now generate allocation code
3090 3084
3091 // With escape analysis, the entire memory state is needed to be able to 3085 // The entire memory state is needed for slow path of the allocation
3092 // eliminate the allocation. If the allocations cannot be eliminated, this 3086 // since GC and deoptimization can happened.
3093 // will be optimized to the raw slice when the allocation is expanded. 3087 Node *mem = reset_memory();
3094 Node *mem; 3088 set_all_memory(mem); // Create new memory state
3095 if (C->do_escape_analysis()) {
3096 mem = reset_memory();
3097 set_all_memory(mem);
3098 } else {
3099 mem = memory(Compile::AliasIdxRaw);
3100 }
3101 3089
3102 // Create the AllocateArrayNode and its result projections 3090 // Create the AllocateArrayNode and its result projections
3103 AllocateArrayNode* alloc 3091 AllocateArrayNode* alloc
3104 = new (C, AllocateArrayNode::ParmLimit) 3092 = new (C, AllocateArrayNode::ParmLimit)
3105 AllocateArrayNode(C, AllocateArrayNode::alloc_type(), 3093 AllocateArrayNode(C, AllocateArrayNode::alloc_type(),