# HG changeset patch # User Doug Simon # Date 1340371219 -7200 # Node ID 5a29310e150426509b64006656b2a1074fcdeb67 # Parent 0ca242de93836392bcdf61ed85cc2fad62febf6f# Parent 7482f7d084550e54ac518e71ea49a884bd75ee99 Merge. diff -r 0ca242de9383 -r 5a29310e1504 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Fri Jun 22 15:19:43 2012 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Fri Jun 22 15:20:19 2012 +0200 @@ -153,7 +153,7 @@ plan.runPhases(PhasePosition.HIGH_LEVEL, graph); if (GraalOptions.FullUnroll) { - new LoopFullUnrollPhase().apply(graph); + new LoopFullUnrollPhase(runtime).apply(graph); } if (GraalOptions.EscapeAnalysis && !plan.isPhaseDisabled(EscapeAnalysisPhase.class)) { diff -r 0ca242de9383 -r 5a29310e1504 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/LoopTransformations.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/LoopTransformations.java Fri Jun 22 15:19:43 2012 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/LoopTransformations.java Fri Jun 22 15:20:19 2012 +0200 @@ -22,6 +22,7 @@ */ package com.oracle.graal.compiler.loop; +import com.oracle.graal.api.code.*; import com.oracle.graal.compiler.phases.*; import com.oracle.graal.nodes.*; @@ -43,14 +44,14 @@ loop.inside().duplicate().insertBefore(loop); } - public static void fullUnroll(LoopEx loop) { + public static void fullUnroll(LoopEx loop, CodeCacheProvider runtime) { //assert loop.isCounted(); //TODO (gd) strenghten : counted with known trip count LoopBeginNode loopBegin = loop.loopBegin(); StructuredGraph graph = (StructuredGraph) loopBegin.graph(); while (!loopBegin.isDeleted()) { int mark = graph.getMark(); peel(loop); - new CanonicalizerPhase(null, null, null, mark, null).apply(graph); + new CanonicalizerPhase(null, runtime, null, mark, null).apply(graph); } } diff -r 0ca242de9383 -r 5a29310e1504 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/LoopFullUnrollPhase.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/LoopFullUnrollPhase.java Fri Jun 22 15:19:43 2012 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/LoopFullUnrollPhase.java Fri Jun 22 15:20:19 2012 +0200 @@ -23,11 +23,17 @@ package com.oracle.graal.compiler.phases; import com.oracle.graal.compiler.loop.*; +import com.oracle.graal.cri.*; import com.oracle.graal.debug.*; import com.oracle.graal.nodes.*; public class LoopFullUnrollPhase extends Phase { + private final ExtendedRiRuntime runtime; + + public LoopFullUnrollPhase(ExtendedRiRuntime runtime) { + this.runtime = runtime; + } @Override protected void run(StructuredGraph graph) { @@ -40,7 +46,7 @@ for (final LoopEx loop : dataCounted.countedLoops()) { if (LoopPolicies.shouldFullUnroll(loop)) { Debug.log("FullUnroll %s", loop); - LoopTransformations.fullUnroll(loop); + LoopTransformations.fullUnroll(loop, runtime); Debug.dump(graph, "After fullUnroll %s", loop); peeled = true; break; diff -r 0ca242de9383 -r 5a29310e1504 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java Fri Jun 22 15:19:43 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java Fri Jun 22 15:20:19 2012 +0200 @@ -84,7 +84,7 @@ Constant trueConstant = conditionalNode.trueValue().asConstant(); Constant falseConstant = conditionalNode.falseValue().asConstant(); - if (falseConstant != null && trueConstant != null) { + if (falseConstant != null && trueConstant != null && runtime != null) { Boolean trueResult = cond.foldCondition(trueConstant, constant, runtime, unorderedIsTrue()); Boolean falseResult = cond.foldCondition(falseConstant, constant, runtime, unorderedIsTrue()); @@ -114,7 +114,7 @@ } public ValueNode canonical(CanonicalizerTool tool) { - if (x().isConstant() && y().isConstant()) { + if (x().isConstant() && y().isConstant() && tool.runtime() != null) { return ConstantNode.forBoolean(condition().foldCondition(x().asConstant(), y().asConstant(), tool.runtime(), unorderedIsTrue()), graph()); } if (x().isConstant()) { diff -r 0ca242de9383 -r 5a29310e1504 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/Condition.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/Condition.java Fri Jun 22 15:19:43 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/Condition.java Fri Jun 22 15:20:19 2012 +0200 @@ -259,7 +259,7 @@ * @param unorderedIsTrue true if an undecided float comparison should result in "true" * @return true if the comparison is known to be true, false if the comparison is known to be false */ - public boolean foldCondition(Constant lt, Constant rt, CodeCacheProvider runtime, boolean unorderedIsTrue) { + public boolean foldCondition(Constant lt, Constant rt, MetaAccessProvider runtime, boolean unorderedIsTrue) { switch (lt.kind) { case Boolean: case Byte: diff -r 0ca242de9383 -r 5a29310e1504 graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/SnippetTemplate.java --- a/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/SnippetTemplate.java Fri Jun 22 15:19:43 2012 +0200 +++ b/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/SnippetTemplate.java Fri Jun 22 15:20:19 2012 +0200 @@ -270,7 +270,7 @@ if (loopBegin != null) { LoopEx loop = new LoopsData(snippetCopy).loop(loopBegin); int mark = snippetCopy.getMark(); - LoopTransformations.fullUnroll(loop); + LoopTransformations.fullUnroll(loop, runtime); new CanonicalizerPhase(null, runtime, null, mark, null).apply(snippetCopy); } FixedNode explodeLoopNext = explodeLoop.next(); diff -r 0ca242de9383 -r 5a29310e1504 mx/commands.py --- a/mx/commands.py Fri Jun 22 15:19:43 2012 +0200 +++ b/mx/commands.py Fri Jun 22 15:20:19 2012 +0200 @@ -286,13 +286,23 @@ def _vmLibDirInJdk(jdk): """ - Get the directory within a JDK where jvm.cfg file and the server - and client subdirectories are located. + Get the directory within a JDK where the server and client + subdirectories are located. """ if platform.system() == 'Darwin': return join(jdk, 'jre', 'lib') + if platform.system() == 'Windows': + return join(jdk, 'jre', 'bin') return join(jdk, 'jre', 'lib', 'amd64') +def _vmCfgInJdk(jdk): + """ + Get the jvm.cfg file. + """ + if platform.system() == 'Windows': + return join(jdk, 'jre', 'lib', 'amd64', 'jvm.cfg') + return join(_vmLibDirInJdk(jdk), 'jvm.cfg') + def _jdk(build='product', create=False): """ Get the JDK into which Graal is installed, creating it first if necessary. @@ -315,7 +325,7 @@ # Make a copy of the default VM so that this JDK can be # reliably used as the bootstrap for a HotSpot build. - jvmCfg = join(_vmLibDirInJdk(jdk), 'jvm.cfg') + jvmCfg = _vmCfgInJdk(jdk) if not exists(jvmCfg): mx.abort(jvmCfg + ' does not exist') @@ -364,9 +374,9 @@ log = open(logFile, 'w') ret = False while True: - line = stdout.readline().decode() + line = stdout.readline().decode(sys.stdout.encoding) if logFile: - log.write(line) + log.write(line.encode('utf-8')) line = line.strip() mx.log(line) if line == STARTTOKEN: @@ -380,7 +390,14 @@ if match: ret = True if line == ENDTOKEN: - break + if not findInOutput: + stdin.write('echo ERR%errorlevel%' + newLine) + else: + break + if line.startswith('ERR'): + if line == 'ERR0': + ret = True + break; stdin.write('exit' + newLine) if logFile: log.close() @@ -495,8 +512,7 @@ mx.log('Error executing create command') return winBuildCmd = 'msbuild ' + _graal_home + r'\build\vs-amd64\jvm.vcxproj /p:Configuration=' + project_config + ' /p:Platform=x64' - winBuildSuccess = re.compile('Build succeeded.') - if not _runInDebugShell(winBuildCmd, _graal_home, compilelogfile, winBuildSuccess): + if not _runInDebugShell(winBuildCmd, _graal_home, compilelogfile): mx.log('Error building project') return else: @@ -516,7 +532,7 @@ mx.run([mx.gmake_cmd(), build + buildSuffix], cwd=join(_graal_home, 'make'), err=filterXusage) - jvmCfg = join(_vmLibDirInJdk(jdk), 'jvm.cfg') + jvmCfg = _vmCfgInJdk(jdk) found = False if not exists(jvmCfg): mx.abort(jvmCfg + ' does not exist')