NullPointerException in ControlFlowGraph.commonDominator during SchedulePhase

Lukas Stadler lukas.stadler at oracle.com
Wed Mar 19 16:55:41 UTC 2014


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> 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] On Behalf Of
>> Gilles Duboscq
>> Sent: Wednesday, March 19, 2014 6:02 AM
>> To: Deneau, Tom
>> Cc: 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> 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