25 #ifndef SHARE_VM_OPTO_MACRO_HPP
26 #define SHARE_VM_OPTO_MACRO_HPP
27
28 #include "opto/phase.hpp"
29
30 class AllocateNode;
31 class AllocateArrayNode;
32 class CallNode;
33 class Node;
34 class PhaseIterGVN;
35
36 class PhaseMacroExpand : public Phase {
37 private:
38 PhaseIterGVN &_igvn;
39
40 // Helper methods roughly modeled after GraphKit:
41 Node* top() const { return C->top(); }
42 Node* intcon(jint con) const { return _igvn.intcon(con); }
43 Node* longcon(jlong con) const { return _igvn.longcon(con); }
44 Node* makecon(const Type *t) const { return _igvn.makecon(t); }
45 Node* basic_plus_adr(Node* base, int offset) {
46 return (offset == 0)? base: basic_plus_adr(base, MakeConX(offset));
47 }
48 Node* basic_plus_adr(Node* base, Node* ptr, int offset) {
49 return (offset == 0)? ptr: basic_plus_adr(base, ptr, MakeConX(offset));
50 }
51 Node* basic_plus_adr(Node* base, Node* offset) {
52 return basic_plus_adr(base, base, offset);
53 }
54 Node* basic_plus_adr(Node* base, Node* ptr, Node* offset) {
55 Node* adr = new AddPNode(base, ptr, offset);
56 return transform_later(adr);
57 }
58 Node* transform_later(Node* n) {
59 // equivalent to _gvn.transform in GraphKit, Ideal, etc.
60 _igvn.register_new_node_with_optimizer(n);
61 return n;
62 }
63 void set_eden_pointers(Node* &eden_top_adr, Node* &eden_end_adr);
64 Node* make_load( Node* ctl, Node* mem, Node* base, int offset,
|
25 #ifndef SHARE_VM_OPTO_MACRO_HPP
26 #define SHARE_VM_OPTO_MACRO_HPP
27
28 #include "opto/phase.hpp"
29
30 class AllocateNode;
31 class AllocateArrayNode;
32 class CallNode;
33 class Node;
34 class PhaseIterGVN;
35
36 class PhaseMacroExpand : public Phase {
37 private:
38 PhaseIterGVN &_igvn;
39
40 // Helper methods roughly modeled after GraphKit:
41 Node* top() const { return C->top(); }
42 Node* intcon(jint con) const { return _igvn.intcon(con); }
43 Node* longcon(jlong con) const { return _igvn.longcon(con); }
44 Node* makecon(const Type *t) const { return _igvn.makecon(t); }
45
46 Node* basic_plus_adr(Node* base, int offset) {
47 return (offset == 0)? base: basic_plus_adr(base, MakeConX(offset));
48 }
49 Node* basic_plus_adr(Node* base, Node* ptr, int offset) {
50 return (offset == 0)? ptr: basic_plus_adr(base, ptr, MakeConX(offset));
51 }
52 Node* basic_plus_adr(Node* base, Node* offset) {
53 return basic_plus_adr(base, base, offset);
54 }
55 Node* basic_plus_adr(Node* base, Node* ptr, Node* offset) {
56 Node* adr = new AddPNode(base, ptr, offset);
57 return transform_later(adr);
58 }
59 Node* transform_later(Node* n) {
60 // equivalent to _gvn.transform in GraphKit, Ideal, etc.
61 _igvn.register_new_node_with_optimizer(n);
62 return n;
63 }
64 void set_eden_pointers(Node* &eden_top_adr, Node* &eden_end_adr);
65 Node* make_load( Node* ctl, Node* mem, Node* base, int offset,
|