diff --git a/llvm/include/llvm/IR/PassManager.h b/llvm/include/llvm/IR/PassManager.h --- a/llvm/include/llvm/IR/PassManager.h +++ b/llvm/include/llvm/IR/PassManager.h @@ -1061,7 +1061,16 @@ /// /// This proxy only exposes the const interface of the outer analysis manager, /// to indicate that you cannot cause an outer analysis to run from within an -/// inner pass. Instead, you must rely on the \c getCachedResult API. +/// inner pass. Instead, you must rely on the \c getCachedResult API. This is +/// due to keeping potential future concurrency in mind. To give an example, +/// running a module analysis before any function passes may give a different +/// result than running it in a function pass. Both may be valid, but it would +/// produce non-deterministic results. GlobalsAA is a good analysis example, +/// because the cached information has the mod/ref info for all memory for each +/// function at the time the analysis was computed. The information is still +/// valid after a function transformation, but it may be *different* if +/// recomputed after that transform. GlobalsAA is never invalidated. + /// /// This proxy doesn't manage invalidation in any way -- that is handled by the /// recursive return path of each layer of the pass manager. A consequence of