Mercurial > hg > graal-jvmci-8
comparison src/share/vm/opto/memnode.cpp @ 6795:7eca5de9e0b6
7023898: Intrinsify AtomicLongFieldUpdater.getAndIncrement()
Summary: use shorter instruction sequences for atomic add and atomic exchange when possible.
Reviewed-by: kvn, jrose
author | roland |
---|---|
date | Thu, 20 Sep 2012 16:49:17 +0200 |
parents | da91efe96a93 |
children | e626685e9f6c |
comparison
equal
deleted
inserted
replaced
6794:8ae8f9dd7099 | 6795:7eca5de9e0b6 |
---|---|
2550 { | 2550 { |
2551 return bottom_type(); | 2551 return bottom_type(); |
2552 } | 2552 } |
2553 | 2553 |
2554 //============================================================================= | 2554 //============================================================================= |
2555 LoadStoreNode::LoadStoreNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex ) : Node(5) { | 2555 //----------------------------------LoadStoreNode------------------------------ |
2556 LoadStoreNode::LoadStoreNode( Node *c, Node *mem, Node *adr, Node *val, const TypePtr* at, const Type* rt, uint required ) | |
2557 : Node(required), | |
2558 _type(rt), | |
2559 _adr_type(at) | |
2560 { | |
2556 init_req(MemNode::Control, c ); | 2561 init_req(MemNode::Control, c ); |
2557 init_req(MemNode::Memory , mem); | 2562 init_req(MemNode::Memory , mem); |
2558 init_req(MemNode::Address, adr); | 2563 init_req(MemNode::Address, adr); |
2559 init_req(MemNode::ValueIn, val); | 2564 init_req(MemNode::ValueIn, val); |
2560 init_req( ExpectedIn, ex ); | |
2561 init_class_id(Class_LoadStore); | 2565 init_class_id(Class_LoadStore); |
2562 | 2566 } |
2567 | |
2568 uint LoadStoreNode::ideal_reg() const { | |
2569 return _type->ideal_reg(); | |
2570 } | |
2571 | |
2572 bool LoadStoreNode::result_not_used() const { | |
2573 for( DUIterator_Fast imax, i = fast_outs(imax); i < imax; i++ ) { | |
2574 Node *x = fast_out(i); | |
2575 if (x->Opcode() == Op_SCMemProj) continue; | |
2576 return false; | |
2577 } | |
2578 return true; | |
2579 } | |
2580 | |
2581 uint LoadStoreNode::size_of() const { return sizeof(*this); } | |
2582 | |
2583 //============================================================================= | |
2584 //----------------------------------LoadStoreConditionalNode-------------------- | |
2585 LoadStoreConditionalNode::LoadStoreConditionalNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex ) : LoadStoreNode(c, mem, adr, val, NULL, TypeInt::BOOL, 5) { | |
2586 init_req(ExpectedIn, ex ); | |
2563 } | 2587 } |
2564 | 2588 |
2565 //============================================================================= | 2589 //============================================================================= |
2566 //-------------------------------adr_type-------------------------------------- | 2590 //-------------------------------adr_type-------------------------------------- |
2567 // Do we Match on this edge index or not? Do not match memory | 2591 // Do we Match on this edge index or not? Do not match memory |