1395 // Allocation node is first parameter in its initializer |
1395 // Allocation node is first parameter in its initializer |
1396 if (analyzer->is_arg_stack(0) || analyzer->is_arg_local(0)) { |
1396 if (analyzer->is_arg_stack(0) || analyzer->is_arg_local(0)) { |
1397 _is_allocation_MemBar_redundant = true; |
1397 _is_allocation_MemBar_redundant = true; |
1398 } |
1398 } |
1399 } |
1399 } |
|
1400 Node *AllocateNode::make_ideal_mark(PhaseGVN *phase, Node* obj, Node* control, Node* mem) { |
|
1401 Node* mark_node = NULL; |
|
1402 // For now only enable fast locking for non-array types |
|
1403 if (UseBiasedLocking && Opcode() == Op_Allocate) { |
|
1404 Node* klass_node = in(AllocateNode::KlassNode); |
|
1405 Node* proto_adr = phase->transform(new AddPNode(klass_node, klass_node, phase->MakeConX(in_bytes(Klass::prototype_header_offset())))); |
|
1406 mark_node = LoadNode::make(*phase, control, mem, proto_adr, TypeRawPtr::BOTTOM, TypeX_X, TypeX_X->basic_type(), MemNode::unordered); |
|
1407 } else { |
|
1408 mark_node = phase->MakeConX(markWord::prototype().value()); |
|
1409 } |
|
1410 return mark_node; |
|
1411 } |
1400 |
1412 |
1401 //============================================================================= |
1413 //============================================================================= |
1402 Node* AllocateArrayNode::Ideal(PhaseGVN *phase, bool can_reshape) { |
1414 Node* AllocateArrayNode::Ideal(PhaseGVN *phase, bool can_reshape) { |
1403 if (remove_dead_region(phase, can_reshape)) return this; |
1415 if (remove_dead_region(phase, can_reshape)) return this; |
1404 // Don't bother trying to transform a dead node |
1416 // Don't bother trying to transform a dead node |