We should remove noalias along with dereference and dereference_or_null attributes. Problem is that statepoint could potentially touch the entire heap including noalias objects. For example in this piece of code:
%obj = call noalias %jObject* new_instance(...) store %val, %obj ; last use of %obj call gc.statepoint()
Llvm will consider that %obj and statepoint call do not alias and move store after the statepoint.
I'd prefer a name like isNoAlias, since doesNotAlias begs the question "does not alias what?".
And I think the does not alias other parameters bit is not accurate for return values.