Files
clang-p2996/llvm/test/Analysis/BasicAA/call-escape-source.ll
Nikita Popov bcadfc2595 [BasicAA] Handle passthru calls in isEscapeSource()
isEscapeSource() currently considers all call return values as
escape sources. However, CaptureTracking can look through certain
calls, so we shouldn't consider these as escape sources either.

The corresponding CaptureTracking code is:
7c9a3825b8/llvm/lib/Analysis/CaptureTracking.cpp (L332-L333)

Differential Revision: https://reviews.llvm.org/D128444
2022-06-24 11:00:57 +02:00

23 lines
805 B
LLVM

; RUN: opt -aa-eval -print-all-alias-modref-info -disable-output < %s 2>&1 | FileCheck %s
; A call return value is not always an escape source, because
; CaptureTracking can look through some calls. The test is constructed to
; hit the getUnderlyingObject() recursion limit.
define i32 @test() {
; CHECK-LABEL: Function: test
; CHECK-NEXT: MustAlias: i32* %a, i32* %p7
%a = alloca i32
%p1 = call ptr @llvm.strip.invariant.group.p0(ptr %a)
%p2 = getelementptr i8, ptr %p1, i64 1
%p3 = getelementptr i8, ptr %p2, i64 -1
%p4 = getelementptr i8, ptr %p3, i64 1
%p5 = getelementptr i8, ptr %p4, i64 -1
%p6 = getelementptr i8, ptr %p5, i64 1
%p7 = getelementptr i8, ptr %p6, i64 -1
%v = load i32, ptr %a
store i32 -1, ptr %p7
ret i32 %v
}
declare ptr @llvm.strip.invariant.group.p0(ptr)