Mercurial > hg > truffle
comparison src/share/vm/opto/idealKit.hpp @ 851:fc4be448891f
6851742: (EA) allocation elimination doesn't work with UseG1GC
Summary: Fix eliminate_card_mark() to eliminate G1 pre/post barriers.
Reviewed-by: never
author | kvn |
---|---|
date | Thu, 16 Jul 2009 14:10:42 -0700 |
parents | a61af66fc99e |
children | 89e0543e1737 685e959d09ea |
comparison
equal
deleted
inserted
replaced
850:fd50a67f97d1 | 851:fc4be448891f |
---|---|
47 // increment(variable, value) - increment variable by value | 47 // increment(variable, value) - increment variable by value |
48 // simple operations: AddI, SubI, AndI, LShiftI, etc. | 48 // simple operations: AddI, SubI, AndI, LShiftI, etc. |
49 // Example: | 49 // Example: |
50 // Node* limit = ?? | 50 // Node* limit = ?? |
51 // IdealVariable i(kit), j(kit); | 51 // IdealVariable i(kit), j(kit); |
52 // declares_done(); | 52 // declarations_done(); |
53 // Node* exit = make_label(1); // 1 goto | 53 // Node* exit = make_label(1); // 1 goto |
54 // set(j, ConI(0)); | 54 // set(j, ConI(0)); |
55 // loop(i, ConI(0), BoolTest::lt, limit); { | 55 // loop(i, ConI(0), BoolTest::lt, limit); { |
56 // if_then(value(i), BoolTest::gt, ConI(5)) { | 56 // if_then(value(i), BoolTest::gt, ConI(5)) { |
57 // set(j, ConI(1)); | 57 // set(j, ConI(1)); |
99 PhaseGVN& gvn() const { return _gvn; } | 99 PhaseGVN& gvn() const { return _gvn; } |
100 // Create a new cvstate filled with nulls | 100 // Create a new cvstate filled with nulls |
101 Node* new_cvstate(); // Create a new cvstate | 101 Node* new_cvstate(); // Create a new cvstate |
102 Node* cvstate() { return _cvstate; } // current cvstate | 102 Node* cvstate() { return _cvstate; } // current cvstate |
103 Node* copy_cvstate(); // copy current cvstate | 103 Node* copy_cvstate(); // copy current cvstate |
104 void set_ctrl(Node* ctrl) { _cvstate->set_req(TypeFunc::Control, ctrl); } | 104 |
105 | |
106 // Should this assert this is a MergeMem??? | |
107 void set_all_memory(Node* mem){ _cvstate->set_req(TypeFunc::Memory, mem); } | |
108 void set_memory(Node* mem, uint alias_idx ); | 105 void set_memory(Node* mem, uint alias_idx ); |
109 void do_memory_merge(Node* merging, Node* join); | 106 void do_memory_merge(Node* merging, Node* join); |
110 void clear(Node* m); // clear a cvstate | 107 void clear(Node* m); // clear a cvstate |
111 void stop() { clear(_cvstate); } // clear current cvstate | 108 void stop() { clear(_cvstate); } // clear current cvstate |
112 Node* delay_transform(Node* n); | 109 Node* delay_transform(Node* n); |
130 | 127 |
131 // Users should not care about slices only MergedMem so no access for them. | 128 // Users should not care about slices only MergedMem so no access for them. |
132 Node* memory(uint alias_idx); | 129 Node* memory(uint alias_idx); |
133 | 130 |
134 public: | 131 public: |
135 IdealKit(PhaseGVN &gvn, Node* control, Node* memory, bool delay_all_transforms = false); | 132 IdealKit(PhaseGVN &gvn, Node* control, Node* memory, bool delay_all_transforms = false, bool has_declarations = false); |
136 ~IdealKit() { | 133 ~IdealKit() { |
137 stop(); | 134 stop(); |
138 drain_delay_transform(); | 135 drain_delay_transform(); |
139 } | 136 } |
140 // Control | 137 // Control |
141 Node* ctrl() { return _cvstate->in(TypeFunc::Control); } | 138 Node* ctrl() { return _cvstate->in(TypeFunc::Control); } |
139 void set_ctrl(Node* ctrl) { _cvstate->set_req(TypeFunc::Control, ctrl); } | |
142 Node* top() { return C->top(); } | 140 Node* top() { return C->top(); } |
143 MergeMemNode* merged_memory() { return _cvstate->in(TypeFunc::Memory)->as_MergeMem(); } | 141 MergeMemNode* merged_memory() { return _cvstate->in(TypeFunc::Memory)->as_MergeMem(); } |
142 void set_all_memory(Node* mem) { _cvstate->set_req(TypeFunc::Memory, mem); } | |
144 void set(IdealVariable& v, Node* rhs) { _cvstate->set_req(first_var + v.id(), rhs); } | 143 void set(IdealVariable& v, Node* rhs) { _cvstate->set_req(first_var + v.id(), rhs); } |
145 Node* value(IdealVariable& v) { return _cvstate->in(first_var + v.id()); } | 144 Node* value(IdealVariable& v) { return _cvstate->in(first_var + v.id()); } |
146 void dead(IdealVariable& v) { set(v, (Node*)NULL); } | 145 void dead(IdealVariable& v) { set(v, (Node*)NULL); } |
147 void if_then(Node* left, BoolTest::mask relop, Node* right, | 146 void if_then(Node* left, BoolTest::mask relop, Node* right, |
148 float prob = PROB_FAIR, float cnt = COUNT_UNKNOWN, | 147 float prob = PROB_FAIR, float cnt = COUNT_UNKNOWN, |
153 float prob = PROB_LIKELY(0.9), float cnt = COUNT_UNKNOWN); | 152 float prob = PROB_LIKELY(0.9), float cnt = COUNT_UNKNOWN); |
154 void end_loop(); | 153 void end_loop(); |
155 Node* make_label(int goto_ct); | 154 Node* make_label(int goto_ct); |
156 void bind(Node* lab); | 155 void bind(Node* lab); |
157 void goto_(Node* lab, bool bind = false); | 156 void goto_(Node* lab, bool bind = false); |
158 void declares_done(); | 157 void declarations_done(); |
159 void drain_delay_transform(); | 158 void drain_delay_transform(); |
160 | 159 |
161 Node* IfTrue(IfNode* iff) { return transform(new (C,1) IfTrueNode(iff)); } | 160 Node* IfTrue(IfNode* iff) { return transform(new (C,1) IfTrueNode(iff)); } |
162 Node* IfFalse(IfNode* iff) { return transform(new (C,1) IfFalseNode(iff)); } | 161 Node* IfFalse(IfNode* iff) { return transform(new (C,1) IfFalseNode(iff)); } |
163 | 162 |