58 protected: |
59 protected: |
59 ciEnv* _env; // Compilation environment |
60 ciEnv* _env; // Compilation environment |
60 PhaseGVN &_gvn; // Some optimizations while parsing |
61 PhaseGVN &_gvn; // Some optimizations while parsing |
61 SafePointNode* _map; // Parser map from JVM to Nodes |
62 SafePointNode* _map; // Parser map from JVM to Nodes |
62 SafePointNode* _exceptions;// Parser map(s) for exception state(s) |
63 SafePointNode* _exceptions;// Parser map(s) for exception state(s) |
63 int _sp; // JVM Expression Stack Pointer |
|
64 int _bci; // JVM Bytecode Pointer |
64 int _bci; // JVM Bytecode Pointer |
65 ciMethod* _method; // JVM Current Method |
65 ciMethod* _method; // JVM Current Method |
|
66 |
|
67 private: |
|
68 int _sp; // JVM Expression Stack Pointer; don't modify directly! |
66 |
69 |
67 private: |
70 private: |
68 SafePointNode* map_not_null() const { |
71 SafePointNode* map_not_null() const { |
69 assert(_map != NULL, "must call stopped() to test for reset compiler map"); |
72 assert(_map != NULL, "must call stopped() to test for reset compiler map"); |
70 return _map; |
73 return _map; |
139 assert(jvms == this->jvms(), "sanity"); |
143 assert(jvms == this->jvms(), "sanity"); |
140 _sp = jvms->sp(); |
144 _sp = jvms->sp(); |
141 _bci = jvms->bci(); |
145 _bci = jvms->bci(); |
142 _method = jvms->has_method() ? jvms->method() : NULL; } |
146 _method = jvms->has_method() ? jvms->method() : NULL; } |
143 void set_map(SafePointNode* m) { _map = m; debug_only(verify_map()); } |
147 void set_map(SafePointNode* m) { _map = m; debug_only(verify_map()); } |
144 void set_sp(int i) { assert(i >= 0, "must be non-negative"); _sp = i; } |
148 void set_sp(int sp) { assert(sp >= 0, err_msg_res("sp must be non-negative: %d", sp)); _sp = sp; } |
145 void clean_stack(int from_sp); // clear garbage beyond from_sp to top |
149 void clean_stack(int from_sp); // clear garbage beyond from_sp to top |
146 |
150 |
147 void inc_sp(int i) { set_sp(sp() + i); } |
151 void inc_sp(int i) { set_sp(sp() + i); } |
148 void dec_sp(int i) { set_sp(sp() - i); } |
152 void dec_sp(int i) { set_sp(sp() - i); } |
149 void set_bci(int bci) { _bci = bci; } |
153 void set_bci(int bci) { _bci = bci; } |
150 |
154 |
151 // Make sure jvms has current bci & sp. |
155 // Make sure jvms has current bci & sp. |
152 JVMState* sync_jvms() const; |
156 JVMState* sync_jvms() const; |
|
157 JVMState* sync_jvms_for_reexecute(); |
|
158 |
153 #ifdef ASSERT |
159 #ifdef ASSERT |
154 // Make sure JVMS has an updated copy of bci and sp. |
160 // Make sure JVMS has an updated copy of bci and sp. |
155 // Also sanity-check method, depth, and monitor depth. |
161 // Also sanity-check method, depth, and monitor depth. |
156 bool jvms_in_sync() const; |
162 bool jvms_in_sync() const; |
157 |
163 |
284 bool must_throw = false); |
290 bool must_throw = false); |
285 |
291 |
286 // How many stack inputs does the current BC consume? |
292 // How many stack inputs does the current BC consume? |
287 // And, how does the stack change after the bytecode? |
293 // And, how does the stack change after the bytecode? |
288 // Returns false if unknown. |
294 // Returns false if unknown. |
289 bool compute_stack_effects(int& inputs, int& depth, bool for_parse = false); |
295 bool compute_stack_effects(int& inputs, int& depth); |
290 |
296 |
291 // Add a fixed offset to a pointer |
297 // Add a fixed offset to a pointer |
292 Node* basic_plus_adr(Node* base, Node* ptr, intptr_t offset) { |
298 Node* basic_plus_adr(Node* base, Node* ptr, intptr_t offset) { |
293 return basic_plus_adr(base, ptr, MakeConX(offset)); |
299 return basic_plus_adr(base, ptr, MakeConX(offset)); |
294 } |
300 } |
335 Node* ConvL2I(Node* offset); |
341 Node* ConvL2I(Node* offset); |
336 // Find out the klass of an object. |
342 // Find out the klass of an object. |
337 Node* load_object_klass(Node* object); |
343 Node* load_object_klass(Node* object); |
338 // Find out the length of an array. |
344 // Find out the length of an array. |
339 Node* load_array_length(Node* array); |
345 Node* load_array_length(Node* array); |
|
346 |
|
347 |
340 // Helper function to do a NULL pointer check or ZERO check based on type. |
348 // Helper function to do a NULL pointer check or ZERO check based on type. |
341 Node* null_check_common(Node* value, BasicType type, |
|
342 bool assert_null, Node* *null_control); |
|
343 // Throw an exception if a given value is null. |
349 // Throw an exception if a given value is null. |
344 // Return the value cast to not-null. |
350 // Return the value cast to not-null. |
345 // Be clever about equivalent dominating null checks. |
351 // Be clever about equivalent dominating null checks. |
346 Node* do_null_check(Node* value, BasicType type) { |
352 Node* null_check_common(Node* value, BasicType type, |
347 return null_check_common(value, type, false, NULL); |
353 bool assert_null = false, Node* *null_control = NULL); |
|
354 Node* null_check(Node* value, BasicType type = T_OBJECT) { |
|
355 return null_check_common(value, type); |
|
356 } |
|
357 Node* null_check_receiver() { |
|
358 assert(argument(0)->bottom_type()->isa_ptr(), "must be"); |
|
359 return null_check(argument(0)); |
|
360 } |
|
361 Node* zero_check_int(Node* value) { |
|
362 assert(value->bottom_type()->basic_type() == T_INT, |
|
363 err_msg_res("wrong type: %s", type2name(value->bottom_type()->basic_type()))); |
|
364 return null_check_common(value, T_INT); |
|
365 } |
|
366 Node* zero_check_long(Node* value) { |
|
367 assert(value->bottom_type()->basic_type() == T_LONG, |
|
368 err_msg_res("wrong type: %s", type2name(value->bottom_type()->basic_type()))); |
|
369 return null_check_common(value, T_LONG); |
348 } |
370 } |
349 // Throw an uncommon trap if a given value is __not__ null. |
371 // Throw an uncommon trap if a given value is __not__ null. |
350 // Return the value cast to null, and be clever about dominating checks. |
372 // Return the value cast to null, and be clever about dominating checks. |
351 Node* do_null_assert(Node* value, BasicType type) { |
373 Node* null_assert(Node* value, BasicType type = T_OBJECT) { |
352 return null_check_common(value, type, true, NULL); |
374 return null_check_common(value, type, true); |
353 } |
375 } |
|
376 |
354 // Null check oop. Return null-path control into (*null_control). |
377 // Null check oop. Return null-path control into (*null_control). |
355 // Return a cast-not-null node which depends on the not-null control. |
378 // Return a cast-not-null node which depends on the not-null control. |
356 // If never_see_null, use an uncommon trap (*null_control sees a top). |
379 // If never_see_null, use an uncommon trap (*null_control sees a top). |
357 // The cast is not valid along the null path; keep a copy of the original. |
380 // The cast is not valid along the null path; keep a copy of the original. |
358 Node* null_check_oop(Node* value, Node* *null_control, |
381 Node* null_check_oop(Node* value, Node* *null_control, |
369 // Cast obj to not-null on this path |
392 // Cast obj to not-null on this path |
370 Node* cast_not_null(Node* obj, bool do_replace_in_map = true); |
393 Node* cast_not_null(Node* obj, bool do_replace_in_map = true); |
371 // Replace all occurrences of one node by another. |
394 // Replace all occurrences of one node by another. |
372 void replace_in_map(Node* old, Node* neww); |
395 void replace_in_map(Node* old, Node* neww); |
373 |
396 |
374 void push(Node* n) { map_not_null(); _map->set_stack(_map->_jvms, _sp++, n); } |
397 void push(Node* n) { map_not_null(); _map->set_stack(_map->_jvms, _sp++ , n); } |
375 Node* pop() { map_not_null(); return _map->stack( _map->_jvms, --_sp); } |
398 Node* pop() { map_not_null(); return _map->stack( _map->_jvms, --_sp ); } |
376 Node* peek(int off = 0) { map_not_null(); return _map->stack( _map->_jvms, _sp - off - 1); } |
399 Node* peek(int off = 0) { map_not_null(); return _map->stack( _map->_jvms, _sp - off - 1 ); } |
377 |
400 |
378 void push_pair(Node* ldval) { |
401 void push_pair(Node* ldval) { |
379 push(ldval); |
402 push(ldval); |
380 push(top()); // the halfword is merely a placeholder |
403 push(top()); // the halfword is merely a placeholder |
381 } |
404 } |
578 bool pass_tls, |
601 bool pass_tls, |
579 bool return_pc); |
602 bool return_pc); |
580 |
603 |
581 //---------- help for generating calls -------------- |
604 //---------- help for generating calls -------------- |
582 |
605 |
583 // Do a null check on the receiver, which is in argument(0). |
606 // Do a null check on the receiver as it would happen before the call to |
584 Node* null_check_receiver(ciMethod* callee) { |
607 // callee (with all arguments still on the stack). |
|
608 Node* null_check_receiver_before_call(ciMethod* callee) { |
585 assert(!callee->is_static(), "must be a virtual method"); |
609 assert(!callee->is_static(), "must be a virtual method"); |
586 int nargs = 1 + callee->signature()->size(); |
610 const int nargs = callee->arg_size(); |
587 // Null check on self without removing any arguments. The argument |
611 inc_sp(nargs); |
588 // null check technically happens in the wrong place, which can lead to |
612 Node* n = null_check_receiver(); |
589 // invalid stack traces when the primitive is inlined into a method |
613 dec_sp(nargs); |
590 // which handles NullPointerExceptions. |
614 return n; |
591 Node* receiver = argument(0); |
|
592 _sp += nargs; |
|
593 receiver = do_null_check(receiver, T_OBJECT); |
|
594 _sp -= nargs; |
|
595 return receiver; |
|
596 } |
615 } |
597 |
616 |
598 // Fill in argument edges for the call from argument(0), argument(1), ... |
617 // Fill in argument edges for the call from argument(0), argument(1), ... |
599 // (The next step is to call set_edges_for_java_call.) |
618 // (The next step is to call set_edges_for_java_call.) |
600 void set_arguments_for_java_call(CallJavaNode* call); |
619 void set_arguments_for_java_call(CallJavaNode* call); |
642 ciKlass* klass = NULL, const char* reason_string = NULL, |
661 ciKlass* klass = NULL, const char* reason_string = NULL, |
643 bool must_throw = false, bool keep_exact_action = false) { |
662 bool must_throw = false, bool keep_exact_action = false) { |
644 uncommon_trap(Deoptimization::make_trap_request(reason, action), |
663 uncommon_trap(Deoptimization::make_trap_request(reason, action), |
645 klass, reason_string, must_throw, keep_exact_action); |
664 klass, reason_string, must_throw, keep_exact_action); |
646 } |
665 } |
|
666 |
|
667 // SP when bytecode needs to be reexecuted. |
|
668 virtual int reexecute_sp() { return sp(); } |
647 |
669 |
648 // Report if there were too many traps at the current method and bci. |
670 // Report if there were too many traps at the current method and bci. |
649 // Report if a trap was recorded, and/or PerMethodTrapLimit was exceeded. |
671 // Report if a trap was recorded, and/or PerMethodTrapLimit was exceeded. |
650 // If there is no MDO at all, report no trap unless told to assume it. |
672 // If there is no MDO at all, report no trap unless told to assume it. |
651 bool too_many_traps(Deoptimization::DeoptReason reason) { |
673 bool too_many_traps(Deoptimization::DeoptReason reason) { |