1168 if (!succ->processed())
1169 worklist.push(succ);
1170 }
1171 }
1172 }
1173
1174 bool BCEscapeAnalyzer::do_analysis() {
1175 Arena* arena = CURRENT_ENV->arena();
1176 // identify basic blocks
1177 _methodBlocks = _method->get_method_blocks();
1178
1179 iterate_blocks(arena);
1180 // TEMPORARY
1181 return true;
1182 }
1183
1184 vmIntrinsics::ID BCEscapeAnalyzer::known_intrinsic() {
1185 vmIntrinsics::ID iid = method()->intrinsic_id();
1186
1187 if (iid == vmIntrinsics::_getClass ||
1188 iid == vmIntrinsics::_fillInStackTrace ||
1189 iid == vmIntrinsics::_hashCode)
1190 return iid;
1191 else
1192 return vmIntrinsics::_none;
1193 }
1194
1195 bool BCEscapeAnalyzer::compute_escape_for_intrinsic(vmIntrinsics::ID iid) {
1196 ArgumentMap arg;
1197 arg.clear();
1198 switch (iid) {
1199 case vmIntrinsics::_getClass:
1200 _return_local = false;
1201 break;
1202 case vmIntrinsics::_fillInStackTrace:
1203 arg.set(0); // 'this'
1204 set_returned(arg);
1205 break;
1206 case vmIntrinsics::_hashCode:
1207 // initialized state is correct
1208 break;
1209 default:
1210 assert(false, "unexpected intrinsic");
1211 }
1212 return true;
1213 }
1214
1215 void BCEscapeAnalyzer::initialize() {
1216 int i;
1217
1218 // clear escape information (method may have been deoptimized)
1219 methodData()->clear_escape_info();
1220
1221 // initialize escape state of object parameters
1222 ciSignature* sig = method()->signature();
1223 int j = 0;
1224 if (!method()->is_static()) {
|
1168 if (!succ->processed())
1169 worklist.push(succ);
1170 }
1171 }
1172 }
1173
1174 bool BCEscapeAnalyzer::do_analysis() {
1175 Arena* arena = CURRENT_ENV->arena();
1176 // identify basic blocks
1177 _methodBlocks = _method->get_method_blocks();
1178
1179 iterate_blocks(arena);
1180 // TEMPORARY
1181 return true;
1182 }
1183
1184 vmIntrinsics::ID BCEscapeAnalyzer::known_intrinsic() {
1185 vmIntrinsics::ID iid = method()->intrinsic_id();
1186
1187 if (iid == vmIntrinsics::_getClass ||
1188 iid == vmIntrinsics::_hashCode)
1189 return iid;
1190 else
1191 return vmIntrinsics::_none;
1192 }
1193
1194 bool BCEscapeAnalyzer::compute_escape_for_intrinsic(vmIntrinsics::ID iid) {
1195 ArgumentMap arg;
1196 arg.clear();
1197 switch (iid) {
1198 case vmIntrinsics::_getClass:
1199 _return_local = false;
1200 break;
1201 case vmIntrinsics::_hashCode:
1202 // initialized state is correct
1203 break;
1204 default:
1205 assert(false, "unexpected intrinsic");
1206 }
1207 return true;
1208 }
1209
1210 void BCEscapeAnalyzer::initialize() {
1211 int i;
1212
1213 // clear escape information (method may have been deoptimized)
1214 methodData()->clear_escape_info();
1215
1216 // initialize escape state of object parameters
1217 ciSignature* sig = method()->signature();
1218 int j = 0;
1219 if (!method()->is_static()) {
|