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