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