2229 , _known_holder(known_holder)
2230 {
2231 // The ProfileCall has side-effects and must occur precisely where located
2232 pin();
2233 }
2234
2235 ciMethod* method() { return _method; }
2236 int bci_of_invoke() { return _bci_of_invoke; }
2237 Value recv() { return _recv; }
2238 ciKlass* known_holder() { return _known_holder; }
2239
2240 virtual void input_values_do(ValueVisitor* f) { if (_recv != NULL) f->visit(&_recv); }
2241 };
2242
2243 // Use to trip invocation counter of an inlined method
2244
2245 LEAF(ProfileInvoke, Instruction)
2246 private:
2247 ciMethod* _inlinee;
2248 ValueStack* _state;
2249 int _bci_of_invoke;
2250
2251 public:
2252 ProfileInvoke(ciMethod* inlinee, ValueStack* state, int bci)
2253 : Instruction(voidType)
2254 , _inlinee(inlinee)
2255 , _bci_of_invoke(bci)
2256 , _state(state)
2257 {
2258 // The ProfileInvoke has side-effects and must occur precisely where located QQQ???
2259 pin();
2260 }
2261
2262 ciMethod* inlinee() { return _inlinee; }
2263 ValueStack* state() { return _state; }
2264 int bci_of_invoke() { return _bci_of_invoke; }
2265 virtual void input_values_do(ValueVisitor*) {}
2266 virtual void state_values_do(ValueVisitor*);
2267 };
2268
2269 class BlockPair: public CompilationResourceObj {
2270 private:
2271 BlockBegin* _from;
2272 BlockBegin* _to;
2273 public:
2274 BlockPair(BlockBegin* from, BlockBegin* to): _from(from), _to(to) {}
2275 BlockBegin* from() const { return _from; }
2276 BlockBegin* to() const { return _to; }
2277 bool is_same(BlockBegin* from, BlockBegin* to) const { return _from == from && _to == to; }
2278 bool is_same(BlockPair* p) const { return _from == p->from() && _to == p->to(); }
2279 void set_to(BlockBegin* b) { _to = b; }
2280 void set_from(BlockBegin* b) { _from = b; }
2281 };
2282
2283
2284 define_array(BlockPairArray, BlockPair*)
|
2229 , _known_holder(known_holder)
2230 {
2231 // The ProfileCall has side-effects and must occur precisely where located
2232 pin();
2233 }
2234
2235 ciMethod* method() { return _method; }
2236 int bci_of_invoke() { return _bci_of_invoke; }
2237 Value recv() { return _recv; }
2238 ciKlass* known_holder() { return _known_holder; }
2239
2240 virtual void input_values_do(ValueVisitor* f) { if (_recv != NULL) f->visit(&_recv); }
2241 };
2242
2243 // Use to trip invocation counter of an inlined method
2244
2245 LEAF(ProfileInvoke, Instruction)
2246 private:
2247 ciMethod* _inlinee;
2248 ValueStack* _state;
2249
2250 public:
2251 ProfileInvoke(ciMethod* inlinee, ValueStack* state)
2252 : Instruction(voidType)
2253 , _inlinee(inlinee)
2254 , _state(state)
2255 {
2256 // The ProfileInvoke has side-effects and must occur precisely where located QQQ???
2257 pin();
2258 }
2259
2260 ciMethod* inlinee() { return _inlinee; }
2261 ValueStack* state() { return _state; }
2262 virtual void input_values_do(ValueVisitor*) {}
2263 virtual void state_values_do(ValueVisitor*);
2264 };
2265
2266 class BlockPair: public CompilationResourceObj {
2267 private:
2268 BlockBegin* _from;
2269 BlockBegin* _to;
2270 public:
2271 BlockPair(BlockBegin* from, BlockBegin* to): _from(from), _to(to) {}
2272 BlockBegin* from() const { return _from; }
2273 BlockBegin* to() const { return _to; }
2274 bool is_same(BlockBegin* from, BlockBegin* to) const { return _from == from && _to == to; }
2275 bool is_same(BlockPair* p) const { return _from == p->from() && _to == p->to(); }
2276 void set_to(BlockBegin* b) { _to = b; }
2277 void set_from(BlockBegin* b) { _from = b; }
2278 };
2279
2280
2281 define_array(BlockPairArray, BlockPair*)
|