From: Evgeniy Stepanov Date: Wed, 3 Jul 2019 20:19:14 +0000 (+0000) Subject: Teach ValueTracking that aarch64.irg result aliases its input. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=68d24f572ea646ac709377027d5d9517399e5f20;p=llvm Teach ValueTracking that aarch64.irg result aliases its input. Reviewers: javed.absar, olista01 Subscribers: kristof.beyls, hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D64103 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@365079 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/ValueTracking.cpp b/lib/Analysis/ValueTracking.cpp index ebd214586d6..3ff5bf08599 100644 --- a/lib/Analysis/ValueTracking.cpp +++ b/lib/Analysis/ValueTracking.cpp @@ -3697,7 +3697,8 @@ const Value *llvm::getArgumentAliasingToReturnedPointer(const CallBase *Call) { bool llvm::isIntrinsicReturningPointerAliasingArgumentWithoutCapturing( const CallBase *Call) { return Call->getIntrinsicID() == Intrinsic::launder_invariant_group || - Call->getIntrinsicID() == Intrinsic::strip_invariant_group; + Call->getIntrinsicID() == Intrinsic::strip_invariant_group || + Call->getIntrinsicID() == Intrinsic::aarch64_irg; } /// \p PN defines a loop-variant pointer to an object. Check if the diff --git a/test/Analysis/ValueTracking/aarch64.irg.ll b/test/Analysis/ValueTracking/aarch64.irg.ll new file mode 100644 index 00000000000..75e198abe85 --- /dev/null +++ b/test/Analysis/ValueTracking/aarch64.irg.ll @@ -0,0 +1,18 @@ +; RUN: opt -S -instsimplify -instcombine < %s | FileCheck %s + +; CHECK-LABEL: define void @checkNonnullIrg() +define void @checkNonnullIrg() { +; CHECK: %[[p:.*]] = call i8* @llvm.aarch64.irg(i8* nonnull +; CHECK: call void @use(i8* nonnull %[[p]]) +entry: + %0 = alloca i8, align 16 + + %p = call i8* @llvm.aarch64.irg(i8* %0, i64 5) + call void @use(i8* %p) + + ret void +} + +declare i8* @llvm.aarch64.irg(i8*, i64) + +declare void @use(i8*)