NullPointerException in ControlFlowGraph.commonDominator during SchedulePhase
Deneau, Tom
tom.deneau at amd.com
Wed Mar 19 17:21:58 UTC 2014
Yes, that helped...
From: Lukas Stadler [mailto:lukas.stadler at oracle.com]
Sent: Wednesday, March 19, 2014 11:56 AM
To: Deneau, Tom
Cc: Gilles Duboscq; graal-dev at openjdk.java.net
Subject: Re: NullPointerException in ControlFlowGraph.commonDominator during SchedulePhase
A fix for this is on its way.
It sometimes happens for null-method graphs within inlining contexts - which may be why your change exposed it.
- Lukas
Here's the change:
--- graal/com.oracle.graal.printer/src/com/oracle/graal/printer/GraphPrinterDumpHandler.java
@@ -202,7 +202,7 @@
for (Object o : Debug.context()) {
JavaMethod method = asJavaMethod(o);
if (method != null) {
- if (lastMethodOrGraph == null || !asJavaMethod(lastMethodOrGraph).equals(method)) {
+ if (lastMethodOrGraph == null || asJavaMethod(lastMethodOrGraph) == null || !asJavaMethod(lastMethodOrGraph).equals(method)) {
result.add(MetaUtil.format("%H::%n(%p)", method));
} else {
// This prevents multiple adjacent method context objects for the same method
On 19 Mar 2014, at 17:31, Deneau, Tom <tom.deneau at amd.com<mailto:tom.deneau at amd.com>> wrote:
Gilles --
You're right, the nullPointerException in my original email was caught...
Here's a fuller stack trace...
I notice it is coming from the compileGraph for the host trampoline code.
But I don't understand why changing the SuitesProvider for the hsail compilation should affect this.
(and I only see it with -G:Dump=)
-- Tom
There was 1 failure:
1) test(com.oracle.graal.compiler.hsail.test.EscapingNewVec3Test)
com.oracle.graal.graph.GraalInternalError: java.lang.RuntimeException: Exception while intercepting exception
at node: 17|VMError
at com.oracle.graal.compiler.gen.LIRGenerator.doBlock(LIRGenerator.java:453)
at com.oracle.graal.compiler.GraalCompiler.emitBlock(GraalCompiler.java:215)
at com.oracle.graal.compiler.GraalCompiler.emitLIR(GraalCompiler.java:246)
at com.oracle.graal.compiler.GraalCompiler.compileGraph(GraalCompiler.java:149)
at com.oracle.graal.hotspot.hsail.HSAILHotSpotBackend.installKernel(HSAILHotSpotBackend.java:263)
at com.oracle.graal.hotspot.hsail.HSAILHotSpotBackend.compileAndInstallKernel(HSAILHotSpotBackend.java:142)
at com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester.dispatchKernelOkra(GraalKernelTester.java:115)
at com.oracle.graal.compiler.hsail.test.infra.KernelTester.dispatchMethodKernelOkra(KernelTester.java:635)
at com.oracle.graal.compiler.hsail.test.infra.KernelTester.dispatchMethodKernel(KernelTester.java:370)
at com.oracle.graal.compiler.hsail.test.EscapingNewVec3Base.runTest(EscapingNewVec3Base.java:32)
at com.oracle.graal.compiler.hsail.test.infra.KernelTester.runOkraInstance(KernelTester.java:786)
at com.oracle.graal.compiler.hsail.test.infra.KernelTester.compareOkraToSeq(KernelTester.java:776)
at com.oracle.graal.compiler.hsail.test.infra.KernelTester.compareOkraToSeq(KernelTester.java:761)
at com.oracle.graal.compiler.hsail.test.infra.KernelTester.testGeneratedHsail(KernelTester.java:799)
at com.oracle.graal.compiler.hsail.test.infra.GraalKernelTester.testGeneratedHsail(GraalKernelTester.java:148)
at com.oracle.graal.compiler.hsail.test.EscapingNewVec3Test.test(EscapingNewVec3Test.java:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:24)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
at org.junit.runner.JUnitCore.run(JUnitCore.java:136)
at org.junit.runner.JUnitCore.run(JUnitCore.java:117)
at org.junit.runner.JUnitCore.runMain(JUnitCore.java:98)
at org.junit.runner.JUnitCore.runMainAndExit(JUnitCore.java:53)
at org.junit.runner.JUnitCore.main(JUnitCore.java:45)
Caused by: java.lang.RuntimeException: Exception while intercepting exception
at com.oracle.graal.debug.internal.DebugScope.interceptException(DebugScope.java:299)
at com.oracle.graal.debug.internal.DebugScope.handle(DebugScope.java:254)
at com.oracle.graal.debug.Debug.handle(Debug.java:232)
at com.oracle.graal.compiler.GraalCompiler.compileGraph(GraalCompiler.java:145)
at com.oracle.graal.hotspot.stubs.Stub.getCode(Stub.java:148)
at com.oracle.graal.hotspot.HotSpotForeignCallLinkage.finalizeAddress(HotSpotForeignCallLinkage.java:231)
at com.oracle.graal.hotspot.meta.HotSpotForeignCallsProviderImpl.lookupForeignCall(HotSpotForeignCallsProviderImpl.java:139)
at com.oracle.graal.hotspot.meta.HotSpotForeignCallsProviderImpl.lookupForeignCall(HotSpotForeignCallsProviderImpl.java:42)
at com.oracle.graal.hotspot.nodes.VMErrorNode.generate(VMErrorNode.java:60)
at com.oracle.graal.compiler.gen.LIRGenerator.emitNode(LIRGenerator.java:515)
at com.oracle.graal.compiler.gen.LIRGenerator.doRoot(LIRGenerator.java:506)
at com.oracle.graal.compiler.gen.LIRGenerator.doBlock(LIRGenerator.java:449)
... 45 more
Caused by: java.lang.NullPointerException
at com.oracle.graal.printer.GraphPrinterDumpHandler.getInlineContext(GraphPrinterDumpHandler.java:205)
at com.oracle.graal.printer.GraphPrinterDumpHandler.dump(GraphPrinterDumpHandler.java:157)
at com.oracle.graal.debug.internal.DebugScope.dump(DebugScope.java:203)
at com.oracle.graal.debug.Debug.dump(Debug.java:269)
at com.oracle.graal.compiler.GraalDebugConfig.interceptException(GraalDebugConfig.java:225)
at com.oracle.graal.debug.internal.DebugScope.interceptException(DebugScope.java:297)
... 56 more
-----Original Message-----
From: gilwooden at gmail.com<mailto:gilwooden at gmail.com> [mailto:gilwooden at gmail.com] On Behalf Of
Gilles Duboscq
Sent: Wednesday, March 19, 2014 6:02 AM
To: Deneau, Tom
Cc: graal-dev at openjdk.java.net<mailto:graal-dev at openjdk.java.net>
Subject: Re: NullPointerException in ControlFlowGraph.commonDominator
during SchedulePhase
Hello Tom,
Do you have any more context (full stack trace)?
When dumping, there can be exceptions in the schedules that are used for
dumping but those should in theory just be ignored.
-Gilles
On Tue, Mar 18, 2014 at 10:56 PM, Tom Deneau <tom.deneau at amd.com<mailto:tom.deneau at amd.com>> wrote:
I noticed in some hsail junit tests that were storing objects that I
didn't see the card table setting code. I remember this was working
about 4 months ago but we haven't really looked at Object Storing junits
since then and I know a lot of the infrastructure has changed since
then. Anyway in igv I noticed that the WriteBarrierAdditionPhase was
not one of the phases for hsail compileGraph.
Previously the setup in HSAILHotSpotBackendFactory was
SuitesProvider suites = new DefaultSuitesProvider();
which I changed to the following to make it match more the
AMD64HotSpotBackendFactory
SuitesProvider suites = new HotSpotSuitesProvider(runtime);
This seemed to do the trick as far as generating the card table
stores, but now I notice when I run with -G:Dump=, I get a
NullPointerException during the SchedulePhase
[1] com.oracle.graal.nodes.cfg.ControlFlowGraph.commonDominator
(ControlFlowGraph.java:336)
[2]
com.oracle.graal.phases.schedule.SchedulePhase$CommonDominatorBlockClosu
re.apply (SchedulePhase.java:625)
[3] com.oracle.graal.phases.schedule.SchedulePhase.blocksForUsage
(SchedulePhase.java:780)
[4] com.oracle.graal.phases.schedule.SchedulePhase.latestBlock
(SchedulePhase.java:599)
[5] com.oracle.graal.phases.schedule.SchedulePhase.assignBlockToNode
(SchedulePhase.java:417)
[6]
com.oracle.graal.phases.schedule.SchedulePhase.assignBlockToNodes
(SchedulePhase.java:379)
[7] com.oracle.graal.phases.schedule.SchedulePhase.run
(SchedulePhase.java:273)
I admit I didn't really look at all the differences between
DefaultSuitesProvider and HotSpotSuitesProvider(runtime) but does anyone
have any suggestions as to what might be causing this?
-- Tom
More information about the graal-dev
mailing list