Mercurial > hg > graal-compiler
comparison src/share/vm/opto/graphKit.cpp @ 14704:b51e29501f30
Merged with jdk9/dev/hotspot changeset 9486a41de3b7
author | twisti |
---|---|
date | Tue, 18 Mar 2014 20:19:10 -0700 |
parents | d8041d695d19 5e2306b00977 |
children | 92aa6797d639 |
comparison
equal
deleted
inserted
replaced
14647:8f483e200405 | 14704:b51e29501f30 |
---|---|
3005 region->del_req(_null_path); | 3005 region->del_req(_null_path); |
3006 phi ->del_req(_null_path); | 3006 phi ->del_req(_null_path); |
3007 } | 3007 } |
3008 | 3008 |
3009 Node* cast_obj = NULL; | 3009 Node* cast_obj = NULL; |
3010 const TypeOopPtr* obj_type = _gvn.type(obj)->is_oopptr(); | 3010 if (tk->klass_is_exact()) { |
3011 // We may not have profiling here or it may not help us. If we have | 3011 // The following optimization tries to statically cast the speculative type of the object |
3012 // a speculative type use it to perform an exact cast. | 3012 // (for example obtained during profiling) to the type of the superklass and then do a |
3013 ciKlass* spec_obj_type = obj_type->speculative_type(); | 3013 // dynamic check that the type of the object is what we expect. To work correctly |
3014 if (spec_obj_type != NULL || | 3014 // for checkcast and aastore the type of superklass should be exact. |
3015 (data != NULL && | 3015 const TypeOopPtr* obj_type = _gvn.type(obj)->is_oopptr(); |
3016 // Counter has never been decremented (due to cast failure). | 3016 // We may not have profiling here or it may not help us. If we have |
3017 // ...This is a reasonable thing to expect. It is true of | 3017 // a speculative type use it to perform an exact cast. |
3018 // all casts inserted by javac to implement generic types. | 3018 ciKlass* spec_obj_type = obj_type->speculative_type(); |
3019 data->as_CounterData()->count() >= 0)) { | 3019 if (spec_obj_type != NULL || |
3020 cast_obj = maybe_cast_profiled_receiver(not_null_obj, tk->klass(), spec_obj_type, safe_for_replace); | 3020 (data != NULL && |
3021 if (cast_obj != NULL) { | 3021 // Counter has never been decremented (due to cast failure). |
3022 if (failure_control != NULL) // failure is now impossible | 3022 // ...This is a reasonable thing to expect. It is true of |
3023 (*failure_control) = top(); | 3023 // all casts inserted by javac to implement generic types. |
3024 // adjust the type of the phi to the exact klass: | 3024 data->as_CounterData()->count() >= 0)) { |
3025 phi->raise_bottom_type(_gvn.type(cast_obj)->meet_speculative(TypePtr::NULL_PTR)); | 3025 cast_obj = maybe_cast_profiled_receiver(not_null_obj, tk->klass(), spec_obj_type, safe_for_replace); |
3026 if (cast_obj != NULL) { | |
3027 if (failure_control != NULL) // failure is now impossible | |
3028 (*failure_control) = top(); | |
3029 // adjust the type of the phi to the exact klass: | |
3030 phi->raise_bottom_type(_gvn.type(cast_obj)->meet_speculative(TypePtr::NULL_PTR)); | |
3031 } | |
3026 } | 3032 } |
3027 } | 3033 } |
3028 | 3034 |
3029 if (cast_obj == NULL) { | 3035 if (cast_obj == NULL) { |
3030 // Load the object's klass | 3036 // Load the object's klass |