mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 14:54:52 +02:00
8140424: don't prefix developer and notproduct flag variables with CONST_ in product builds
Reviewed-by: goetz, stefank
This commit is contained in:
parent
c4ce43c1ac
commit
6896030b96
33 changed files with 138 additions and 200 deletions
|
@ -2697,7 +2697,7 @@ address CppInterpreterGenerator::generate_normal_entry(bool synchronized) {
|
||||||
// Provide a debugger breakpoint in the frame manager if breakpoints
|
// Provide a debugger breakpoint in the frame manager if breakpoints
|
||||||
// in osr'd methods are requested.
|
// in osr'd methods are requested.
|
||||||
#ifdef COMPILER2
|
#ifdef COMPILER2
|
||||||
NOT_PRODUCT( if (OptoBreakpointOSR) { __ illtrap(); } )
|
if (OptoBreakpointOSR) { __ illtrap(); }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Load callee's pointer to locals array from callee's state.
|
// Load callee's pointer to locals array from callee's state.
|
||||||
|
|
|
@ -358,7 +358,6 @@ void VM_Version::initialize() {
|
||||||
FLAG_SET_DEFAULT(UseUnalignedAccesses, false);
|
FLAG_SET_DEFAULT(UseUnalignedAccesses, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef PRODUCT
|
|
||||||
if (PrintMiscellaneous && Verbose) {
|
if (PrintMiscellaneous && Verbose) {
|
||||||
tty->print_cr("L1 data cache line size: %u", L1_data_cache_line_size());
|
tty->print_cr("L1 data cache line size: %u", L1_data_cache_line_size());
|
||||||
tty->print_cr("L2 data cache line size: %u", L2_data_cache_line_size());
|
tty->print_cr("L2 data cache line size: %u", L2_data_cache_line_size());
|
||||||
|
@ -391,7 +390,6 @@ void VM_Version::initialize() {
|
||||||
tty->print_cr("ContendedPaddingWidth %d", (int) ContendedPaddingWidth);
|
tty->print_cr("ContendedPaddingWidth %d", (int) ContendedPaddingWidth);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // PRODUCT
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void VM_Version::print_features() {
|
void VM_Version::print_features() {
|
||||||
|
@ -400,7 +398,7 @@ void VM_Version::print_features() {
|
||||||
|
|
||||||
int VM_Version::determine_features() {
|
int VM_Version::determine_features() {
|
||||||
if (UseV8InstrsOnly) {
|
if (UseV8InstrsOnly) {
|
||||||
NOT_PRODUCT(if (PrintMiscellaneous && Verbose) tty->print_cr("Version is Forced-V8");)
|
if (PrintMiscellaneous && Verbose) { tty->print_cr("Version is Forced-V8"); }
|
||||||
return generic_v8_m;
|
return generic_v8_m;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -416,12 +414,12 @@ int VM_Version::determine_features() {
|
||||||
if (is_T_family(features)) {
|
if (is_T_family(features)) {
|
||||||
// Happy to accomodate...
|
// Happy to accomodate...
|
||||||
} else {
|
} else {
|
||||||
NOT_PRODUCT(if (PrintMiscellaneous && Verbose) tty->print_cr("Version is Forced-Niagara");)
|
if (PrintMiscellaneous && Verbose) { tty->print_cr("Version is Forced-Niagara"); }
|
||||||
features |= T_family_m;
|
features |= T_family_m;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (is_T_family(features) && !FLAG_IS_DEFAULT(UseNiagaraInstrs)) {
|
if (is_T_family(features) && !FLAG_IS_DEFAULT(UseNiagaraInstrs)) {
|
||||||
NOT_PRODUCT(if (PrintMiscellaneous && Verbose) tty->print_cr("Version is Forced-Not-Niagara");)
|
if (PrintMiscellaneous && Verbose) { tty->print_cr("Version is Forced-Not-Niagara"); }
|
||||||
features &= ~(T_family_m | T1_model_m);
|
features &= ~(T_family_m | T1_model_m);
|
||||||
} else {
|
} else {
|
||||||
// Happy to accomodate...
|
// Happy to accomodate...
|
||||||
|
|
|
@ -66,12 +66,12 @@ int VM_Version::platform_features(int features) {
|
||||||
features = generic_v9_m;
|
features = generic_v9_m;
|
||||||
|
|
||||||
if (detect_niagara()) {
|
if (detect_niagara()) {
|
||||||
NOT_PRODUCT(if (PrintMiscellaneous && Verbose) tty->print_cr("Detected Linux on Niagara");)
|
if (PrintMiscellaneous && Verbose) { tty->print_cr("Detected Linux on Niagara"); }
|
||||||
features = niagara1_m | T_family_m;
|
features = niagara1_m | T_family_m;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (detect_M_family()) {
|
if (detect_M_family()) {
|
||||||
NOT_PRODUCT(if (PrintMiscellaneous && Verbose) tty->print_cr("Detected Linux on M family");)
|
if (PrintMiscellaneous && Verbose) { tty->print_cr("Detected Linux on M family"); }
|
||||||
features = sun4v_m | generic_v9_m | M_family_m | T_family_m;
|
features = sun4v_m | generic_v9_m | M_family_m | T_family_m;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -707,12 +707,10 @@ BlockBegin* GraphBuilder::ScopeData::block_at(int bci) {
|
||||||
BlockBegin* block = bci2block()->at(bci);
|
BlockBegin* block = bci2block()->at(bci);
|
||||||
if (block != NULL && block == parent()->bci2block()->at(bci)) {
|
if (block != NULL && block == parent()->bci2block()->at(bci)) {
|
||||||
BlockBegin* new_block = new BlockBegin(block->bci());
|
BlockBegin* new_block = new BlockBegin(block->bci());
|
||||||
#ifndef PRODUCT
|
|
||||||
if (PrintInitialBlockList) {
|
if (PrintInitialBlockList) {
|
||||||
tty->print_cr("CFG: cloned block %d (bci %d) as block %d for jsr",
|
tty->print_cr("CFG: cloned block %d (bci %d) as block %d for jsr",
|
||||||
block->block_id(), block->bci(), new_block->block_id());
|
block->block_id(), block->bci(), new_block->block_id());
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
// copy data from cloned blocked
|
// copy data from cloned blocked
|
||||||
new_block->set_depth_first_number(block->depth_first_number());
|
new_block->set_depth_first_number(block->depth_first_number());
|
||||||
if (block->is_set(BlockBegin::parser_loop_header_flag)) new_block->set(BlockBegin::parser_loop_header_flag);
|
if (block->is_set(BlockBegin::parser_loop_header_flag)) new_block->set(BlockBegin::parser_loop_header_flag);
|
||||||
|
@ -3790,12 +3788,10 @@ bool GraphBuilder::try_inline_full(ciMethod* callee, bool holder_known, Bytecode
|
||||||
cont = new BlockBegin(next_bci());
|
cont = new BlockBegin(next_bci());
|
||||||
// low number so that continuation gets parsed as early as possible
|
// low number so that continuation gets parsed as early as possible
|
||||||
cont->set_depth_first_number(0);
|
cont->set_depth_first_number(0);
|
||||||
#ifndef PRODUCT
|
|
||||||
if (PrintInitialBlockList) {
|
if (PrintInitialBlockList) {
|
||||||
tty->print_cr("CFG: created block %d (bci %d) as continuation for inline at bci %d",
|
tty->print_cr("CFG: created block %d (bci %d) as continuation for inline at bci %d",
|
||||||
cont->block_id(), cont->bci(), bci());
|
cont->block_id(), cont->bci(), bci());
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
continuation_existed = false;
|
continuation_existed = false;
|
||||||
}
|
}
|
||||||
// Record number of predecessors of continuation block before
|
// Record number of predecessors of continuation block before
|
||||||
|
|
|
@ -572,11 +572,9 @@ void CodeCache::scavenge_root_nmethods_do(CodeBlobClosure* f) {
|
||||||
assert(cur->on_scavenge_root_list(), "else shouldn't be on this list");
|
assert(cur->on_scavenge_root_list(), "else shouldn't be on this list");
|
||||||
|
|
||||||
bool is_live = (!cur->is_zombie() && !cur->is_unloaded());
|
bool is_live = (!cur->is_zombie() && !cur->is_unloaded());
|
||||||
#ifndef PRODUCT
|
|
||||||
if (TraceScavenge) {
|
if (TraceScavenge) {
|
||||||
cur->print_on(tty, is_live ? "scavenge root" : "dead scavenge root"); tty->cr();
|
cur->print_on(tty, is_live ? "scavenge root" : "dead scavenge root"); tty->cr();
|
||||||
}
|
}
|
||||||
#endif //PRODUCT
|
|
||||||
if (is_live) {
|
if (is_live) {
|
||||||
// Perform cur->oops_do(f), maybe just once per nmethod.
|
// Perform cur->oops_do(f), maybe just once per nmethod.
|
||||||
f->do_code_blob(cur);
|
f->do_code_blob(cur);
|
||||||
|
|
|
@ -2250,7 +2250,7 @@ bool nmethod::test_set_oops_do_mark() {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// Mark was clear when we first saw this guy.
|
// Mark was clear when we first saw this guy.
|
||||||
NOT_PRODUCT(if (TraceScavenge) print_on(tty, "oops_do, mark"));
|
if (TraceScavenge) { print_on(tty, "oops_do, mark"); }
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2259,7 +2259,7 @@ bool nmethod::test_set_oops_do_mark() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void nmethod::oops_do_marking_prologue() {
|
void nmethod::oops_do_marking_prologue() {
|
||||||
NOT_PRODUCT(if (TraceScavenge) tty->print_cr("[oops_do_marking_prologue"));
|
if (TraceScavenge) { tty->print_cr("[oops_do_marking_prologue"); }
|
||||||
assert(_oops_do_mark_nmethods == NULL, "must not call oops_do_marking_prologue twice in a row");
|
assert(_oops_do_mark_nmethods == NULL, "must not call oops_do_marking_prologue twice in a row");
|
||||||
// We use cmpxchg_ptr instead of regular assignment here because the user
|
// We use cmpxchg_ptr instead of regular assignment here because the user
|
||||||
// may fork a bunch of threads, and we need them all to see the same state.
|
// may fork a bunch of threads, and we need them all to see the same state.
|
||||||
|
@ -2275,13 +2275,13 @@ void nmethod::oops_do_marking_epilogue() {
|
||||||
nmethod* next = cur->_oops_do_mark_link;
|
nmethod* next = cur->_oops_do_mark_link;
|
||||||
cur->_oops_do_mark_link = NULL;
|
cur->_oops_do_mark_link = NULL;
|
||||||
cur->verify_oop_relocations();
|
cur->verify_oop_relocations();
|
||||||
NOT_PRODUCT(if (TraceScavenge) cur->print_on(tty, "oops_do, unmark"));
|
if (TraceScavenge) { cur->print_on(tty, "oops_do, unmark"); }
|
||||||
cur = next;
|
cur = next;
|
||||||
}
|
}
|
||||||
void* required = _oops_do_mark_nmethods;
|
void* required = _oops_do_mark_nmethods;
|
||||||
void* observed = Atomic::cmpxchg_ptr(NULL, &_oops_do_mark_nmethods, required);
|
void* observed = Atomic::cmpxchg_ptr(NULL, &_oops_do_mark_nmethods, required);
|
||||||
guarantee(observed == required, "no races in this sequential code");
|
guarantee(observed == required, "no races in this sequential code");
|
||||||
NOT_PRODUCT(if (TraceScavenge) tty->print_cr("oops_do_marking_epilogue]"));
|
if (TraceScavenge) { tty->print_cr("oops_do_marking_epilogue]"); }
|
||||||
}
|
}
|
||||||
|
|
||||||
class DetectScavengeRoot: public OopClosure {
|
class DetectScavengeRoot: public OopClosure {
|
||||||
|
|
|
@ -67,7 +67,7 @@
|
||||||
cflags(VectorizeDebug, bool, false, VectorizeDebug) \
|
cflags(VectorizeDebug, bool, false, VectorizeDebug) \
|
||||||
cflags(CloneMapDebug, bool, false, CloneMapDebug) \
|
cflags(CloneMapDebug, bool, false, CloneMapDebug) \
|
||||||
cflags(DoReserveCopyInSuperWordDebug, bool, false, DoReserveCopyInSuperWordDebug) \
|
cflags(DoReserveCopyInSuperWordDebug, bool, false, DoReserveCopyInSuperWordDebug) \
|
||||||
NOT_PRODUCT( cflags(IGVPrintLevel, intx, PrintIdealGraphLevel, IGVPrintLevel)) \
|
cflags(IGVPrintLevel, intx, PrintIdealGraphLevel, IGVPrintLevel) \
|
||||||
cflags(MaxNodeLimit, intx, MaxNodeLimit, MaxNodeLimit)
|
cflags(MaxNodeLimit, intx, MaxNodeLimit, MaxNodeLimit)
|
||||||
#else
|
#else
|
||||||
#define compilerdirectives_c2_flags(cflags)
|
#define compilerdirectives_c2_flags(cflags)
|
||||||
|
|
|
@ -1162,7 +1162,6 @@ oop ParNewGeneration::copy_to_survivor_space(ParScanThreadState* par_scan_state,
|
||||||
}
|
}
|
||||||
assert(new_obj != NULL, "just checking");
|
assert(new_obj != NULL, "just checking");
|
||||||
|
|
||||||
#ifndef PRODUCT
|
|
||||||
// This code must come after the CAS test, or it will print incorrect
|
// This code must come after the CAS test, or it will print incorrect
|
||||||
// information.
|
// information.
|
||||||
if (TraceScavenge) {
|
if (TraceScavenge) {
|
||||||
|
@ -1170,7 +1169,6 @@ oop ParNewGeneration::copy_to_survivor_space(ParScanThreadState* par_scan_state,
|
||||||
is_in_reserved(new_obj) ? "copying" : "tenuring",
|
is_in_reserved(new_obj) ? "copying" : "tenuring",
|
||||||
new_obj->klass()->internal_name(), p2i(old), p2i(new_obj), new_obj->size());
|
new_obj->klass()->internal_name(), p2i(old), p2i(new_obj), new_obj->size());
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
if (forward_ptr == NULL) {
|
if (forward_ptr == NULL) {
|
||||||
oop obj_to_push = new_obj;
|
oop obj_to_push = new_obj;
|
||||||
|
|
|
@ -108,14 +108,11 @@ inline void ParScanClosure::do_oop_work(T* p,
|
||||||
if (m->is_marked()) { // Contains forwarding pointer.
|
if (m->is_marked()) { // Contains forwarding pointer.
|
||||||
new_obj = ParNewGeneration::real_forwardee(obj);
|
new_obj = ParNewGeneration::real_forwardee(obj);
|
||||||
oopDesc::encode_store_heap_oop_not_null(p, new_obj);
|
oopDesc::encode_store_heap_oop_not_null(p, new_obj);
|
||||||
#ifndef PRODUCT
|
|
||||||
if (TraceScavenge) {
|
if (TraceScavenge) {
|
||||||
gclog_or_tty->print_cr("{%s %s ( " PTR_FORMAT " ) " PTR_FORMAT " -> " PTR_FORMAT " (%d)}",
|
gclog_or_tty->print_cr("{%s %s ( " PTR_FORMAT " ) " PTR_FORMAT " -> " PTR_FORMAT " (%d)}",
|
||||||
"forwarded ",
|
"forwarded ",
|
||||||
new_obj->klass()->internal_name(), p2i(p), p2i((void *)obj), p2i((void *)new_obj), new_obj->size());
|
new_obj->klass()->internal_name(), p2i(p), p2i((void *)obj), p2i((void *)new_obj), new_obj->size());
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
size_t obj_sz = obj->size_given_klass(objK);
|
size_t obj_sz = obj->size_given_klass(objK);
|
||||||
new_obj = _g->copy_to_survivor_space(_par_scan_state, obj, obj_sz, m);
|
new_obj = _g->copy_to_survivor_space(_par_scan_state, obj, obj_sz, m);
|
||||||
|
|
|
@ -430,7 +430,6 @@ oop PSPromotionManager::oop_promotion_failed(oop obj, markOop obj_mark) {
|
||||||
obj = obj->forwardee();
|
obj = obj->forwardee();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef PRODUCT
|
|
||||||
if (TraceScavenge) {
|
if (TraceScavenge) {
|
||||||
gclog_or_tty->print_cr("{%s %s " PTR_FORMAT " (%d)}",
|
gclog_or_tty->print_cr("{%s %s " PTR_FORMAT " (%d)}",
|
||||||
"promotion-failure",
|
"promotion-failure",
|
||||||
|
@ -438,7 +437,6 @@ oop PSPromotionManager::oop_promotion_failed(oop obj, markOop obj_mark) {
|
||||||
p2i(obj), obj->size());
|
p2i(obj), obj->size());
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
|
@ -260,7 +260,6 @@ inline oop PSPromotionManager::copy_to_survivor_space(oop o) {
|
||||||
new_obj = o->forwardee();
|
new_obj = o->forwardee();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef PRODUCT
|
|
||||||
// This code must come after the CAS test, or it will print incorrect
|
// This code must come after the CAS test, or it will print incorrect
|
||||||
// information.
|
// information.
|
||||||
if (TraceScavenge) {
|
if (TraceScavenge) {
|
||||||
|
@ -268,7 +267,6 @@ inline oop PSPromotionManager::copy_to_survivor_space(oop o) {
|
||||||
should_scavenge(&new_obj) ? "copying" : "tenuring",
|
should_scavenge(&new_obj) ? "copying" : "tenuring",
|
||||||
new_obj->klass()->internal_name(), p2i((void *)o), p2i((void *)new_obj), new_obj->size());
|
new_obj->klass()->internal_name(), p2i((void *)o), p2i((void *)new_obj), new_obj->size());
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
return new_obj;
|
return new_obj;
|
||||||
}
|
}
|
||||||
|
@ -285,15 +283,13 @@ inline void PSPromotionManager::copy_and_push_safe_barrier(T* p) {
|
||||||
? o->forwardee()
|
? o->forwardee()
|
||||||
: copy_to_survivor_space<promote_immediately>(o);
|
: copy_to_survivor_space<promote_immediately>(o);
|
||||||
|
|
||||||
#ifndef PRODUCT
|
|
||||||
// This code must come after the CAS test, or it will print incorrect
|
// This code must come after the CAS test, or it will print incorrect
|
||||||
// information.
|
// information.
|
||||||
if (TraceScavenge && o->is_forwarded()) {
|
if (TraceScavenge && o->is_forwarded()) {
|
||||||
gclog_or_tty->print_cr("{%s %s " PTR_FORMAT " -> " PTR_FORMAT " (%d)}",
|
gclog_or_tty->print_cr("{%s %s " PTR_FORMAT " -> " PTR_FORMAT " (%d)}",
|
||||||
"forwarding",
|
"forwarding",
|
||||||
new_obj->klass()->internal_name(), p2i((void *)o), p2i((void *)new_obj), new_obj->size());
|
new_obj->klass()->internal_name(), p2i((void *)o), p2i((void *)new_obj), new_obj->size());
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
oopDesc::encode_store_heap_oop_not_null(p, new_obj);
|
oopDesc::encode_store_heap_oop_not_null(p, new_obj);
|
||||||
|
|
||||||
|
|
|
@ -138,7 +138,6 @@ class PSScavengeKlassClosure: public KlassClosure {
|
||||||
// If the klass has not been dirtied we know that there's
|
// If the klass has not been dirtied we know that there's
|
||||||
// no references into the young gen and we can skip it.
|
// no references into the young gen and we can skip it.
|
||||||
|
|
||||||
#ifndef PRODUCT
|
|
||||||
if (TraceScavenge) {
|
if (TraceScavenge) {
|
||||||
ResourceMark rm;
|
ResourceMark rm;
|
||||||
gclog_or_tty->print_cr("PSScavengeKlassClosure::do_klass " PTR_FORMAT ", %s, dirty: %s",
|
gclog_or_tty->print_cr("PSScavengeKlassClosure::do_klass " PTR_FORMAT ", %s, dirty: %s",
|
||||||
|
@ -146,7 +145,6 @@ class PSScavengeKlassClosure: public KlassClosure {
|
||||||
klass->external_name(),
|
klass->external_name(),
|
||||||
klass->has_modified_oops() ? "true" : "false");
|
klass->has_modified_oops() ? "true" : "false");
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
if (klass->has_modified_oops()) {
|
if (klass->has_modified_oops()) {
|
||||||
// Clean the klass since we're going to scavenge all the metadata.
|
// Clean the klass since we're going to scavenge all the metadata.
|
||||||
|
|
|
@ -134,7 +134,6 @@ void FastScanClosure::do_oop(oop* p) { FastScanClosure::do_oop_work(p); }
|
||||||
void FastScanClosure::do_oop(narrowOop* p) { FastScanClosure::do_oop_work(p); }
|
void FastScanClosure::do_oop(narrowOop* p) { FastScanClosure::do_oop_work(p); }
|
||||||
|
|
||||||
void KlassScanClosure::do_klass(Klass* klass) {
|
void KlassScanClosure::do_klass(Klass* klass) {
|
||||||
#ifndef PRODUCT
|
|
||||||
if (TraceScavenge) {
|
if (TraceScavenge) {
|
||||||
ResourceMark rm;
|
ResourceMark rm;
|
||||||
gclog_or_tty->print_cr("KlassScanClosure::do_klass " PTR_FORMAT ", %s, dirty: %s",
|
gclog_or_tty->print_cr("KlassScanClosure::do_klass " PTR_FORMAT ", %s, dirty: %s",
|
||||||
|
@ -142,7 +141,6 @@ void KlassScanClosure::do_klass(Klass* klass) {
|
||||||
klass->external_name(),
|
klass->external_name(),
|
||||||
klass->has_modified_oops() ? "true" : "false");
|
klass->has_modified_oops() ? "true" : "false");
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
// If the klass has not been dirtied we know that there's
|
// If the klass has not been dirtied we know that there's
|
||||||
// no references into the young gen and we can skip it.
|
// no references into the young gen and we can skip it.
|
||||||
|
|
|
@ -542,10 +542,11 @@ static void do_liveness(PhaseRegAlloc* regalloc, PhaseCFG* cfg, Block_List* work
|
||||||
if (i == cfg->number_of_blocks()) {
|
if (i == cfg->number_of_blocks()) {
|
||||||
break; // Got 'em all
|
break; // Got 'em all
|
||||||
}
|
}
|
||||||
#ifndef PRODUCT
|
|
||||||
if( PrintOpto && Verbose )
|
if (PrintOpto && Verbose) {
|
||||||
tty->print_cr("retripping live calc");
|
tty->print_cr("retripping live calc");
|
||||||
#endif
|
}
|
||||||
|
|
||||||
// Force the issue (expensively): recheck everybody
|
// Force the issue (expensively): recheck everybody
|
||||||
for (i = 1; i < cfg->number_of_blocks(); i++) {
|
for (i = 1; i < cfg->number_of_blocks(); i++) {
|
||||||
worklist->push(cfg->get_block(i));
|
worklist->push(cfg->get_block(i));
|
||||||
|
|
|
@ -707,7 +707,7 @@ Compile::Compile( ciEnv* ci_env, C2Compiler* compiler, ciMethod* target, int osr
|
||||||
_replay_inline_data = ciReplay::load_inline_data(method(), entry_bci(), ci_env->comp_level());
|
_replay_inline_data = ciReplay::load_inline_data(method(), entry_bci(), ci_env->comp_level());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
set_print_inlining(directive->PrintInliningOption NOT_PRODUCT( || PrintOptoInlining));
|
set_print_inlining(directive->PrintInliningOption || PrintOptoInlining);
|
||||||
set_print_intrinsics(directive->PrintIntrinsicsOption);
|
set_print_intrinsics(directive->PrintIntrinsicsOption);
|
||||||
set_has_irreducible_loop(true); // conservative until build_loop_tree() reset it
|
set_has_irreducible_loop(true); // conservative until build_loop_tree() reset it
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@ void trace_type_profile(Compile* C, ciMethod *method, int depth, int bci, ciMeth
|
||||||
if (TraceTypeProfile || C->print_inlining()) {
|
if (TraceTypeProfile || C->print_inlining()) {
|
||||||
outputStream* out = tty;
|
outputStream* out = tty;
|
||||||
if (!C->print_inlining()) {
|
if (!C->print_inlining()) {
|
||||||
if (NOT_PRODUCT(!PrintOpto &&) !PrintCompilation) {
|
if (!PrintOpto && !PrintCompilation) {
|
||||||
method->print_short_name();
|
method->print_short_name();
|
||||||
tty->cr();
|
tty->cr();
|
||||||
}
|
}
|
||||||
|
@ -426,12 +426,10 @@ void Parse::do_call() {
|
||||||
// uncommon-trap when callee is unloaded, uninitialized or will not link
|
// uncommon-trap when callee is unloaded, uninitialized or will not link
|
||||||
// bailout when too many arguments for register representation
|
// bailout when too many arguments for register representation
|
||||||
if (!will_link || can_not_compile_call_site(orig_callee, klass)) {
|
if (!will_link || can_not_compile_call_site(orig_callee, klass)) {
|
||||||
#ifndef PRODUCT
|
|
||||||
if (PrintOpto && (Verbose || WizardMode)) {
|
if (PrintOpto && (Verbose || WizardMode)) {
|
||||||
method()->print_name(); tty->print_cr(" can not compile call at bci %d to:", bci());
|
method()->print_name(); tty->print_cr(" can not compile call at bci %d to:", bci());
|
||||||
orig_callee->print_name(); tty->cr();
|
orig_callee->print_name(); tty->cr();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
assert(holder_klass->is_loaded(), "");
|
assert(holder_klass->is_loaded(), "");
|
||||||
|
@ -634,12 +632,10 @@ void Parse::do_call() {
|
||||||
// If the return type of the method is not loaded, assert that the
|
// If the return type of the method is not loaded, assert that the
|
||||||
// value we got is a null. Otherwise, we need to recompile.
|
// value we got is a null. Otherwise, we need to recompile.
|
||||||
if (!rtype->is_loaded()) {
|
if (!rtype->is_loaded()) {
|
||||||
#ifndef PRODUCT
|
|
||||||
if (PrintOpto && (Verbose || WizardMode)) {
|
if (PrintOpto && (Verbose || WizardMode)) {
|
||||||
method()->print_name(); tty->print_cr(" asserting nullness of result at bci: %d", bci());
|
method()->print_name(); tty->print_cr(" asserting nullness of result at bci: %d", bci());
|
||||||
cg->method()->print_name(); tty->cr();
|
cg->method()->print_name(); tty->cr();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
if (C->log() != NULL) {
|
if (C->log() != NULL) {
|
||||||
C->log()->elem("assert_null reason='return' klass='%d'",
|
C->log()->elem("assert_null reason='return' klass='%d'",
|
||||||
C->log()->identify(rtype));
|
C->log()->identify(rtype));
|
||||||
|
@ -851,11 +847,9 @@ void Parse::catch_inline_exceptions(SafePointNode* ex_map) {
|
||||||
|
|
||||||
if (remaining == 1) {
|
if (remaining == 1) {
|
||||||
push_ex_oop(ex_node); // Push exception oop for handler
|
push_ex_oop(ex_node); // Push exception oop for handler
|
||||||
#ifndef PRODUCT
|
|
||||||
if (PrintOpto && WizardMode) {
|
if (PrintOpto && WizardMode) {
|
||||||
tty->print_cr(" Catching every inline exception bci:%d -> handler_bci:%d", bci(), handler_bci);
|
tty->print_cr(" Catching every inline exception bci:%d -> handler_bci:%d", bci(), handler_bci);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
merge_exception(handler_bci); // jump to handler
|
merge_exception(handler_bci); // jump to handler
|
||||||
return; // No more handling to be done here!
|
return; // No more handling to be done here!
|
||||||
}
|
}
|
||||||
|
@ -882,13 +876,11 @@ void Parse::catch_inline_exceptions(SafePointNode* ex_map) {
|
||||||
assert(klass->has_subklass() || tinst->klass_is_exact(), "lost exactness");
|
assert(klass->has_subklass() || tinst->klass_is_exact(), "lost exactness");
|
||||||
Node* ex_oop = _gvn.transform(new CheckCastPPNode(control(), ex_node, tinst));
|
Node* ex_oop = _gvn.transform(new CheckCastPPNode(control(), ex_node, tinst));
|
||||||
push_ex_oop(ex_oop); // Push exception oop for handler
|
push_ex_oop(ex_oop); // Push exception oop for handler
|
||||||
#ifndef PRODUCT
|
|
||||||
if (PrintOpto && WizardMode) {
|
if (PrintOpto && WizardMode) {
|
||||||
tty->print(" Catching inline exception bci:%d -> handler_bci:%d -- ", bci(), handler_bci);
|
tty->print(" Catching inline exception bci:%d -> handler_bci:%d -- ", bci(), handler_bci);
|
||||||
klass->print_name();
|
klass->print_name();
|
||||||
tty->cr();
|
tty->cr();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
merge_exception(handler_bci);
|
merge_exception(handler_bci);
|
||||||
}
|
}
|
||||||
set_control(not_subtype_ctrl);
|
set_control(not_subtype_ctrl);
|
||||||
|
@ -1067,13 +1059,11 @@ ciMethod* Compile::optimize_inlining(ciMethod* caller, int bci, ciInstanceKlass*
|
||||||
// such method can be changed when its class is redefined.
|
// such method can be changed when its class is redefined.
|
||||||
ciMethod* exact_method = callee->resolve_invoke(calling_klass, actual_receiver);
|
ciMethod* exact_method = callee->resolve_invoke(calling_klass, actual_receiver);
|
||||||
if (exact_method != NULL) {
|
if (exact_method != NULL) {
|
||||||
#ifndef PRODUCT
|
|
||||||
if (PrintOpto) {
|
if (PrintOpto) {
|
||||||
tty->print(" Calling method via exact type @%d --- ", bci);
|
tty->print(" Calling method via exact type @%d --- ", bci);
|
||||||
exact_method->print_name();
|
exact_method->print_name();
|
||||||
tty->cr();
|
tty->cr();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
return exact_method;
|
return exact_method;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -792,8 +792,10 @@ bool IdealLoopTree::policy_unroll(PhaseIdealLoop *phase) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(cl->do_unroll_only()) {
|
if (cl->do_unroll_only()) {
|
||||||
NOT_PRODUCT(if (TraceSuperWordLoopUnrollAnalysis) tty->print_cr("policy_unroll passed vector loop(vlen=%d,factor = %d)\n", slp_max_unroll_factor, future_unroll_ct));
|
if (TraceSuperWordLoopUnrollAnalysis) {
|
||||||
|
tty->print_cr("policy_unroll passed vector loop(vlen=%d,factor = %d)\n", slp_max_unroll_factor, future_unroll_ct);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unroll once! (Each trip will soon do double iterations)
|
// Unroll once! (Each trip will soon do double iterations)
|
||||||
|
@ -818,7 +820,9 @@ void IdealLoopTree::policy_unroll_slp_analysis(CountedLoopNode *cl, PhaseIdealLo
|
||||||
if (slp_max_unroll_factor >= future_unroll_ct) {
|
if (slp_max_unroll_factor >= future_unroll_ct) {
|
||||||
int new_limit = cl->node_count_before_unroll() * slp_max_unroll_factor;
|
int new_limit = cl->node_count_before_unroll() * slp_max_unroll_factor;
|
||||||
if (new_limit > LoopUnrollLimit) {
|
if (new_limit > LoopUnrollLimit) {
|
||||||
NOT_PRODUCT(if (TraceSuperWordLoopUnrollAnalysis) tty->print_cr("slp analysis unroll=%d, default limit=%d\n", new_limit, _local_loop_unroll_limit));
|
if (TraceSuperWordLoopUnrollAnalysis) {
|
||||||
|
tty->print_cr("slp analysis unroll=%d, default limit=%d\n", new_limit, _local_loop_unroll_limit);
|
||||||
|
}
|
||||||
_local_loop_unroll_limit = new_limit;
|
_local_loop_unroll_limit = new_limit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2120,10 +2124,9 @@ void PhaseIdealLoop::do_range_check( IdealLoopTree *loop, Node_List &old_new ) {
|
||||||
conditional_rc = !loop->dominates_backedge(iff) || RangeLimitCheck;
|
conditional_rc = !loop->dominates_backedge(iff) || RangeLimitCheck;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
#ifndef PRODUCT
|
if (PrintOpto) {
|
||||||
if( PrintOpto )
|
|
||||||
tty->print_cr("missed RCE opportunity");
|
tty->print_cr("missed RCE opportunity");
|
||||||
#endif
|
}
|
||||||
continue; // In release mode, ignore it
|
continue; // In release mode, ignore it
|
||||||
}
|
}
|
||||||
} else { // Otherwise work on normal compares
|
} else { // Otherwise work on normal compares
|
||||||
|
@ -2158,10 +2161,9 @@ void PhaseIdealLoop::do_range_check( IdealLoopTree *loop, Node_List &old_new ) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
#ifndef PRODUCT
|
if (PrintOpto) {
|
||||||
if( PrintOpto )
|
|
||||||
tty->print_cr("missed RCE opportunity");
|
tty->print_cr("missed RCE opportunity");
|
||||||
#endif
|
}
|
||||||
continue; // Unhandled case
|
continue; // Unhandled case
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2505,9 +2507,7 @@ bool IdealLoopTree::iteration_split_impl( PhaseIdealLoop *phase, Node_List &old_
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (should_peel) { // Should we peel?
|
if (should_peel) { // Should we peel?
|
||||||
#ifndef PRODUCT
|
if (PrintOpto) { tty->print_cr("should_peel"); }
|
||||||
if (PrintOpto) tty->print_cr("should_peel");
|
|
||||||
#endif
|
|
||||||
phase->do_peeling(this,old_new);
|
phase->do_peeling(this,old_new);
|
||||||
} else if (should_unswitch) {
|
} else if (should_unswitch) {
|
||||||
phase->do_unswitching(this, old_new);
|
phase->do_unswitching(this, old_new);
|
||||||
|
|
|
@ -361,16 +361,22 @@ bool CountedLoopReserveKit::create_reserve() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!_lpt->_head->is_CountedLoop()) {
|
if(!_lpt->_head->is_CountedLoop()) {
|
||||||
NOT_PRODUCT(if(TraceLoopOpts) {tty->print_cr("CountedLoopReserveKit::create_reserve: %d not counted loop", _lpt->_head->_idx);})
|
if (TraceLoopOpts) {
|
||||||
|
tty->print_cr("CountedLoopReserveKit::create_reserve: %d not counted loop", _lpt->_head->_idx);
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
CountedLoopNode *cl = _lpt->_head->as_CountedLoop();
|
CountedLoopNode *cl = _lpt->_head->as_CountedLoop();
|
||||||
if (!cl->is_valid_counted_loop()) {
|
if (!cl->is_valid_counted_loop()) {
|
||||||
NOT_PRODUCT(if(TraceLoopOpts) {tty->print_cr("CountedLoopReserveKit::create_reserve: %d not valid counted loop", cl->_idx);})
|
if (TraceLoopOpts) {
|
||||||
|
tty->print_cr("CountedLoopReserveKit::create_reserve: %d not valid counted loop", cl->_idx);
|
||||||
|
}
|
||||||
return false; // skip malformed counted loop
|
return false; // skip malformed counted loop
|
||||||
}
|
}
|
||||||
if (!cl->is_main_loop()) {
|
if (!cl->is_main_loop()) {
|
||||||
NOT_PRODUCT(if(TraceLoopOpts) {tty->print_cr("CountedLoopReserveKit::create_reserve: %d not main loop", cl->_idx);})
|
if (TraceLoopOpts) {
|
||||||
|
tty->print_cr("CountedLoopReserveKit::create_reserve: %d not main loop", cl->_idx);
|
||||||
|
}
|
||||||
return false; // skip normal, pre, and post loops
|
return false; // skip normal, pre, and post loops
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2397,11 +2397,9 @@ void PhaseIdealLoop::build_and_optimize(bool do_split_ifs, bool skip_loop_opts)
|
||||||
// After that switch predicates off and do more loop optimizations.
|
// After that switch predicates off and do more loop optimizations.
|
||||||
if (!C->major_progress() && (C->predicate_count() > 0)) {
|
if (!C->major_progress() && (C->predicate_count() > 0)) {
|
||||||
C->cleanup_loop_predicates(_igvn);
|
C->cleanup_loop_predicates(_igvn);
|
||||||
#ifndef PRODUCT
|
|
||||||
if (TraceLoopOpts) {
|
if (TraceLoopOpts) {
|
||||||
tty->print_cr("PredicatesOff");
|
tty->print_cr("PredicatesOff");
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
C->set_major_progress();
|
C->set_major_progress();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -199,10 +199,7 @@ Node *PhaseIdealLoop::split_thru_phi( Node *n, Node *region, int policy ) {
|
||||||
// IGVN worklist for later cleanup. Move control-dependent data Nodes on the
|
// IGVN worklist for later cleanup. Move control-dependent data Nodes on the
|
||||||
// live path up to the dominating control.
|
// live path up to the dominating control.
|
||||||
void PhaseIdealLoop::dominated_by( Node *prevdom, Node *iff, bool flip, bool exclude_loop_predicate ) {
|
void PhaseIdealLoop::dominated_by( Node *prevdom, Node *iff, bool flip, bool exclude_loop_predicate ) {
|
||||||
#ifndef PRODUCT
|
if (VerifyLoopOptimizations && PrintOpto) { tty->print_cr("dominating test"); }
|
||||||
if (VerifyLoopOptimizations && PrintOpto) tty->print_cr("dominating test");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// prevdom is the dominating projection of the dominating test.
|
// prevdom is the dominating projection of the dominating test.
|
||||||
assert( iff->is_If(), "" );
|
assert( iff->is_If(), "" );
|
||||||
|
@ -617,9 +614,7 @@ Node *PhaseIdealLoop::conditional_move( Node *region ) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (phi == NULL) break;
|
if (phi == NULL) break;
|
||||||
#ifndef PRODUCT
|
if (PrintOpto && VerifyLoopOptimizations) { tty->print_cr("CMOV"); }
|
||||||
if (PrintOpto && VerifyLoopOptimizations) tty->print_cr("CMOV");
|
|
||||||
#endif
|
|
||||||
// Move speculative ops
|
// Move speculative ops
|
||||||
for (uint j = 1; j < region->req(); j++) {
|
for (uint j = 1; j < region->req(); j++) {
|
||||||
Node *proj = region->in(j);
|
Node *proj = region->in(j);
|
||||||
|
@ -963,10 +958,9 @@ static bool merge_point_too_heavy(Compile* C, Node* region) {
|
||||||
}
|
}
|
||||||
int nodes_left = C->max_node_limit() - C->live_nodes();
|
int nodes_left = C->max_node_limit() - C->live_nodes();
|
||||||
if (weight * 8 > nodes_left) {
|
if (weight * 8 > nodes_left) {
|
||||||
#ifndef PRODUCT
|
if (PrintOpto) {
|
||||||
if (PrintOpto)
|
|
||||||
tty->print_cr("*** Split-if bails out: %d nodes, region weight %d", C->unique(), weight);
|
tty->print_cr("*** Split-if bails out: %d nodes, region weight %d", C->unique(), weight);
|
||||||
#endif
|
}
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
|
@ -1490,14 +1484,12 @@ void PhaseIdealLoop::sink_use( Node *use, Node *post_loop ) {
|
||||||
void PhaseIdealLoop::clone_loop( IdealLoopTree *loop, Node_List &old_new, int dd,
|
void PhaseIdealLoop::clone_loop( IdealLoopTree *loop, Node_List &old_new, int dd,
|
||||||
Node* side_by_side_idom) {
|
Node* side_by_side_idom) {
|
||||||
|
|
||||||
#ifndef PRODUCT
|
|
||||||
if (C->do_vector_loop() && PrintOpto) {
|
if (C->do_vector_loop() && PrintOpto) {
|
||||||
const char* mname = C->method()->name()->as_quoted_ascii();
|
const char* mname = C->method()->name()->as_quoted_ascii();
|
||||||
if (mname != NULL) {
|
if (mname != NULL) {
|
||||||
tty->print("PhaseIdealLoop::clone_loop: for vectorize method %s\n", mname);
|
tty->print("PhaseIdealLoop::clone_loop: for vectorize method %s\n", mname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
CloneMap& cm = C->clone_map();
|
CloneMap& cm = C->clone_map();
|
||||||
Dict* dict = cm.dict();
|
Dict* dict = cm.dict();
|
||||||
|
|
|
@ -1569,13 +1569,11 @@ Node *Matcher::Label_Root( const Node *n, State *svec, Node *control, const Node
|
||||||
// Can NOT include the match of a subtree when its memory state
|
// Can NOT include the match of a subtree when its memory state
|
||||||
// is used by any of the other subtrees
|
// is used by any of the other subtrees
|
||||||
(input_mem == NodeSentinel) ) {
|
(input_mem == NodeSentinel) ) {
|
||||||
#ifndef PRODUCT
|
|
||||||
// Print when we exclude matching due to different memory states at input-loads
|
// Print when we exclude matching due to different memory states at input-loads
|
||||||
if( PrintOpto && (Verbose && WizardMode) && (input_mem == NodeSentinel)
|
if (PrintOpto && (Verbose && WizardMode) && (input_mem == NodeSentinel)
|
||||||
&& !((mem!=(Node*)1) && m->is_Load() && m->in(MemNode::Memory) != mem) ) {
|
&& !((mem!=(Node*)1) && m->is_Load() && m->in(MemNode::Memory) != mem)) {
|
||||||
tty->print_cr("invalid input_mem");
|
tty->print_cr("invalid input_mem");
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
// Switch to a register-only opcode; this value must be in a register
|
// Switch to a register-only opcode; this value must be in a register
|
||||||
// and cannot be subsumed as part of a larger instruction.
|
// and cannot be subsumed as part of a larger instruction.
|
||||||
s->DFA( m->ideal_reg(), m );
|
s->DFA( m->ideal_reg(), m );
|
||||||
|
|
|
@ -230,9 +230,7 @@ Node *CMoveINode::Ideal(PhaseGVN *phase, bool can_reshape) {
|
||||||
|
|
||||||
// Convert to a bool (flipped)
|
// Convert to a bool (flipped)
|
||||||
// Build int->bool conversion
|
// Build int->bool conversion
|
||||||
#ifndef PRODUCT
|
if (PrintOpto) { tty->print_cr("CMOV to I2B"); }
|
||||||
if( PrintOpto ) tty->print_cr("CMOV to I2B");
|
|
||||||
#endif
|
|
||||||
Node *n = new Conv2BNode( cmp->in(1) );
|
Node *n = new Conv2BNode( cmp->in(1) );
|
||||||
if( flip )
|
if( flip )
|
||||||
n = new XorINode( phase->transform(n), phase->intcon(1) );
|
n = new XorINode( phase->transform(n), phase->intcon(1) );
|
||||||
|
|
|
@ -91,13 +91,10 @@ void Compile::Output() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Break before main entry point
|
// Break before main entry point
|
||||||
if( (_method && C->directive()->BreakAtExecuteOption)
|
if ((_method && C->directive()->BreakAtExecuteOption) ||
|
||||||
#ifndef PRODUCT
|
(OptoBreakpoint && is_method_compilation()) ||
|
||||||
||(OptoBreakpoint && is_method_compilation())
|
(OptoBreakpointOSR && is_osr_compilation()) ||
|
||||||
||(OptoBreakpointOSR && is_osr_compilation())
|
(OptoBreakpointC2R && !_method) ) {
|
||||||
||(OptoBreakpointC2R && !_method)
|
|
||||||
#endif
|
|
||||||
) {
|
|
||||||
// checking for _method means that OptoBreakpoint does not apply to
|
// checking for _method means that OptoBreakpoint does not apply to
|
||||||
// runtime stubs or frame converters
|
// runtime stubs or frame converters
|
||||||
_cfg->insert( entry, 1, new MachBreakpointNode() );
|
_cfg->insert( entry, 1, new MachBreakpointNode() );
|
||||||
|
|
|
@ -958,12 +958,10 @@ void Parse::do_exits() {
|
||||||
PPC64_ONLY(wrote_volatile() ||)
|
PPC64_ONLY(wrote_volatile() ||)
|
||||||
(AlwaysSafeConstructors && wrote_fields()))) {
|
(AlwaysSafeConstructors && wrote_fields()))) {
|
||||||
_exits.insert_mem_bar(Op_MemBarRelease, alloc_with_final());
|
_exits.insert_mem_bar(Op_MemBarRelease, alloc_with_final());
|
||||||
#ifndef PRODUCT
|
|
||||||
if (PrintOpto && (Verbose || WizardMode)) {
|
if (PrintOpto && (Verbose || WizardMode)) {
|
||||||
method()->print_name();
|
method()->print_name();
|
||||||
tty->print_cr(" writes finals and needs a memory barrier");
|
tty->print_cr(" writes finals and needs a memory barrier");
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Any method can write a @Stable field; insert memory barriers after
|
// Any method can write a @Stable field; insert memory barriers after
|
||||||
|
@ -971,12 +969,10 @@ void Parse::do_exits() {
|
||||||
// barrier there.
|
// barrier there.
|
||||||
if (wrote_stable()) {
|
if (wrote_stable()) {
|
||||||
_exits.insert_mem_bar(Op_MemBarRelease, alloc_with_final());
|
_exits.insert_mem_bar(Op_MemBarRelease, alloc_with_final());
|
||||||
#ifndef PRODUCT
|
|
||||||
if (PrintOpto && (Verbose || WizardMode)) {
|
if (PrintOpto && (Verbose || WizardMode)) {
|
||||||
method()->print_name();
|
method()->print_name();
|
||||||
tty->print_cr(" writes @Stable and needs a memory barrier");
|
tty->print_cr(" writes @Stable and needs a memory barrier");
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (MergeMemStream mms(_exits.merged_memory()); mms.next_non_empty(); ) {
|
for (MergeMemStream mms(_exits.merged_memory()); mms.next_non_empty(); ) {
|
||||||
|
|
|
@ -948,13 +948,11 @@ bool Parse::seems_stable_comparison() const {
|
||||||
//-------------------------------repush_if_args--------------------------------
|
//-------------------------------repush_if_args--------------------------------
|
||||||
// Push arguments of an "if" bytecode back onto the stack by adjusting _sp.
|
// Push arguments of an "if" bytecode back onto the stack by adjusting _sp.
|
||||||
inline int Parse::repush_if_args() {
|
inline int Parse::repush_if_args() {
|
||||||
#ifndef PRODUCT
|
|
||||||
if (PrintOpto && WizardMode) {
|
if (PrintOpto && WizardMode) {
|
||||||
tty->print("defending against excessive implicit null exceptions on %s @%d in ",
|
tty->print("defending against excessive implicit null exceptions on %s @%d in ",
|
||||||
Bytecodes::name(iter().cur_bc()), iter().cur_bci());
|
Bytecodes::name(iter().cur_bc()), iter().cur_bci());
|
||||||
method()->print_name(); tty->cr();
|
method()->print_name(); tty->cr();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
int bc_depth = - Bytecodes::depth(iter().cur_bc());
|
int bc_depth = - Bytecodes::depth(iter().cur_bc());
|
||||||
assert(bc_depth == 1 || bc_depth == 2, "only two kinds of branches");
|
assert(bc_depth == 1 || bc_depth == 2, "only two kinds of branches");
|
||||||
DEBUG_ONLY(sync_jvms()); // argument(n) requires a synced jvms
|
DEBUG_ONLY(sync_jvms()); // argument(n) requires a synced jvms
|
||||||
|
@ -975,10 +973,9 @@ void Parse::do_ifnull(BoolTest::mask btest, Node *c) {
|
||||||
float prob = branch_prediction(cnt, btest, target_bci, c);
|
float prob = branch_prediction(cnt, btest, target_bci, c);
|
||||||
if (prob == PROB_UNKNOWN) {
|
if (prob == PROB_UNKNOWN) {
|
||||||
// (An earlier version of do_ifnull omitted this trap for OSR methods.)
|
// (An earlier version of do_ifnull omitted this trap for OSR methods.)
|
||||||
#ifndef PRODUCT
|
if (PrintOpto && Verbose) {
|
||||||
if (PrintOpto && Verbose)
|
tty->print_cr("Never-taken edge stops compilation at bci %d", bci());
|
||||||
tty->print_cr("Never-taken edge stops compilation at bci %d",bci());
|
}
|
||||||
#endif
|
|
||||||
repush_if_args(); // to gather stats on loop
|
repush_if_args(); // to gather stats on loop
|
||||||
// We need to mark this branch as taken so that if we recompile we will
|
// We need to mark this branch as taken so that if we recompile we will
|
||||||
// see that it is possible. In the tiered system the interpreter doesn't
|
// see that it is possible. In the tiered system the interpreter doesn't
|
||||||
|
@ -1057,10 +1054,9 @@ void Parse::do_if(BoolTest::mask btest, Node* c) {
|
||||||
float untaken_prob = 1.0 - prob;
|
float untaken_prob = 1.0 - prob;
|
||||||
|
|
||||||
if (prob == PROB_UNKNOWN) {
|
if (prob == PROB_UNKNOWN) {
|
||||||
#ifndef PRODUCT
|
if (PrintOpto && Verbose) {
|
||||||
if (PrintOpto && Verbose)
|
tty->print_cr("Never-taken edge stops compilation at bci %d", bci());
|
||||||
tty->print_cr("Never-taken edge stops compilation at bci %d",bci());
|
}
|
||||||
#endif
|
|
||||||
repush_if_args(); // to gather stats on loop
|
repush_if_args(); // to gather stats on loop
|
||||||
// We need to mark this branch as taken so that if we recompile we will
|
// We need to mark this branch as taken so that if we recompile we will
|
||||||
// see that it is possible. In the tiered system the interpreter doesn't
|
// see that it is possible. In the tiered system the interpreter doesn't
|
||||||
|
|
|
@ -213,11 +213,9 @@ void Parse::do_get_xxx(Node* obj, ciField* field, bool is_field) {
|
||||||
// not need to mention the class index, since the class will
|
// not need to mention the class index, since the class will
|
||||||
// already have been loaded if we ever see a non-null value.)
|
// already have been loaded if we ever see a non-null value.)
|
||||||
// uncommon_trap(iter().get_field_signature_index());
|
// uncommon_trap(iter().get_field_signature_index());
|
||||||
#ifndef PRODUCT
|
|
||||||
if (PrintOpto && (Verbose || WizardMode)) {
|
if (PrintOpto && (Verbose || WizardMode)) {
|
||||||
method()->print_name(); tty->print_cr(" asserting nullness of field at bci: %d", bci());
|
method()->print_name(); tty->print_cr(" asserting nullness of field at bci: %d", bci());
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
if (C->log() != NULL) {
|
if (C->log() != NULL) {
|
||||||
C->log()->elem("assert_null reason='field' klass='%d'",
|
C->log()->elem("assert_null reason='field' klass='%d'",
|
||||||
C->log()->identify(field->type()));
|
C->log()->identify(field->type()));
|
||||||
|
|
|
@ -506,10 +506,9 @@ uint PhaseChaitin::Split(uint maxlrg, ResourceArea* split_arena) {
|
||||||
// Initialize the split counts to zero
|
// Initialize the split counts to zero
|
||||||
splits.append(0);
|
splits.append(0);
|
||||||
#endif
|
#endif
|
||||||
#ifndef PRODUCT
|
if (PrintOpto && WizardMode && lrgs(bidx)._was_spilled1) {
|
||||||
if( PrintOpto && WizardMode && lrgs(bidx)._was_spilled1 )
|
|
||||||
tty->print_cr("Warning, 2nd spill of L%d",bidx);
|
tty->print_cr("Warning, 2nd spill of L%d",bidx);
|
||||||
#endif
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -390,13 +390,13 @@ void PhaseIdealLoop::handle_use( Node *use, Node *def, small_cache *cache, Node
|
||||||
// Found an If getting its condition-code input from a Phi in the same block.
|
// Found an If getting its condition-code input from a Phi in the same block.
|
||||||
// Split thru the Region.
|
// Split thru the Region.
|
||||||
void PhaseIdealLoop::do_split_if( Node *iff ) {
|
void PhaseIdealLoop::do_split_if( Node *iff ) {
|
||||||
#ifndef PRODUCT
|
if (PrintOpto && VerifyLoopOptimizations) {
|
||||||
if( PrintOpto && VerifyLoopOptimizations )
|
|
||||||
tty->print_cr("Split-if");
|
tty->print_cr("Split-if");
|
||||||
|
}
|
||||||
if (TraceLoopOpts) {
|
if (TraceLoopOpts) {
|
||||||
tty->print_cr("SplitIf");
|
tty->print_cr("SplitIf");
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
C->set_major_progress();
|
C->set_major_progress();
|
||||||
Node *region = iff->in(0);
|
Node *region = iff->in(0);
|
||||||
Node *region_dom = idom(region);
|
Node *region_dom = idom(region);
|
||||||
|
|
|
@ -276,7 +276,9 @@ void SuperWord::unrolling_analysis(int &local_loop_unroll_factor) {
|
||||||
// stop looking, we already have the max vector to map to.
|
// stop looking, we already have the max vector to map to.
|
||||||
if (cur_max_vector < local_loop_unroll_factor) {
|
if (cur_max_vector < local_loop_unroll_factor) {
|
||||||
is_slp = false;
|
is_slp = false;
|
||||||
NOT_PRODUCT(if (TraceSuperWordLoopUnrollAnalysis) tty->print_cr("slp analysis fails: unroll limit greater than max vector\n"));
|
if (TraceSuperWordLoopUnrollAnalysis) {
|
||||||
|
tty->print_cr("slp analysis fails: unroll limit greater than max vector\n");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -389,11 +391,9 @@ void SuperWord::SLP_extract() {
|
||||||
|
|
||||||
if (_do_vector_loop) {
|
if (_do_vector_loop) {
|
||||||
if (_packset.length() == 0) {
|
if (_packset.length() == 0) {
|
||||||
#ifndef PRODUCT
|
|
||||||
if (TraceSuperWord) {
|
if (TraceSuperWord) {
|
||||||
tty->print_cr("\nSuperWord::_do_vector_loop DFA could not build packset, now trying to build anyway");
|
tty->print_cr("\nSuperWord::_do_vector_loop DFA could not build packset, now trying to build anyway");
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
pack_parallel();
|
pack_parallel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -560,7 +560,9 @@ void SuperWord::find_adjacent_refs() {
|
||||||
}
|
}
|
||||||
best_align_to_mem_ref = find_align_to_ref(memops);
|
best_align_to_mem_ref = find_align_to_ref(memops);
|
||||||
if (best_align_to_mem_ref == NULL) {
|
if (best_align_to_mem_ref == NULL) {
|
||||||
NOT_PRODUCT(if (TraceSuperWord) tty->print_cr("SuperWord::find_adjacent_refs(): best_align_to_mem_ref == NULL");)
|
if (TraceSuperWord) {
|
||||||
|
tty->print_cr("SuperWord::find_adjacent_refs(): best_align_to_mem_ref == NULL");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
best_iv_adjustment = get_iv_adjustment(best_align_to_mem_ref);
|
best_iv_adjustment = get_iv_adjustment(best_align_to_mem_ref);
|
||||||
|
@ -582,12 +584,10 @@ void SuperWord::find_adjacent_refs() {
|
||||||
} // while (memops.size() != 0
|
} // while (memops.size() != 0
|
||||||
set_align_to_ref(best_align_to_mem_ref);
|
set_align_to_ref(best_align_to_mem_ref);
|
||||||
|
|
||||||
#ifndef PRODUCT
|
|
||||||
if (TraceSuperWord) {
|
if (TraceSuperWord) {
|
||||||
tty->print_cr("\nAfter find_adjacent_refs");
|
tty->print_cr("\nAfter find_adjacent_refs");
|
||||||
print_packset();
|
print_packset();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef PRODUCT
|
#ifndef PRODUCT
|
||||||
|
@ -874,7 +874,7 @@ void SuperWord::dependence_graph() {
|
||||||
_dg.make_edge(s1, slice_sink);
|
_dg.make_edge(s1, slice_sink);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifndef PRODUCT
|
|
||||||
if (TraceSuperWord) {
|
if (TraceSuperWord) {
|
||||||
tty->print_cr("\nDependence graph for slice: %d", n->_idx);
|
tty->print_cr("\nDependence graph for slice: %d", n->_idx);
|
||||||
for (int q = 0; q < _nlist.length(); q++) {
|
for (int q = 0; q < _nlist.length(); q++) {
|
||||||
|
@ -882,11 +882,10 @@ void SuperWord::dependence_graph() {
|
||||||
}
|
}
|
||||||
tty->cr();
|
tty->cr();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
_nlist.clear();
|
_nlist.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef PRODUCT
|
|
||||||
if (TraceSuperWord) {
|
if (TraceSuperWord) {
|
||||||
tty->print_cr("\ndisjoint_ptrs: %s", _disjoint_ptrs.length() > 0 ? "" : "NONE");
|
tty->print_cr("\ndisjoint_ptrs: %s", _disjoint_ptrs.length() > 0 ? "" : "NONE");
|
||||||
for (int r = 0; r < _disjoint_ptrs.length(); r++) {
|
for (int r = 0; r < _disjoint_ptrs.length(); r++) {
|
||||||
|
@ -895,7 +894,7 @@ void SuperWord::dependence_graph() {
|
||||||
}
|
}
|
||||||
tty->cr();
|
tty->cr();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------mem_slice_preds---------------------------
|
//---------------------------mem_slice_preds---------------------------
|
||||||
|
@ -912,7 +911,9 @@ void SuperWord::mem_slice_preds(Node* start, Node* stop, GrowableArray<Node*> &p
|
||||||
if (out->is_Load()) {
|
if (out->is_Load()) {
|
||||||
if (in_bb(out)) {
|
if (in_bb(out)) {
|
||||||
preds.push(out);
|
preds.push(out);
|
||||||
NOT_PRODUCT(if (TraceSuperWord && Verbose) tty->print_cr("SuperWord::mem_slice_preds: added pred(%d)", out->_idx);)
|
if (TraceSuperWord && Verbose) {
|
||||||
|
tty->print_cr("SuperWord::mem_slice_preds: added pred(%d)", out->_idx);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// FIXME
|
// FIXME
|
||||||
|
@ -931,7 +932,9 @@ void SuperWord::mem_slice_preds(Node* start, Node* stop, GrowableArray<Node*> &p
|
||||||
}//for
|
}//for
|
||||||
if (n == stop) break;
|
if (n == stop) break;
|
||||||
preds.push(n);
|
preds.push(n);
|
||||||
NOT_PRODUCT(if (TraceSuperWord && Verbose) tty->print_cr("SuperWord::mem_slice_preds: added pred(%d)", n->_idx);)
|
if (TraceSuperWord && Verbose) {
|
||||||
|
tty->print_cr("SuperWord::mem_slice_preds: added pred(%d)", n->_idx);
|
||||||
|
}
|
||||||
prev = n;
|
prev = n;
|
||||||
assert(n->is_Mem(), "unexpected node %s", n->Name());
|
assert(n->is_Mem(), "unexpected node %s", n->Name());
|
||||||
n = n->in(MemNode::Memory);
|
n = n->in(MemNode::Memory);
|
||||||
|
@ -1123,12 +1126,10 @@ void SuperWord::extend_packlist() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef PRODUCT
|
|
||||||
if (TraceSuperWord) {
|
if (TraceSuperWord) {
|
||||||
tty->print_cr("\nAfter extend_packlist");
|
tty->print_cr("\nAfter extend_packlist");
|
||||||
print_packset();
|
print_packset();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------follow_use_defs---------------------------
|
//------------------------------follow_use_defs---------------------------
|
||||||
|
@ -1412,12 +1413,10 @@ void SuperWord::combine_packs() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef PRODUCT
|
|
||||||
if (TraceSuperWord) {
|
if (TraceSuperWord) {
|
||||||
tty->print_cr("\nAfter combine_packs");
|
tty->print_cr("\nAfter combine_packs");
|
||||||
print_packset();
|
print_packset();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------construct_my_pack_map--------------------------
|
//-----------------------------construct_my_pack_map--------------------------
|
||||||
|
@ -2244,7 +2243,9 @@ void SuperWord::output() {
|
||||||
if (cl->has_passed_slp()) {
|
if (cl->has_passed_slp()) {
|
||||||
uint slp_max_unroll_factor = cl->slp_max_unroll();
|
uint slp_max_unroll_factor = cl->slp_max_unroll();
|
||||||
if (slp_max_unroll_factor == max_vlen) {
|
if (slp_max_unroll_factor == max_vlen) {
|
||||||
NOT_PRODUCT(if (TraceSuperWordLoopUnrollAnalysis) tty->print_cr("vector loop(unroll=%d, len=%d)\n", max_vlen, max_vlen_in_bytes*BitsPerByte));
|
if (TraceSuperWordLoopUnrollAnalysis) {
|
||||||
|
tty->print_cr("vector loop(unroll=%d, len=%d)\n", max_vlen, max_vlen_in_bytes*BitsPerByte);
|
||||||
|
}
|
||||||
// For atomic unrolled loops which are vector mapped, instigate more unrolling.
|
// For atomic unrolled loops which are vector mapped, instigate more unrolling.
|
||||||
cl->set_notpassed_slp();
|
cl->set_notpassed_slp();
|
||||||
// if vector resources are limited, do not allow additional unrolling
|
// if vector resources are limited, do not allow additional unrolling
|
||||||
|
@ -2653,10 +2654,10 @@ void SuperWord::compute_max_depth() {
|
||||||
}
|
}
|
||||||
ct++;
|
ct++;
|
||||||
} while (again);
|
} while (again);
|
||||||
#ifndef PRODUCT
|
|
||||||
if (TraceSuperWord && Verbose)
|
if (TraceSuperWord && Verbose) {
|
||||||
tty->print_cr("compute_max_depth iterated: %d times", ct);
|
tty->print_cr("compute_max_depth iterated: %d times", ct);
|
||||||
#endif
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//-------------------------compute_vector_element_type-----------------------
|
//-------------------------compute_vector_element_type-----------------------
|
||||||
|
@ -2667,10 +2668,9 @@ void SuperWord::compute_max_depth() {
|
||||||
// Normally the type of the add is integer, but for packed character
|
// Normally the type of the add is integer, but for packed character
|
||||||
// operations the type of the add needs to be char.
|
// operations the type of the add needs to be char.
|
||||||
void SuperWord::compute_vector_element_type() {
|
void SuperWord::compute_vector_element_type() {
|
||||||
#ifndef PRODUCT
|
if (TraceSuperWord && Verbose) {
|
||||||
if (TraceSuperWord && Verbose)
|
|
||||||
tty->print_cr("\ncompute_velt_type:");
|
tty->print_cr("\ncompute_velt_type:");
|
||||||
#endif
|
}
|
||||||
|
|
||||||
// Initial type
|
// Initial type
|
||||||
for (int i = 0; i < _block.length(); i++) {
|
for (int i = 0; i < _block.length(); i++) {
|
||||||
|
@ -2761,7 +2761,9 @@ int SuperWord::memory_alignment(MemNode* s, int iv_adjust) {
|
||||||
offset += iv_adjust*p.memory_size();
|
offset += iv_adjust*p.memory_size();
|
||||||
int off_rem = offset % vw;
|
int off_rem = offset % vw;
|
||||||
int off_mod = off_rem >= 0 ? off_rem : off_rem + vw;
|
int off_mod = off_rem >= 0 ? off_rem : off_rem + vw;
|
||||||
NOT_PRODUCT(if(TraceSuperWord && Verbose) tty->print_cr("SWPointer::memory_alignment: off_rem = %d, off_mod = %d", off_rem, off_mod);)
|
if (TraceSuperWord && Verbose) {
|
||||||
|
tty->print_cr("SWPointer::memory_alignment: off_rem = %d, off_mod = %d", off_rem, off_mod);
|
||||||
|
}
|
||||||
return off_mod;
|
return off_mod;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4049,11 +4051,9 @@ int SuperWord::mark_generations() {
|
||||||
}//for (int i...
|
}//for (int i...
|
||||||
|
|
||||||
if (_ii_first == -1 || _ii_last == -1) {
|
if (_ii_first == -1 || _ii_last == -1) {
|
||||||
#ifndef PRODUCT
|
|
||||||
if (TraceSuperWord && Verbose) {
|
if (TraceSuperWord && Verbose) {
|
||||||
tty->print_cr("SuperWord::mark_generations unknown error, something vent wrong");
|
tty->print_cr("SuperWord::mark_generations unknown error, something vent wrong");
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
return -1; // something vent wrong
|
return -1; // something vent wrong
|
||||||
}
|
}
|
||||||
// collect nodes in the first and last generations
|
// collect nodes in the first and last generations
|
||||||
|
@ -4086,11 +4086,9 @@ int SuperWord::mark_generations() {
|
||||||
}//for
|
}//for
|
||||||
|
|
||||||
if (found == false) {
|
if (found == false) {
|
||||||
#ifndef PRODUCT
|
|
||||||
if (TraceSuperWord && Verbose) {
|
if (TraceSuperWord && Verbose) {
|
||||||
tty->print_cr("SuperWord::mark_generations: Cannot build order of iterations - no dependent Store for %d", nd->_idx);
|
tty->print_cr("SuperWord::mark_generations: Cannot build order of iterations - no dependent Store for %d", nd->_idx);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
_ii_order.clear();
|
_ii_order.clear();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -4156,11 +4154,10 @@ bool SuperWord::fix_commutative_inputs(Node* gold, Node* fix) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef PRODUCT
|
|
||||||
if (TraceSuperWord && Verbose) {
|
if (TraceSuperWord && Verbose) {
|
||||||
tty->print_cr("SuperWord::fix_commutative_inputs: cannot fix node %d", fix->_idx);
|
tty->print_cr("SuperWord::fix_commutative_inputs: cannot fix node %d", fix->_idx);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4227,11 +4224,9 @@ bool SuperWord::hoist_loads_in_graph() {
|
||||||
for (int i = 0; i < _mem_slice_head.length(); i++) {
|
for (int i = 0; i < _mem_slice_head.length(); i++) {
|
||||||
Node* n = _mem_slice_head.at(i);
|
Node* n = _mem_slice_head.at(i);
|
||||||
if ( !in_bb(n) || !n->is_Phi() || n->bottom_type() != Type::MEMORY) {
|
if ( !in_bb(n) || !n->is_Phi() || n->bottom_type() != Type::MEMORY) {
|
||||||
#ifndef PRODUCT
|
|
||||||
if (TraceSuperWord && Verbose) {
|
if (TraceSuperWord && Verbose) {
|
||||||
tty->print_cr("SuperWord::hoist_loads_in_graph: skipping unexpected node n=%d", n->_idx);
|
tty->print_cr("SuperWord::hoist_loads_in_graph: skipping unexpected node n=%d", n->_idx);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4278,11 +4273,10 @@ bool SuperWord::hoist_loads_in_graph() {
|
||||||
|
|
||||||
restart(); // invalidate all basic structures, since we rebuilt the graph
|
restart(); // invalidate all basic structures, since we rebuilt the graph
|
||||||
|
|
||||||
#ifndef PRODUCT
|
|
||||||
if (TraceSuperWord && Verbose) {
|
if (TraceSuperWord && Verbose) {
|
||||||
tty->print_cr("\nSuperWord::hoist_loads_in_graph() the graph was rebuilt, all structures invalidated and need rebuild");
|
tty->print_cr("\nSuperWord::hoist_loads_in_graph() the graph was rebuilt, all structures invalidated and need rebuild");
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3899,7 +3899,7 @@ void TestG1BiasedArray_test();
|
||||||
void TestBufferingOopClosure_test();
|
void TestBufferingOopClosure_test();
|
||||||
void TestCodeCacheRemSet_test();
|
void TestCodeCacheRemSet_test();
|
||||||
void FreeRegionList_test();
|
void FreeRegionList_test();
|
||||||
void test_memset_with_concurrent_readers();
|
void test_memset_with_concurrent_readers() NOT_DEBUG_RETURN;
|
||||||
void TestPredictions_test();
|
void TestPredictions_test();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -456,7 +456,7 @@ const char* Arguments::real_flag_name(const char *flag_name) {
|
||||||
return flag_name;
|
return flag_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef PRODUCT
|
#ifdef ASSERT
|
||||||
static bool lookup_special_flag(const char *flag_name, size_t skip_index) {
|
static bool lookup_special_flag(const char *flag_name, size_t skip_index) {
|
||||||
for (size_t i = 0; special_jvm_flags[i].name != NULL; i++) {
|
for (size_t i = 0; special_jvm_flags[i].name != NULL; i++) {
|
||||||
if ((i != skip_index) && (strcmp(special_jvm_flags[i].name, flag_name) == 0)) {
|
if ((i != skip_index) && (strcmp(special_jvm_flags[i].name, flag_name) == 0)) {
|
||||||
|
|
|
@ -538,59 +538,57 @@ const char* Flag::flag_error_str(Flag::Error error) {
|
||||||
// 4991491 do not "optimize out" the was_set false values: omitting them
|
// 4991491 do not "optimize out" the was_set false values: omitting them
|
||||||
// tickles a Microsoft compiler bug causing flagTable to be malformed
|
// tickles a Microsoft compiler bug causing flagTable to be malformed
|
||||||
|
|
||||||
#define NAME(name) NOT_PRODUCT(&name) PRODUCT_ONLY(&CONST_##name)
|
#define RUNTIME_PRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_PRODUCT) },
|
||||||
|
#define RUNTIME_PD_PRODUCT_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
|
||||||
|
#define RUNTIME_DIAGNOSTIC_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_DIAGNOSTIC) },
|
||||||
|
#define RUNTIME_EXPERIMENTAL_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_EXPERIMENTAL) },
|
||||||
|
#define RUNTIME_MANAGEABLE_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_MANAGEABLE) },
|
||||||
|
#define RUNTIME_PRODUCT_RW_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_PRODUCT | Flag::KIND_READ_WRITE) },
|
||||||
|
#define RUNTIME_DEVELOP_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_DEVELOP) },
|
||||||
|
#define RUNTIME_PD_DEVELOP_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
|
||||||
|
#define RUNTIME_NOTPRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_NOT_PRODUCT) },
|
||||||
|
|
||||||
#define RUNTIME_PRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_PRODUCT) },
|
#define JVMCI_PRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_PRODUCT) },
|
||||||
#define RUNTIME_PD_PRODUCT_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
|
#define JVMCI_PD_PRODUCT_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
|
||||||
#define RUNTIME_DIAGNOSTIC_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_DIAGNOSTIC) },
|
#define JVMCI_DIAGNOSTIC_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_DIAGNOSTIC) },
|
||||||
#define RUNTIME_EXPERIMENTAL_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_EXPERIMENTAL) },
|
#define JVMCI_EXPERIMENTAL_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_EXPERIMENTAL) },
|
||||||
#define RUNTIME_MANAGEABLE_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_MANAGEABLE) },
|
#define JVMCI_DEVELOP_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_DEVELOP) },
|
||||||
#define RUNTIME_PRODUCT_RW_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_PRODUCT | Flag::KIND_READ_WRITE) },
|
#define JVMCI_PD_DEVELOP_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
|
||||||
#define RUNTIME_DEVELOP_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_DEVELOP) },
|
#define JVMCI_NOTPRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_NOT_PRODUCT) },
|
||||||
#define RUNTIME_PD_DEVELOP_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
|
|
||||||
#define RUNTIME_NOTPRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_NOT_PRODUCT) },
|
|
||||||
|
|
||||||
#define JVMCI_PRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_PRODUCT) },
|
|
||||||
#define JVMCI_PD_PRODUCT_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
|
|
||||||
#define JVMCI_DEVELOP_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_DEVELOP) },
|
|
||||||
#define JVMCI_PD_DEVELOP_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
|
|
||||||
#define JVMCI_DIAGNOSTIC_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_DIAGNOSTIC) },
|
|
||||||
#define JVMCI_EXPERIMENTAL_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_EXPERIMENTAL) },
|
|
||||||
#define JVMCI_NOTPRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_NOT_PRODUCT) },
|
|
||||||
|
|
||||||
#ifdef _LP64
|
#ifdef _LP64
|
||||||
#define RUNTIME_LP64_PRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_LP64_PRODUCT) },
|
#define RUNTIME_LP64_PRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_LP64_PRODUCT) },
|
||||||
#else
|
#else
|
||||||
#define RUNTIME_LP64_PRODUCT_FLAG_STRUCT(type, name, value, doc) /* flag is constant */
|
#define RUNTIME_LP64_PRODUCT_FLAG_STRUCT(type, name, value, doc) /* flag is constant */
|
||||||
#endif // _LP64
|
#endif // _LP64
|
||||||
|
|
||||||
#define C1_PRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_PRODUCT) },
|
#define C1_PRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_PRODUCT) },
|
||||||
#define C1_PD_PRODUCT_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
|
#define C1_PD_PRODUCT_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
|
||||||
#define C1_DIAGNOSTIC_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_DIAGNOSTIC) },
|
#define C1_DIAGNOSTIC_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_DIAGNOSTIC) },
|
||||||
#define C1_DEVELOP_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_DEVELOP) },
|
#define C1_DEVELOP_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_DEVELOP) },
|
||||||
#define C1_PD_DEVELOP_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
|
#define C1_PD_DEVELOP_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
|
||||||
#define C1_NOTPRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_NOT_PRODUCT) },
|
#define C1_NOTPRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_NOT_PRODUCT) },
|
||||||
|
|
||||||
#define C2_PRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_PRODUCT) },
|
#define C2_PRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_PRODUCT) },
|
||||||
#define C2_PD_PRODUCT_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
|
#define C2_PD_PRODUCT_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
|
||||||
#define C2_DIAGNOSTIC_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_DIAGNOSTIC) },
|
#define C2_DIAGNOSTIC_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_DIAGNOSTIC) },
|
||||||
#define C2_EXPERIMENTAL_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_EXPERIMENTAL) },
|
#define C2_EXPERIMENTAL_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_EXPERIMENTAL) },
|
||||||
#define C2_DEVELOP_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_DEVELOP) },
|
#define C2_DEVELOP_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_DEVELOP) },
|
||||||
#define C2_PD_DEVELOP_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
|
#define C2_PD_DEVELOP_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
|
||||||
#define C2_NOTPRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_NOT_PRODUCT) },
|
#define C2_NOTPRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_NOT_PRODUCT) },
|
||||||
|
|
||||||
#define ARCH_PRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_PRODUCT) },
|
#define ARCH_PRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_PRODUCT) },
|
||||||
#define ARCH_DIAGNOSTIC_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_DIAGNOSTIC) },
|
#define ARCH_DIAGNOSTIC_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_DIAGNOSTIC) },
|
||||||
#define ARCH_EXPERIMENTAL_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_EXPERIMENTAL) },
|
#define ARCH_EXPERIMENTAL_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_EXPERIMENTAL) },
|
||||||
#define ARCH_DEVELOP_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_DEVELOP) },
|
#define ARCH_DEVELOP_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_DEVELOP) },
|
||||||
#define ARCH_NOTPRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_NOT_PRODUCT) },
|
#define ARCH_NOTPRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_NOT_PRODUCT) },
|
||||||
|
|
||||||
#define SHARK_PRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_PRODUCT) },
|
#define SHARK_PRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_PRODUCT) },
|
||||||
#define SHARK_PD_PRODUCT_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
|
#define SHARK_PD_PRODUCT_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
|
||||||
#define SHARK_DIAGNOSTIC_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_DIAGNOSTIC) },
|
#define SHARK_DIAGNOSTIC_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_DIAGNOSTIC) },
|
||||||
#define SHARK_DEVELOP_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_DEVELOP) },
|
#define SHARK_DEVELOP_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_DEVELOP) },
|
||||||
#define SHARK_PD_DEVELOP_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
|
#define SHARK_PD_DEVELOP_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
|
||||||
#define SHARK_NOTPRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_NOT_PRODUCT) },
|
#define SHARK_NOTPRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_NOT_PRODUCT) },
|
||||||
|
|
||||||
static Flag flagTable[] = {
|
static Flag flagTable[] = {
|
||||||
RUNTIME_FLAGS(RUNTIME_DEVELOP_FLAG_STRUCT, \
|
RUNTIME_FLAGS(RUNTIME_DEVELOP_FLAG_STRUCT, \
|
||||||
|
|
|
@ -4293,9 +4293,9 @@ public:
|
||||||
#define DECLARE_MANAGEABLE_FLAG(type, name, value, doc) extern "C" type name;
|
#define DECLARE_MANAGEABLE_FLAG(type, name, value, doc) extern "C" type name;
|
||||||
#define DECLARE_PRODUCT_RW_FLAG(type, name, value, doc) extern "C" type name;
|
#define DECLARE_PRODUCT_RW_FLAG(type, name, value, doc) extern "C" type name;
|
||||||
#ifdef PRODUCT
|
#ifdef PRODUCT
|
||||||
#define DECLARE_DEVELOPER_FLAG(type, name, value, doc) extern "C" type CONST_##name; const type name = value;
|
#define DECLARE_DEVELOPER_FLAG(type, name, value, doc) const type name = value;
|
||||||
#define DECLARE_PD_DEVELOPER_FLAG(type, name, doc) extern "C" type CONST_##name; const type name = pd_##name;
|
#define DECLARE_PD_DEVELOPER_FLAG(type, name, doc) const type name = pd_##name;
|
||||||
#define DECLARE_NOTPRODUCT_FLAG(type, name, value, doc) extern "C" type CONST_##name;
|
#define DECLARE_NOTPRODUCT_FLAG(type, name, value, doc) const type name = value;
|
||||||
#else
|
#else
|
||||||
#define DECLARE_DEVELOPER_FLAG(type, name, value, doc) extern "C" type name;
|
#define DECLARE_DEVELOPER_FLAG(type, name, value, doc) extern "C" type name;
|
||||||
#define DECLARE_PD_DEVELOPER_FLAG(type, name, doc) extern "C" type name;
|
#define DECLARE_PD_DEVELOPER_FLAG(type, name, doc) extern "C" type name;
|
||||||
|
@ -4316,9 +4316,9 @@ public:
|
||||||
#define MATERIALIZE_MANAGEABLE_FLAG(type, name, value, doc) type name = value;
|
#define MATERIALIZE_MANAGEABLE_FLAG(type, name, value, doc) type name = value;
|
||||||
#define MATERIALIZE_PRODUCT_RW_FLAG(type, name, value, doc) type name = value;
|
#define MATERIALIZE_PRODUCT_RW_FLAG(type, name, value, doc) type name = value;
|
||||||
#ifdef PRODUCT
|
#ifdef PRODUCT
|
||||||
#define MATERIALIZE_DEVELOPER_FLAG(type, name, value, doc) type CONST_##name = value;
|
#define MATERIALIZE_DEVELOPER_FLAG(type, name, value, doc)
|
||||||
#define MATERIALIZE_PD_DEVELOPER_FLAG(type, name, doc) type CONST_##name = pd_##name;
|
#define MATERIALIZE_PD_DEVELOPER_FLAG(type, name, doc)
|
||||||
#define MATERIALIZE_NOTPRODUCT_FLAG(type, name, value, doc) type CONST_##name = value;
|
#define MATERIALIZE_NOTPRODUCT_FLAG(type, name, value, doc)
|
||||||
#else
|
#else
|
||||||
#define MATERIALIZE_DEVELOPER_FLAG(type, name, value, doc) type name = value;
|
#define MATERIALIZE_DEVELOPER_FLAG(type, name, value, doc) type name = value;
|
||||||
#define MATERIALIZE_PD_DEVELOPER_FLAG(type, name, doc) type name = pd_##name;
|
#define MATERIALIZE_PD_DEVELOPER_FLAG(type, name, doc) type name = pd_##name;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue