We now use memory behavior and memory location information to deduce
`noalias` for (call site) arguments. The key idea is that `noalias` does not prevent aliases but accesses that would cause a race if executed concurrently. We do this in two ways: [(1) At the call site] If the callee will not access "unknown" memory locations we can look at the global and argument locations that are accessed and determine if the call site operand aliases with the globals or the call site operands associated with the arguments. If not, `noalias` can be deduced. [(2) In the callee] No matter what accesses the callee contains, if we know the ones that happen for a given call site do not alias with an argument the associated call site operand is `noalias`.
Don't we need to look at constant memories?