We know that an argmemonly function can only access memory pointed to by it's arguments. Rather than needing to consider all possible stores as aliasing (as we do for a readonly function), we can only consider the aliasing of the pointer arguments.
Note that this change only addresses hoisting. I'm thinking about how to address speculation safety as well, but that will be a different change.
Is the function permitted to bitcast it's non-pointer parameters and store to them?