getModRefInfo() queries currently track whether the result is a MustAlias on a best-effort basis. The only user of this functionality is the optimized memory access type in MemorySSA -- which in turn has no users. Given that this functionality has not found a user since it was introduced five years ago (in D38862), I think we should drop it again. The context is that I'm working to separate FunctionModRefBehavior to track mod/ref for different location kinds (like argmem or inaccessiblemem) separately, and the fact that ModRefInfo also has an unrelated Must flag makes this quite awkward, especially as this means that NoModRef is not a zero value. If we want to retain the functionality, I would probably split getModRefInfo() results into a part that just contains the ModRef information, and a separate part containing a (best-effort) AliasResult. Differential Revision: https://reviews.llvm.org/D130713
47 lines
1.7 KiB
LLVM
47 lines
1.7 KiB
LLVM
; RUN: opt -aa-pipeline=basic-aa -passes='print<memoryssa>,verify<memoryssa>' -disable-output < %s 2>&1 | FileCheck %s --check-prefixes=CHECK,NOLIMIT
|
|
; RUN: opt -memssa-check-limit=0 -aa-pipeline=basic-aa -passes='print<memoryssa>,verify<memoryssa>' -disable-output < %s 2>&1 | FileCheck %s --check-prefixes=CHECK,LIMIT
|
|
|
|
; Function Attrs: ssp uwtable
|
|
define i32 @main() {
|
|
entry:
|
|
; CHECK: 1 = MemoryDef(liveOnEntry)
|
|
; CHECK-NEXT: %call = call noalias i8* @_Znwm(i64 4)
|
|
%call = call noalias i8* @_Znwm(i64 4)
|
|
%0 = bitcast i8* %call to i32*
|
|
; CHECK: 2 = MemoryDef(1)
|
|
; CHECK-NEXT: %call1 = call noalias i8* @_Znwm(i64 4)
|
|
%call1 = call noalias i8* @_Znwm(i64 4)
|
|
%1 = bitcast i8* %call1 to i32*
|
|
; CHECK: 3 = MemoryDef(2)
|
|
; CHECK-NEXT: store i32 5, i32* %0, align 4
|
|
store i32 5, i32* %0, align 4
|
|
; CHECK: 4 = MemoryDef(3)
|
|
; CHECK-NEXT: store i32 7, i32* %1, align 4
|
|
store i32 7, i32* %1, align 4
|
|
; NOLIMIT: MemoryUse(3)
|
|
; NOLIMIT-NEXT: %2 = load i32, i32* %0, align 4
|
|
; LIMIT: MemoryUse(4)
|
|
; LIMIT-NEXT: %2 = load i32, i32* %0, align 4
|
|
%2 = load i32, i32* %0, align 4
|
|
; NOLIMIT: MemoryUse(4)
|
|
; NOLIMIT-NEXT: %3 = load i32, i32* %1, align 4
|
|
; LIMIT: MemoryUse(4)
|
|
; LIMIT-NEXT: %3 = load i32, i32* %1, align 4
|
|
%3 = load i32, i32* %1, align 4
|
|
; NOLIMIT: MemoryUse(3)
|
|
; NOLIMIT-NEXT: %4 = load i32, i32* %0, align 4
|
|
; LIMIT: MemoryUse(4)
|
|
; LIMIT-NEXT: %4 = load i32, i32* %0, align 4
|
|
%4 = load i32, i32* %0, align 4
|
|
; NOLIMIT: MemoryUse(4)
|
|
; NOLIMIT-NEXT: %5 = load i32, i32* %1, align 4
|
|
; LIMIT: MemoryUse(4)
|
|
; LIMIT-NEXT: %5 = load i32, i32* %1, align 4
|
|
%5 = load i32, i32* %1, align 4
|
|
%add = add nsw i32 %3, %5
|
|
ret i32 %add
|
|
}
|
|
|
|
|
|
declare noalias i8* @_Znwm(i64)
|