This is part of the series started by D68484.
This pass moves llvm.noalias intrinsics to the ptr_provenance path of
load/store instructions. At the same time, they are converted into
llvm.provenance.noalias intrinsics. For llvm.noalias intrinsics that are
returned or passed as arguments, a llvm.noalias.arg.guard is introduced,
combining the pointer path and the ptr_provenance path.
This migration allows other optimization passes to do changes on the
normal pointer path, without impacting the ptr_provenance path that
contains the restrict/noalias related information.
Note: this is a stable point and tests should run fine with the patches applied up to this point.
A testcase from Alexey, triggers this FIXME (see http://lists.llvm.org/pipermail/llvm-dev/2020-February/139358.html)
We should do the same here as in lines 810-835, but on Operand 0.
As this is the third time we have this kind of code, it should also be refactored out.