From fa5d31f825699b0fe858d4f432bd3fbbbec523c8 Mon Sep 17 00:00:00 2001 From: Michael Liao Date: Mon, 26 Oct 2020 12:17:42 -0400 Subject: [PATCH] [GlobalsAA] Teach to handle `addrspacecast`. --- llvm/lib/Analysis/GlobalsModRef.cpp | 3 ++- llvm/test/Analysis/GlobalsModRef/addrspacecast.ll | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 llvm/test/Analysis/GlobalsModRef/addrspacecast.ll diff --git a/llvm/lib/Analysis/GlobalsModRef.cpp b/llvm/lib/Analysis/GlobalsModRef.cpp index a9df8238..34669d0 100644 --- a/llvm/lib/Analysis/GlobalsModRef.cpp +++ b/llvm/lib/Analysis/GlobalsModRef.cpp @@ -367,7 +367,8 @@ bool GlobalsAAResult::AnalyzeUsesOfPointer(Value *V, } else if (Operator::getOpcode(I) == Instruction::GetElementPtr) { if (AnalyzeUsesOfPointer(I, Readers, Writers)) return true; - } else if (Operator::getOpcode(I) == Instruction::BitCast) { + } else if (Operator::getOpcode(I) == Instruction::BitCast || + Operator::getOpcode(I) == Instruction::AddrSpaceCast) { if (AnalyzeUsesOfPointer(I, Readers, Writers, OkayStoreDest)) return true; } else if (auto *Call = dyn_cast(I)) { diff --git a/llvm/test/Analysis/GlobalsModRef/addrspacecast.ll b/llvm/test/Analysis/GlobalsModRef/addrspacecast.ll new file mode 100644 index 0000000..f626fd1 --- /dev/null +++ b/llvm/test/Analysis/GlobalsModRef/addrspacecast.ll @@ -0,0 +1,15 @@ +; RUN: opt -globals-aa -aa-eval -print-all-alias-modref-info -disable-output %s 2>&1 | FileCheck %s + +@g0 = internal addrspace(3) global i32 undef + +; CHECK-LABEL: test1 +; CHECK-DAG: NoAlias: i32* %gp, i32* %p +; CHECK-DAG: NoAlias: i32 addrspace(3)* @g0, i32* %p +; CHECK-DAG: MustAlias: i32 addrspace(3)* @g0, i32* %gp +define i32 @test1(i32* %p) { + %gp = addrspacecast i32 addrspace(3)* @g0 to i32* + store i32 0, i32* %gp + store i32 1, i32* %p + %v = load i32, i32* %gp + ret i32 %v +} -- 2.7.4