On Jul 12, 2012, at 6:27 PM, Vladimir Kozlov wrote: > John, > > sharedRuntime_sparc.cpp: > Why casting to (int)? Also use pointer_delta(code_end, code_start,1): > + __ set((int)(intptr_t)(code_end - code_start), temp2_reg);
Done. > > You bound L_fail label twice, it should be local in range_check(). Use brx() > instead of br() since you compare pointers. And use cmp_and_brx_short() if > delayed instruction is nop(). Done. > > Use fatal() instead of guarantee: > guarantee(false, err_msg("special_dispatch=%d", special_dispatch)); Done. > > interpreter_sparc.cpp: > In generate_method_entry() use fatal() instead of ShouldNotReachHere(): > fatal(err_msg("unexpected method kind: %d", kind)); Good idea. Done. > > > methodHandles_sparc.cpp: > In MethodHandles::verify_klass() calls restore() should be after BINDs. Argh. I haven't seen you've found this bug. It took me a while to debug this :-) > > In MethodHandles::jump_from_method_handle() use cmp_and_br_short(temp, 0, ) Done. > > Instead of 100 use strlen(name)+50: > + char* qname = NEW_C_HEAP_ARRAY(char, 100); > + jio_snprintf(qname, 100, Done. > > sharedRuntime_x86_32.cpp: > sharedRuntime_x86_64.cpp: > The same problem with L_fail label as in sharedRuntime_sparc.cpp. Done. > > templateInterpreter_x86_32.cpp: > templateInterpreter_x86_64.cpp: > Again use use fatal() instead of ShouldNotReachHere() in > generate_method_entry() Done. > > I see in several files next code pattern. Should we call > throw_IncompatibleClassChangeError() as we do in other places?: > > + if (!EnableInvokeDynamic) { > + // rewriter does not generate this bytecode > + __ should_not_reach_here(); > + return; > + } Hmm. This really should not happen and EnableInvokeDynamic is on by default anyway. I doubt someone turns it off. > > c1_FrameMap.cpp: > Why is ShouldNotReachHere() for mh_invoke in > FrameMap::java_calling_convention()? That was old, unused code. Removed. > > c1_GraphBuilder.cpp: > add parenthesis: > const bool is_invokedynamic = code == Bytecodes::_invokedynamic; Done. > > nmethod.cpp: > Don't put printing nmethod's addresses under Verbose flag. Leftover. Removed. > > linkResolver.cpp: > Can you replace infinite for(;;) in resolve_invokedynamic() with finite loop > since the body is executed once or twice. Hmm. What limit do you have in mind? > > templateInterpreter.cpp: > why you need additional {} around the loop? We don't. I think it was used for better visibility of the MH code. Removed. > > constantPoolOop.cpp: > Why not use guarantee() for bad operants? Not sure. John? > Why you need separate scopes in resolve_bootstrap_specifier_at_impl()? To keep oops from being visible. Might result in bad crashes. > > symbol.cpp: > The loop in index_of_at() should be for(; scan <= limit; scan++) and after > loop return -1. Done. > > bytecodeInfo.cpp: > Don't add spaces into conditions, looks strange. It's more readable: if ( callee->is_native()) return "native method"; if ( callee->is_abstract()) return "abstract method"; if (!callee->can_be_compiled()) return "not compilable (disabled)"; if (!callee->has_balanced_monitors()) return "not compilable (unbalanced monitors)"; if ( callee->get_flow_analysis()->failing()) return "not compilable (flow analysis failed)"; vs. if (callee->is_native()) return "native method"; if (callee->is_abstract()) return "abstract method"; if (!callee->can_be_compiled()) return "not compilable (disabled)"; if (!callee->has_balanced_monitors()) return "not compilable (unbalanced monitors)"; if (callee->get_flow_analysis()->failing()) return "not compilable (flow analysis failed)"; You REALLY want me to remove it? ;-) > Remove commented code for inline ForceInline methods. Agreed. We need to revisit that anyway. > > callGenerator.cpp: > Please, decide which code to use: +#if 1. And I don't think new code is > correct. PredictedDynamicCallGenerator is dead. Removed. > > graphKit.cpp: > Remove commented debug print. Done. > insert_argument() and remove_argument() are not used. Correct. Removed. I will refresh the review patch in mlvm. Thank you! -- Chris > > > Vladimir > > John Rose wrote: >> As some of you have noticed, Chris Thalinger, Michael Haupt, and I have been >> working on the mlvm patches [1] for JEP-160 [2] for several months. These >> changes make method handles more optimizable. They refactor lots of "magic" >> out of the JVM and into more manageable Java code. >> To get an idea of how much "magic" is being removed, consider that the >> change removes 12,000 lines of non-comment code from the JVM, including much >> assembly code. It inserts 4900 lines of non-comment code. >> These changes are now stable enough to integrate. They pass jtreg tests in >> a number of execution modes and platforms. They also correctly run various >> JRuby and Nashorn test programs. Although there are no performance gains to >> boast about at present, these changes clear the ground for long-term >> optimization work. >> Here is the webrev [3], for review and integration into JDK 8 via >> hotspot-comp/hotspot/. >> Because of the large size of this change set, we request that reviewers >> would clearly designate which files they are reviewing. That way we may be >> able to divide up the work a little more effectively. >> Also, because of the scope of the change, we may respond to some comments by >> promising to address an issue in a future change set. If necessary, we will >> file tracking bugs to make sure nothing gets dropped. We have been working >> on this for months, and expect to make many further changes. >> The immediate need to get the changes in is twofold: First, some bugs >> (involving symbolic references off the boot class path) require the new >> Lambda Form intermediate representation, which is "off-BCP-clean". Second, >> we need to commit our pervasive changes to the JVM sooner rather than later, >> so they can be properly integrated with other pervasive changes, such as >> metadata changes. >> An associated webrev for hotspot-comp/jdk/ will be posted soon; it is >> already present on mlvm-dev for the curious to examine. (This change set >> also deletes a lot of old code.) >> Thanks in advance, >> — John >> [1] >> http://hg.openjdk.java.net/mlvm/mlvm/hotspot/file/tip/meth-lazy-7023639.patch >> [2] http://openjdk.java.net/jeps/160 >> [3] http://cr.openjdk.java.net/~jrose/7023639/webrev.00/ _______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev