Mercurial > hg > graal-compiler
comparison src/share/vm/ci/ciEnv.cpp @ 17622:849eb7bfceac
8028468: Add inlining information into ciReplay
Summary: Allow dump and replay inlining for specified method during a program execution.
Reviewed-by: roland, twisti
author | kvn |
---|---|
date | Wed, 08 Jan 2014 10:25:50 -0800 |
parents | 938e1e64e28f |
children | 96d2c94bbdd0 606acabe7b5c |
comparison
equal
deleted
inserted
replaced
17621:df8573b1a44c | 17622:849eb7bfceac |
---|---|
1145 // ------------------------------------------------------------------ | 1145 // ------------------------------------------------------------------ |
1146 // ciEnv::dump_replay_data* | 1146 // ciEnv::dump_replay_data* |
1147 | 1147 |
1148 // Don't change thread state and acquire any locks. | 1148 // Don't change thread state and acquire any locks. |
1149 // Safe to call from VM error reporter. | 1149 // Safe to call from VM error reporter. |
1150 | |
1151 void ciEnv::dump_compile_data(outputStream* out) { | |
1152 CompileTask* task = this->task(); | |
1153 Method* method = task->method(); | |
1154 int entry_bci = task->osr_bci(); | |
1155 int comp_level = task->comp_level(); | |
1156 out->print("compile %s %s %s %d %d", | |
1157 method->klass_name()->as_quoted_ascii(), | |
1158 method->name()->as_quoted_ascii(), | |
1159 method->signature()->as_quoted_ascii(), | |
1160 entry_bci, comp_level); | |
1161 if (compiler_data() != NULL) { | |
1162 if (is_c2_compile(comp_level)) { // C2 or Shark | |
1163 #ifdef COMPILER2 | |
1164 // Dump C2 inlining data. | |
1165 ((Compile*)compiler_data())->dump_inline_data(out); | |
1166 #endif | |
1167 } else if (is_c1_compile(comp_level)) { // C1 | |
1168 #ifdef COMPILER1 | |
1169 // Dump C1 inlining data. | |
1170 ((Compilation*)compiler_data())->dump_inline_data(out); | |
1171 #endif | |
1172 } | |
1173 } | |
1174 out->cr(); | |
1175 } | |
1176 | |
1150 void ciEnv::dump_replay_data_unsafe(outputStream* out) { | 1177 void ciEnv::dump_replay_data_unsafe(outputStream* out) { |
1151 ResourceMark rm; | 1178 ResourceMark rm; |
1152 #if INCLUDE_JVMTI | 1179 #if INCLUDE_JVMTI |
1153 out->print_cr("JvmtiExport can_access_local_variables %d", _jvmti_can_access_local_variables); | 1180 out->print_cr("JvmtiExport can_access_local_variables %d", _jvmti_can_access_local_variables); |
1154 out->print_cr("JvmtiExport can_hotswap_or_post_breakpoint %d", _jvmti_can_hotswap_or_post_breakpoint); | 1181 out->print_cr("JvmtiExport can_hotswap_or_post_breakpoint %d", _jvmti_can_hotswap_or_post_breakpoint); |
1158 GrowableArray<ciMetadata*>* objects = _factory->get_ci_metadata(); | 1185 GrowableArray<ciMetadata*>* objects = _factory->get_ci_metadata(); |
1159 out->print_cr("# %d ciObject found", objects->length()); | 1186 out->print_cr("# %d ciObject found", objects->length()); |
1160 for (int i = 0; i < objects->length(); i++) { | 1187 for (int i = 0; i < objects->length(); i++) { |
1161 objects->at(i)->dump_replay_data(out); | 1188 objects->at(i)->dump_replay_data(out); |
1162 } | 1189 } |
1163 CompileTask* task = this->task(); | 1190 dump_compile_data(out); |
1164 Method* method = task->method(); | |
1165 int entry_bci = task->osr_bci(); | |
1166 int comp_level = task->comp_level(); | |
1167 // Klass holder = method->method_holder(); | |
1168 out->print_cr("compile %s %s %s %d %d", | |
1169 method->klass_name()->as_quoted_ascii(), | |
1170 method->name()->as_quoted_ascii(), | |
1171 method->signature()->as_quoted_ascii(), | |
1172 entry_bci, comp_level); | |
1173 out->flush(); | 1191 out->flush(); |
1174 } | 1192 } |
1175 | 1193 |
1176 void ciEnv::dump_replay_data(outputStream* out) { | 1194 void ciEnv::dump_replay_data(outputStream* out) { |
1177 GUARDED_VM_ENTRY( | 1195 GUARDED_VM_ENTRY( |
1178 MutexLocker ml(Compile_lock); | 1196 MutexLocker ml(Compile_lock); |
1179 dump_replay_data_unsafe(out); | 1197 dump_replay_data_unsafe(out); |
1180 ) | 1198 ) |
1181 } | 1199 } |
1200 | |
1201 void ciEnv::dump_replay_data(int compile_id) { | |
1202 static char buffer[O_BUFLEN]; | |
1203 int ret = jio_snprintf(buffer, O_BUFLEN, "replay_pid%p_compid%d.log", os::current_process_id(), compile_id); | |
1204 if (ret > 0) { | |
1205 int fd = open(buffer, O_RDWR | O_CREAT | O_TRUNC, 0666); | |
1206 if (fd != -1) { | |
1207 FILE* replay_data_file = os::open(fd, "w"); | |
1208 if (replay_data_file != NULL) { | |
1209 fileStream replay_data_stream(replay_data_file, /*need_close=*/true); | |
1210 dump_replay_data(&replay_data_stream); | |
1211 tty->print("# Compiler replay data is saved as: "); | |
1212 tty->print_cr(buffer); | |
1213 } else { | |
1214 tty->print_cr("# Can't open file to dump replay data."); | |
1215 } | |
1216 } | |
1217 } | |
1218 } | |
1219 | |
1220 void ciEnv::dump_inline_data(int compile_id) { | |
1221 static char buffer[O_BUFLEN]; | |
1222 int ret = jio_snprintf(buffer, O_BUFLEN, "inline_pid%p_compid%d.log", os::current_process_id(), compile_id); | |
1223 if (ret > 0) { | |
1224 int fd = open(buffer, O_RDWR | O_CREAT | O_TRUNC, 0666); | |
1225 if (fd != -1) { | |
1226 FILE* inline_data_file = os::open(fd, "w"); | |
1227 if (inline_data_file != NULL) { | |
1228 fileStream replay_data_stream(inline_data_file, /*need_close=*/true); | |
1229 GUARDED_VM_ENTRY( | |
1230 MutexLocker ml(Compile_lock); | |
1231 dump_compile_data(&replay_data_stream); | |
1232 ) | |
1233 replay_data_stream.flush(); | |
1234 tty->print("# Compiler inline data is saved as: "); | |
1235 tty->print_cr(buffer); | |
1236 } else { | |
1237 tty->print_cr("# Can't open file to dump inline data."); | |
1238 } | |
1239 } | |
1240 } | |
1241 } |