From 1b5cf6217e8e829bd6af02dad408d30f553897b5 Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Thu, 14 Jul 2016 15:50:27 +0000 Subject: GlobalsAA: Functions with the argmemonly attribute won't read arbitrary globals Summary: In preparation for changing GlobalsAA to stop assuming that intrinsics can't read arbitrary globals, we need to make sure GlobalsAA is querying function attributes rather than relying on this assumption. This patch was inspired by: http://reviews.llvm.org/D20206 Reviewers: jmolloy, hfinkel Subscribers: eli.friedman, llvm-commits Differential Revision: https://reviews.llvm.org/D21318 llvm-svn: 275433 --- .../Analysis/GlobalsModRef/func-memattributes.ll | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 llvm/test/Analysis/GlobalsModRef/func-memattributes.ll (limited to 'llvm/test') diff --git a/llvm/test/Analysis/GlobalsModRef/func-memattributes.ll b/llvm/test/Analysis/GlobalsModRef/func-memattributes.ll new file mode 100644 index 00000000000..5494512592e --- /dev/null +++ b/llvm/test/Analysis/GlobalsModRef/func-memattributes.ll @@ -0,0 +1,31 @@ +; RUN: opt < %s -disable-basicaa -globals-aa -dse -S | FileCheck %s + +@X = internal global i32 4 + +define void @test0() { +; CHECK-LABEL: @test0 +; CHECK: store i32 0, i32* @X +; CHECK-NEXT: call void @func_readonly() #0 +; CHECK-NEXT: store i32 1, i32* @X + store i32 0, i32* @X + call void @func_readonly() #0 + store i32 1, i32* @X + ret void +} + +define void @test1() { +; CHECK-LABEL: @test1 +; CHECK-NOT: store +; CHECK: call void @func_read_argmem_only() #1 +; CHECK-NEXT: store i32 3, i32* @X + store i32 2, i32* @X + call void @func_read_argmem_only() #1 + store i32 3, i32* @X + ret void +} + +declare void @func_readonly() #0 +declare void @func_read_argmem_only() #1 + +attributes #0 = { readonly } +attributes #1 = { readonly argmemonly } -- cgit v1.2.3