This is the first and most basic and important step for inlining memory operations with alias scopes.
For correctness, it is required that any alias scopes of inlined operations are replaced with deep copies. This is necessary as otherwise the same function could be inlined twice in one function, and suddenly the alias scopes extended.
A simple example would be foo(a, b); foo(a2, b2). a and a2 may alias. If foo is inlined in both instances, the store and load operations from foo may suddenly claim that a and a2 do not alias if we were to keep the original alias scopes.
This is analogous to the following class/code in LLVM: https://github.com/llvm/llvm-project/blob/4eef2e30d6f89328a16d4f1d6b37f1c79afe850c/llvm/lib/Transforms/Utils/InlineFunction.cpp#L985
This is the convention used throughout the file 🙂