4499 JVMState* LibraryCallKit::arraycopy_restore_alloc_state(AllocateArrayNode* alloc, int& saved_reexecute_sp) { |
4499 JVMState* LibraryCallKit::arraycopy_restore_alloc_state(AllocateArrayNode* alloc, int& saved_reexecute_sp) { |
4500 if (alloc != NULL) { |
4500 if (alloc != NULL) { |
4501 ciMethod* trap_method = alloc->jvms()->method(); |
4501 ciMethod* trap_method = alloc->jvms()->method(); |
4502 int trap_bci = alloc->jvms()->bci(); |
4502 int trap_bci = alloc->jvms()->bci(); |
4503 |
4503 |
4504 if (!C->too_many_traps(trap_method, trap_bci, Deoptimization::Reason_intrinsic) & |
4504 if (!C->too_many_traps(trap_method, trap_bci, Deoptimization::Reason_intrinsic) && |
4505 !C->too_many_traps(trap_method, trap_bci, Deoptimization::Reason_null_check)) { |
4505 !C->too_many_traps(trap_method, trap_bci, Deoptimization::Reason_null_check)) { |
4506 // Make sure there's no store between the allocation and the |
4506 // Make sure there's no store between the allocation and the |
4507 // arraycopy otherwise visible side effects could be rexecuted |
4507 // arraycopy otherwise visible side effects could be rexecuted |
4508 // in case of deoptimization and cause incorrect execution. |
4508 // in case of deoptimization and cause incorrect execution. |
4509 bool no_interfering_store = true; |
4509 bool no_interfering_store = true; |
4510 Node* mem = alloc->in(TypeFunc::Memory); |
4510 Node* mem = alloc->in(TypeFunc::Memory); |