< prev index next >

src/share/vm/opto/graphKit.hpp

Print this page
rev 12700 : 8176506: C2: loop unswitching and unsafe accesses cause crash
Reviewed-by:


 351   Node* null_check_receiver() {
 352     assert(argument(0)->bottom_type()->isa_ptr(), "must be");
 353     return null_check(argument(0));
 354   }
 355   Node* zero_check_int(Node* value) {
 356     assert(value->bottom_type()->basic_type() == T_INT,
 357            "wrong type: %s", type2name(value->bottom_type()->basic_type()));
 358     return null_check_common(value, T_INT);
 359   }
 360   Node* zero_check_long(Node* value) {
 361     assert(value->bottom_type()->basic_type() == T_LONG,
 362            "wrong type: %s", type2name(value->bottom_type()->basic_type()));
 363     return null_check_common(value, T_LONG);
 364   }
 365   // Throw an uncommon trap if a given value is __not__ null.
 366   // Return the value cast to null, and be clever about dominating checks.
 367   Node* null_assert(Node* value, BasicType type = T_OBJECT) {
 368     return null_check_common(value, type, true);
 369   }
 370 



 371   // Null check oop.  Return null-path control into (*null_control).
 372   // Return a cast-not-null node which depends on the not-null control.
 373   // If never_see_null, use an uncommon trap (*null_control sees a top).
 374   // The cast is not valid along the null path; keep a copy of the original.
 375   // If safe_for_replace, then we can replace the value with the cast
 376   // in the parsing map (the cast is guaranteed to dominate the map)
 377   Node* null_check_oop(Node* value, Node* *null_control,
 378                        bool never_see_null = false,
 379                        bool safe_for_replace = false,
 380                        bool speculative = false);
 381 
 382   // Check the null_seen bit.
 383   bool seems_never_null(Node* obj, ciProfileData* data, bool& speculating);
 384 
 385   // Check for unique class for receiver at call
 386   ciKlass* profile_has_unique_klass() {
 387     ciCallProfile profile = method()->call_profile_at_bci(bci());
 388     if (profile.count() >= 0 &&         // no cast failures here
 389         profile.has_receiver(0) &&
 390         profile.morphism() == 1) {




 351   Node* null_check_receiver() {
 352     assert(argument(0)->bottom_type()->isa_ptr(), "must be");
 353     return null_check(argument(0));
 354   }
 355   Node* zero_check_int(Node* value) {
 356     assert(value->bottom_type()->basic_type() == T_INT,
 357            "wrong type: %s", type2name(value->bottom_type()->basic_type()));
 358     return null_check_common(value, T_INT);
 359   }
 360   Node* zero_check_long(Node* value) {
 361     assert(value->bottom_type()->basic_type() == T_LONG,
 362            "wrong type: %s", type2name(value->bottom_type()->basic_type()));
 363     return null_check_common(value, T_LONG);
 364   }
 365   // Throw an uncommon trap if a given value is __not__ null.
 366   // Return the value cast to null, and be clever about dominating checks.
 367   Node* null_assert(Node* value, BasicType type = T_OBJECT) {
 368     return null_check_common(value, type, true);
 369   }
 370 
 371   // Check if value is null and abort if it is
 372   Node* must_be_not_null(Node* value, bool do_replace_in_map);
 373 
 374   // Null check oop.  Return null-path control into (*null_control).
 375   // Return a cast-not-null node which depends on the not-null control.
 376   // If never_see_null, use an uncommon trap (*null_control sees a top).
 377   // The cast is not valid along the null path; keep a copy of the original.
 378   // If safe_for_replace, then we can replace the value with the cast
 379   // in the parsing map (the cast is guaranteed to dominate the map)
 380   Node* null_check_oop(Node* value, Node* *null_control,
 381                        bool never_see_null = false,
 382                        bool safe_for_replace = false,
 383                        bool speculative = false);
 384 
 385   // Check the null_seen bit.
 386   bool seems_never_null(Node* obj, ciProfileData* data, bool& speculating);
 387 
 388   // Check for unique class for receiver at call
 389   ciKlass* profile_has_unique_klass() {
 390     ciCallProfile profile = method()->call_profile_at_bci(bci());
 391     if (profile.count() >= 0 &&         // no cast failures here
 392         profile.has_receiver(0) &&
 393         profile.morphism() == 1) {


< prev index next >