llvm-project/llvm/test/Analysis/BasicAA/constant-memory.ll
Nikita Popov 436fb27186 [BasicAA] Support loop phis in pointsToConstantMemory()
When looking for underlying objects, if we encounter one that we
have already seen, then we should skip it (as it has already been
checked) rather than bail out. In particular, this adds support
for the case where we have a loop use of a phi recurrence.
2022-10-17 12:34:55 +02:00

34 lines
778 B
LLVM

; RUN: opt < %s -passes=aa-eval -print-all-alias-modref-info 2>&1 | FileCheck %s
@c = constant [8 x i32] zeroinitializer
declare void @dummy()
; FIXME: This could be NoModRef
; CHECK-LABEL: Function: basic
; CHECK: Just Ref: Ptr: i32* @c <-> call void @dummy()
define void @basic(ptr %p) {
call void @dummy()
load i32, ptr @c
ret void
}
; FIXME: This could be NoModRef
; CHECK-LABEL: Function: recphi
; CHECK: Just Ref: Ptr: i32* %p <-> call void @dummy()
define void @recphi() {
entry:
br label %loop
loop:
%p = phi ptr [ @c, %entry ], [ %p.next, %loop ]
call void @dummy()
load i32, ptr %p
%p.next = getelementptr i32, ptr %p, i64 1
%c = icmp ne ptr %p.next, getelementptr (i32, ptr @c, i64 8)
br i1 %c, label %loop, label %exit
exit:
ret void
}