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