Add support for the new pass manager to MemorySSA pass. Change MemorySSA to be computed eagerly upon construction. Change MemorySSAWalker to be owned by the MemorySSA object that creates it. Reviewers: dberlin, george.burgess.iv Subscribers: mcrosier, llvm-commits Differential Revision: http://reviews.llvm.org/D19664 llvm-svn: 271432
60 lines
1.5 KiB
LLVM
60 lines
1.5 KiB
LLVM
; RUN: opt -basicaa -memoryssa -analyze < %s 2>&1 | FileCheck %s
|
|
; RUN: opt -aa-pipeline=basic-aa -passes='print<memoryssa>,verify<memoryssa>' -disable-output < %s 2>&1 | FileCheck %s
|
|
;
|
|
; Test that various function attributes give us sane results.
|
|
|
|
@g = external global i32
|
|
|
|
declare void @readonlyFunction() readonly
|
|
declare void @noattrsFunction()
|
|
|
|
define void @readonlyAttr() {
|
|
; CHECK: 1 = MemoryDef(liveOnEntry)
|
|
; CHECK-NEXT: store i32 0
|
|
store i32 0, i32* @g, align 4
|
|
|
|
%1 = alloca i32, align 4
|
|
; CHECK: 2 = MemoryDef(1)
|
|
; CHECK-NEXT: store i32 0
|
|
store i32 0, i32* %1, align 4
|
|
|
|
; CHECK: MemoryUse(1)
|
|
; CHECK-NEXT: call void @readonlyFunction()
|
|
call void @readonlyFunction()
|
|
|
|
; CHECK: MemoryUse(1)
|
|
; CHECK-NEXT: call void @noattrsFunction() #
|
|
; Assume that #N is readonly
|
|
call void @noattrsFunction() readonly
|
|
|
|
; Sanity check that noattrsFunction is otherwise a MemoryDef
|
|
; CHECK: 3 = MemoryDef(2)
|
|
; CHECK-NEXT: call void @noattrsFunction()
|
|
call void @noattrsFunction()
|
|
ret void
|
|
}
|
|
|
|
declare void @argMemOnly(i32*) argmemonly
|
|
|
|
define void @inaccessableOnlyAttr() {
|
|
%1 = alloca i32, align 4
|
|
; CHECK: 1 = MemoryDef(liveOnEntry)
|
|
; CHECK-NEXT: store i32 0
|
|
store i32 0, i32* %1, align 4
|
|
|
|
; CHECK: 2 = MemoryDef(1)
|
|
; CHECK-NEXT: store i32 0
|
|
store i32 0, i32* @g, align 4
|
|
|
|
; CHECK: MemoryUse(1)
|
|
; CHECK-NEXT: call void @argMemOnly(i32* %1) #
|
|
; Assume that #N is readonly
|
|
call void @argMemOnly(i32* %1) readonly
|
|
|
|
; CHECK: 3 = MemoryDef(2)
|
|
; CHECK-NEXT: call void @argMemOnly(i32* %1)
|
|
call void @argMemOnly(i32* %1)
|
|
|
|
ret void
|
|
}
|