< prev index next >

src/share/vm/opto/macro.cpp

Print this page
rev 7209 : [mq]: inccms


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);


< prev index next >