src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotRetryableCompilation.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
*** old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotRetryableCompilation.java Fri Jul 7 09:30:16 2017
--- new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotRetryableCompilation.java Fri Jul 7 09:30:16 2017
*** 20,136 ****
--- 20,103 ----
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package org.graalvm.compiler.hotspot;
! import static org.graalvm.compiler.debug.DebugContext.VERBOSE_LEVEL;
! import static org.graalvm.compiler.debug.DelegatingDebugConfig.Feature.DUMP_METHOD;
! import static org.graalvm.compiler.debug.DelegatingDebugConfig.Level.DUMP;
! import static org.graalvm.compiler.debug.GraalDebugConfig.Options.Dump;
import static org.graalvm.compiler.debug.GraalDebugConfig.Options.DumpPath;
import static org.graalvm.compiler.debug.GraalDebugConfig.Options.ForceDebugEnable;
import static org.graalvm.compiler.debug.GraalDebugConfig.Options.PrintCFGFileName;
import static org.graalvm.compiler.debug.GraalDebugConfig.Options.PrintGraphFileName;
! import static org.graalvm.compiler.debug.DebugOptions.Dump;
! import static org.graalvm.compiler.debug.DebugOptions.DumpPath;
! import static org.graalvm.compiler.debug.DebugOptions.MethodFilter;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.nio.file.InvalidPathException;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collection;
! import org.graalvm.compiler.debug.Debug;
! import org.graalvm.compiler.debug.DebugDumpHandler;
! import org.graalvm.compiler.api.replacements.SnippetReflectionProvider;
! import org.graalvm.compiler.debug.DebugContext;
import org.graalvm.compiler.debug.DebugRetryableTask;
import org.graalvm.compiler.debug.TTY;
import org.graalvm.compiler.options.OptionValues;
! import org.graalvm.compiler.printer.GraalDebugConfigCustomizer;
! import org.graalvm.compiler.printer.GraalDebugHandlersFactory;
import jdk.vm.ci.code.BailoutException;
/**
* Utility for retrying a compilation that throws an exception where the retry enables extra logging
* for subsequently diagnosing the failure.
*/
public abstract class HotSpotRetryableCompilation<T> extends DebugRetryableTask<T> {
protected final OptionValues originalOptions;
protected final HotSpotGraalRuntimeProvider runtime;
- public HotSpotRetryableCompilation(HotSpotGraalRuntimeProvider runtime, OptionValues options) {
this.runtime = runtime;
this.originalOptions = options;
}
/**
* Gets a value that represents the compilation unit being compiled.
*/
@Override
public abstract String toString();
private static String sanitizedFileName(String name) {
StringBuilder buf = new StringBuilder(name.length());
for (int i = 0; i < name.length(); i++) {
char c = name.charAt(i);
try {
Paths.get(String.valueOf(c));
} catch (InvalidPathException e) {
buf.append('_');
}
buf.append(c);
}
return buf.toString();
}
@Override
! protected boolean onRetry(Throwable t) {
! protected DebugContext getRetryContext(DebugContext initialDebug, Throwable t) {
if (t instanceof BailoutException) {
! return false;
}
if (!Debug.isEnabled()) {
TTY.printf("Error while compiling %s due to %s.%nRe-run with -D%s%s=true to capture graph dumps upon a compilation failure.%n", this,
t, HotSpotGraalOptionValues.GRAAL_OPTION_PROPERTY_PREFIX, ForceDebugEnable.getName());
return false;
! return null;
}
if (Dump.hasBeenSet(originalOptions)) {
+ OptionValues initialOptions = initialDebug.getOptions();
+ if (Dump.hasBeenSet(initialOptions)) {
// If dumping is explicitly enabled, Graal is being debugged
// so don't interfere with what the user is expecting to see.
! return false;
! return null;
}
String outputDirectory = runtime.getOutputDirectory();
if (outputDirectory == null) {
! return false;
! return null;
}
! String dumpName = GraalDebugHandlersFactory.sanitizedFileName(toString());
File dumpPath = new File(outputDirectory, dumpName);
dumpPath.mkdirs();
if (!dumpPath.exists()) {
TTY.println("Warning: could not create dump directory " + dumpPath);
! return false;
! return null;
}
TTY.println("Retrying compilation of " + this + " due to " + t);
retryLogPath = new File(dumpPath, "retry.log").getPath();
log("Exception causing retry", t);
retryDumpHandlers = new ArrayList<>();
! retryOptions = new OptionValues(originalOptions,
! PrintCFGFileName, dumpName,
PrintGraphFileName, dumpName,
+ OptionValues retryOptions = new OptionValues(initialOptions,
! Dump, ":" + VERBOSE_LEVEL,
! MethodFilter, null,
DumpPath, dumpPath.getPath());
! override(DUMP, VERBOSE_LEVEL).enable(DUMP_METHOD);
! new GraalDebugConfigCustomizer().customize(this);
return true;
! SnippetReflectionProvider snippetReflection = runtime.getHostProviders().getSnippetReflection();
! return DebugContext.create(retryOptions, new GraalDebugHandlersFactory(snippetReflection));
}
private Collection<DebugDumpHandler> retryDumpHandlers;
private OptionValues retryOptions;
private String retryLogPath;
/**
* Prints a message to a retry log file.
*
*** 151,166 ****
--- 118,123 ----
} catch (FileNotFoundException e) {
TTY.println("Warning: could not open retry log file " + retryLogPath + " [" + e + "]");
}
}
}
@Override
public Collection<DebugDumpHandler> dumpHandlers() {
return retryDumpHandlers;
}
@Override
public OptionValues getOptions() {
return retryOptions;
}
}
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotRetryableCompilation.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File