Preserve aliasing info during memory intrinsics lowering
authorEvgeniy Brevnov <ybrevnov@azul.com>
Tue, 25 Jan 2022 06:17:57 +0000 (13:17 +0700)
committerEvgeniy Brevnov <ybrevnov@azul.com>
Wed, 6 Apr 2022 04:33:54 +0000 (11:33 +0700)
commitacfc785c0ef65d4177ed43ad4fb5c7c205904810
treeeeae8758b03bcfac03965983b8714663af0307db
parent9906d38252d112894f304ba1b4fbdcd2cc93ab19
Preserve aliasing info during  memory intrinsics lowering

By specification, source and destination of llvm.memcpy.* must either be equal or non-overlapping. This semantics is hard or impossible to figure out once lowered. This patch explicitly marks loads from source and stores to destination as not aliasing if source and destination is known to be not equal.

Reviewed By: arsenm

Differential Revision: https://reviews.llvm.org/D118441
llvm/include/llvm/Transforms/Utils/LowerMemIntrinsics.h
llvm/lib/Target/NVPTX/NVPTXLowerAggrCopies.cpp
llvm/lib/Transforms/Utils/LowerMemIntrinsics.cpp
llvm/unittests/Transforms/Utils/MemTransferLowering.cpp