1180 // We need a Region and corresponding Phi's to merge the slow-path and fast-path results.
1181 // they will not be used if "always_slow" is set
1182 enum { slow_result_path = 1, fast_result_path = 2 };
1183 Node *result_region;
1184 Node *result_phi_rawmem;
1185 Node *result_phi_rawoop;
1186 Node *result_phi_i_o;
1187
1188 // The initial slow comparison is a size check, the comparison
1189 // we want to do is a BoolTest::gt
1190 bool always_slow = false;
1191 int tv = _igvn.find_int_con(initial_slow_test, -1);
1192 if (tv >= 0) {
1193 always_slow = (tv == 1);
1194 initial_slow_test = NULL;
1195 } else {
1196 initial_slow_test = BoolNode::make_predicate(initial_slow_test, &_igvn);
1197 }
1198
1199 if (C->env()->dtrace_alloc_probes() ||
1200 !UseTLAB && (!Universe::heap()->supports_inline_contig_alloc() ||
1201 (UseConcMarkSweepGC && CMSIncrementalMode))) {
1202 // Force slow-path allocation
1203 always_slow = true;
1204 initial_slow_test = NULL;
1205 }
1206
1207
1208 enum { too_big_or_final_path = 1, need_gc_path = 2 };
1209 Node *slow_region = NULL;
1210 Node *toobig_false = ctrl;
1211
1212 assert (initial_slow_test == NULL || !always_slow, "arguments must be consistent");
1213 // generate the initial test if necessary
1214 if (initial_slow_test != NULL ) {
1215 slow_region = new RegionNode(3);
1216
1217 // Now make the initial failure test. Usually a too-big test but
1218 // might be a TRUE for finalizers or a fancy class check for
1219 // newInstance0.
1220 IfNode *toobig_iff = new IfNode(ctrl, initial_slow_test, PROB_MIN, COUNT_UNKNOWN);
1221 transform_later(toobig_iff);
|
1180 // We need a Region and corresponding Phi's to merge the slow-path and fast-path results.
1181 // they will not be used if "always_slow" is set
1182 enum { slow_result_path = 1, fast_result_path = 2 };
1183 Node *result_region;
1184 Node *result_phi_rawmem;
1185 Node *result_phi_rawoop;
1186 Node *result_phi_i_o;
1187
1188 // The initial slow comparison is a size check, the comparison
1189 // we want to do is a BoolTest::gt
1190 bool always_slow = false;
1191 int tv = _igvn.find_int_con(initial_slow_test, -1);
1192 if (tv >= 0) {
1193 always_slow = (tv == 1);
1194 initial_slow_test = NULL;
1195 } else {
1196 initial_slow_test = BoolNode::make_predicate(initial_slow_test, &_igvn);
1197 }
1198
1199 if (C->env()->dtrace_alloc_probes() ||
1200 !UseTLAB && (!Universe::heap()->supports_inline_contig_alloc())) {
1201 // Force slow-path allocation
1202 always_slow = true;
1203 initial_slow_test = NULL;
1204 }
1205
1206
1207 enum { too_big_or_final_path = 1, need_gc_path = 2 };
1208 Node *slow_region = NULL;
1209 Node *toobig_false = ctrl;
1210
1211 assert (initial_slow_test == NULL || !always_slow, "arguments must be consistent");
1212 // generate the initial test if necessary
1213 if (initial_slow_test != NULL ) {
1214 slow_region = new RegionNode(3);
1215
1216 // Now make the initial failure test. Usually a too-big test but
1217 // might be a TRUE for finalizers or a fancy class check for
1218 // newInstance0.
1219 IfNode *toobig_iff = new IfNode(ctrl, initial_slow_test, PROB_MIN, COUNT_UNKNOWN);
1220 transform_later(toobig_iff);
|