checkSnippetKills
Bernhard Urban
bernhard.urban at jku.at
Thu Mar 27 10:23:19 UTC 2014
On Wed, Mar 26, 2014 at 11:35 PM, Deneau, Tom <tom.deneau at amd.com> wrote:
> Bernhard --
>
>
>
> OK, so if in my own snippets I only plan to use snippet counters outside
> of stubs, I only need the change to SnippetCounter.java itself, is that
> correct?
>
Yes.
> Were the NewObjectSnippets the only ones where snippets could be used
> inside of stubs?
>
Every snippet code can be used inside a snippet stub, but I think it was
the only case where we had this problem of dragging in snippet counters on
amd64hotspot.
-Bernhard
>
>
> -- Tom
>
>
>
> *From:* lewurm at gmail.com [mailto:lewurm at gmail.com] *On Behalf Of *Bernhard
> Urban
> *Sent:* Wednesday, March 26, 2014 4:30 PM
> *To:* Deneau, Tom
> *Cc:* graal-dev at openjdk.java.net
> *Subject:* Re: checkSnippetKills
>
>
>
> Hi Tom,
>
>
>
> thanks, there's indeed a problem around SnippetCounters. First, as a
> comment in the snippet counter implementation already suggest, it should
> not use ANY_LOCATION but a separate location designated to snippet
> counters. After doing that, it exposes another problem around HotSpot
> stubs. Stubs are not allowed to embed oops in their code. Thus my fix
> excludes snippet counters in snippets designed for stubs.
>
>
>
> Apparently we don't use snippet counters that much lately ;-) I'm pushing
> it through the gate now, in the meanwhile you can fetch the patch from
> here: http://lafo.ssw.uni-linz.ac.at/lewurm/snippetcounters.patch
>
>
>
> -Bernhard
>
>
>
> On Wed, Mar 26, 2014 at 8:36 PM, Deneau, Tom <tom.deneau at amd.com> wrote:
>
> I just tried this with the amd64 backend and got similar results
> I compiled:
> MyObj[] escapingObject;
>
> public void newObjTest(int gid) {
> escapingObject[gid] = new MyObj();
> }
>
> and using -G:+SnippetCounters
>
> The log showed
>
> Lowering allocateInstance in
> StructuredGraph:18{HotSpotMethod<BasicTest2.newObjTest(int)>}:
> node=159|NewInstance,
> template=StructuredGraph:39{HotSpotMethod<NewObjectSnippets.allocateInstance(int,
> Word, Word, boolean, Register, boolean, String)>}(<constant> [0], long [1],
> <unused> [2], <constant> [3], <constant> [4], <constant> [5], <constant>
> [6]), arguments=Parameters<NewObjectSnippets.allocateInstance [const size =
> 16, hub = 124|Const(4296021216), prototypeMarkWord = 5, const fillContents
> = true, const threadRegister = r15, const constantSize = true, const
> typeContext = >
> WARNING: 159|NewInstance is not a MemoryCheckpoint, but
> the snippet graph contains kills ([ANY_LOCATION]). You might want
> 159|NewInstance to be a MemoryCheckpoint
> [thread:1] scope:
> BasicTest2.Compiling.GraalCompiler.FrontEnd.LowTier.Lowering.IncrementalCanonicalizer.LoweringIteration0.InterceptException
> Exception occurred in scope:
> BasicTest2.Compiling.GraalCompiler.FrontEnd.LowTier.Lowering.IncrementalCanonicalizer.LoweringIteration0.InterceptException
> Context obj java.lang.AssertionError: snippet graph
> contains a kill to ANY_LOCATION, but replacee (159|NewInstance) doesn't
> kill ANY_LOCATION. kills: [ANY_LOCATION]
>
>
>
>
> > -----Original Message-----
> > From: Deneau, Tom
> > Sent: Wednesday, March 26, 2014 2:27 PM
> > To: graal-dev at openjdk.java.net
> > Subject: checkSnippetKills
> >
> > I have a snippet for NewInstance that works but I wanted to increment a
> > snippet counter on one of the paths thru the snippet. After doing that
> > and using -G:+SnippetCounters, I get the following error:
> >
> > java.lang.AssertionError: snippet graph contains a kill to ANY_LOCATION,
> > but replacee (333|NewInstance) doesn't kill ANY_LOCATION. kills:
> > [ANY_LOCATION, Initialization]
> > at
> > com.oracle.graal.replacements.SnippetTemplate.checkSnippetKills(SnippetT
> > emplate.java:946)
> >
> > How should this be corrected?
> >
> > -- Tom
>
>
>
More information about the graal-dev
mailing list