Reapply [AA] No synchronization effects for never-escaping identified local (#196923)
Relative to the previous attempt, this makes sure that the location does
not alias with the pointer operand first. If it aliases, then we need to
consider the direct ModRef effects of the instruction, not just the
synchronization effects.
-----
Fences and other synchronizing operations (such as atomic accesses
stronger than monotonic) are modelled as reading and writing all memory,
in order to enforce their implied ordering constraints.
Currently, this happens even for identified function locals that do not
escape. This patch excludes those objects.
Notably, we can not reason based on captures-before here, because the
synchronizing operation still has an effect even if the object only
escapes later.
The hope here is that with this restriction in place, it may be viable
to respect potential synchronization inside non-nosync function calls.