RFR(S) 8077504: Unsafe load can loose control dependency and cause crash

Roland Westrelin roland.westrelin at oracle.com
Wed Apr 22 16:18:03 UTC 2015

Hi Andrew,

Thanks for taking a look at this. See my answer below.

> I must admit I was a tad confused by your use of variable
> does_not_depend_only_on_test at library_call.cpp:2635. I understand that
> at this point you are trying to emphasise that this call gets passed
> false where other calls get passed true. So, in the call we see
>  Node* p = make_load(control(), adr, value_type, type, adr_type, mo,
>                      does_not_depend_only_on_test, is_volatile);
> which is fine when you understand what is going on. However, the
> preceding assignment:
>  bool does_not_depend_only_on_test = false;
> makes it look like you are suggesting that this case does depend only on
> the test.
> Would it not be clearer if you signalled what is happening by avoiding
> the bool var declarations and instead tagging the calls with an
> explanatory comment as follows:
>  Node* p = make_load(control(), adr, value_type, type, adr_type, mo,
>                      false, //does_not_depend_only_on_test
>                      is_volatile);
> vs
>  Node* p = make_load(control(), adr, value_type, type, adr_type, mo,
>                      true, //depends_only_on_test
>                      is_volatile);

I tried to use a code pattern that is used elsewhere in c2:

LoadLNode* LoadLNode::make_atomic(Node* ctl, Node* mem, Node* adr, const TypePtr* adr_type, const Type* rt, MemOrd mo) {
  bool require_atomic = true;
  return new LoadLNode(ctl, mem, adr, adr_type, rt->is_long(), mo, require_atomic);

I understand does_not_depend_only_on_test is confusing. I use that pattern because other options didn’t feel better and I can’t say I find it great.

Vladimir suggested privately to set _depends_only_on_test to true in the constructor and then use an explicit call to a new a method set_depends_only_on_test() to set it to false in the rare cases where it’s needed. That feels better indeed. What do you think?


> regards,
> Andrew Dinn
> -----------
> Senior Principal Software Engineer
> Red Hat UK Ltd
> Registered in UK and Wales under Company Registration No. 3798903
> Directors: Michael Cunningham (USA), Matt Parson (USA), Charlie Peters
> (USA), Michael O'Neill (Ireland)

More information about the hotspot-compiler-dev mailing list