RFR: Simpler obj equals barrier for C2
Roman Kennke
rkennke at redhat.com
Tue Sep 11 14:44:47 UTC 2018
>> Ok. But how would I notice? The test suite works ok. I'll also run some
>> other stuff (e.g. specjvm/jbb).
>
> The test suite must not test those intrinsics then.
There's 3 affected intrinsics:
- isInterrupted: this one did not actually change
- subtype-check: this seems likely to trigger, and in-fact I have seen
it trigger because I had a bug in my barrier
- aes-crypt: this one will likely not trigger by the test-suite, but by
specjvm. I'm running it now.
>> Also, the WB code only produces memory in the Shenandoah brooks pointer
>> slice(s), and it takes care of producing the memphis as needed. Maybe
>> this is good enough?
>
> It doesn't take care of producing memphis.
>
> if (some_condition) {
> a = wb(a);
> b = wb(b);
> if (a == b) {
> // do something
> }
> } // need a mem phi here
>
> A way around this is to do this, instead:
>
> a = wb(a);
> b = wb(b);
>
> if (some_condition) {
> if (a == b) {
> // do something
> }
> }
>
> The library_call.cpp code either adds the required mem phis or adds the
> barrier so there's no need for phis (they are in some cases tricky to
> add because of the way the code is structured).
WBs work in all other places, and produces the memphis that it needs,
afaik. I don't really understand why it wouldn't here.
> Can we go back to what we had before?
To what? This change hasn't been pushed yet. Do you mean the
access_resolve_for_cmpoop() applied to all the places? To be honest,
only if we can't make this here work ;-)
Roman
More information about the shenandoah-dev
mailing list