Mercurial > hg > graal-jvmci-8
comparison src/share/vm/opto/graphKit.cpp @ 1397:b4776199210f
6943485: JVMTI always on capabilities change code generation too much
Reviewed-by: twisti, dcubed
author | never |
---|---|
date | Mon, 26 Apr 2010 23:59:45 -0700 |
parents | 7b4415a18c8a |
children | c18cbe5936b8 2458a1f25356 |
comparison
equal
deleted
inserted
replaced
1396:d7f654633cfe | 1397:b4776199210f |
---|---|
810 // Walk the inline list to fill in the correct set of JVMState's | 810 // Walk the inline list to fill in the correct set of JVMState's |
811 // Also fill in the associated edges for each JVMState. | 811 // Also fill in the associated edges for each JVMState. |
812 | 812 |
813 JVMState* youngest_jvms = sync_jvms(); | 813 JVMState* youngest_jvms = sync_jvms(); |
814 | 814 |
815 // Do we need debug info here? If it is a SafePoint and this method | |
816 // cannot de-opt, then we do NOT need any debug info. | |
817 bool full_info = (C->deopt_happens() || call->Opcode() != Op_SafePoint); | |
818 | |
819 // If we are guaranteed to throw, we can prune everything but the | 815 // If we are guaranteed to throw, we can prune everything but the |
820 // input to the current bytecode. | 816 // input to the current bytecode. |
821 bool can_prune_locals = false; | 817 bool can_prune_locals = false; |
822 uint stack_slots_not_pruned = 0; | 818 uint stack_slots_not_pruned = 0; |
823 int inputs = 0, depth = 0; | 819 int inputs = 0, depth = 0; |
827 can_prune_locals = true; | 823 can_prune_locals = true; |
828 stack_slots_not_pruned = inputs; | 824 stack_slots_not_pruned = inputs; |
829 } | 825 } |
830 } | 826 } |
831 | 827 |
832 if (env()->jvmti_can_examine_or_deopt_anywhere()) { | 828 if (env()->jvmti_can_access_local_variables()) { |
833 // At any safepoint, this method can get breakpointed, which would | 829 // At any safepoint, this method can get breakpointed, which would |
834 // then require an immediate deoptimization. | 830 // then require an immediate deoptimization. |
835 full_info = true; | |
836 can_prune_locals = false; // do not prune locals | 831 can_prune_locals = false; // do not prune locals |
837 stack_slots_not_pruned = 0; | 832 stack_slots_not_pruned = 0; |
838 } | 833 } |
839 | 834 |
840 // do not scribble on the input jvms | 835 // do not scribble on the input jvms |
888 | 883 |
889 // Add the Locals | 884 // Add the Locals |
890 k = in_jvms->locoff(); | 885 k = in_jvms->locoff(); |
891 l = in_jvms->loc_size(); | 886 l = in_jvms->loc_size(); |
892 out_jvms->set_locoff(p); | 887 out_jvms->set_locoff(p); |
893 if (full_info && !can_prune_locals) { | 888 if (!can_prune_locals) { |
894 for (j = 0; j < l; j++) | 889 for (j = 0; j < l; j++) |
895 call->set_req(p++, in_map->in(k+j)); | 890 call->set_req(p++, in_map->in(k+j)); |
896 } else { | 891 } else { |
897 p += l; // already set to top above by add_req_batch | 892 p += l; // already set to top above by add_req_batch |
898 } | 893 } |
899 | 894 |
900 // Add the Expression Stack | 895 // Add the Expression Stack |
901 k = in_jvms->stkoff(); | 896 k = in_jvms->stkoff(); |
902 l = in_jvms->sp(); | 897 l = in_jvms->sp(); |
903 out_jvms->set_stkoff(p); | 898 out_jvms->set_stkoff(p); |
904 if (full_info && !can_prune_locals) { | 899 if (!can_prune_locals) { |
905 for (j = 0; j < l; j++) | 900 for (j = 0; j < l; j++) |
906 call->set_req(p++, in_map->in(k+j)); | 901 call->set_req(p++, in_map->in(k+j)); |
907 } else if (can_prune_locals && stack_slots_not_pruned != 0) { | 902 } else if (can_prune_locals && stack_slots_not_pruned != 0) { |
908 // Divide stack into {S0,...,S1}, where S0 is set to top. | 903 // Divide stack into {S0,...,S1}, where S0 is set to top. |
909 uint s1 = stack_slots_not_pruned; | 904 uint s1 = stack_slots_not_pruned; |