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.