From 8b6f69a4da5baaf3748798a84dd16a2481b7ca7f Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 23 Jun 2022 16:30:02 +0200 Subject: [PATCH] [BasicAA] Add test for call incorrectly treated as escape source (NFC) --- llvm/test/Analysis/BasicAA/call-escape-source.ll | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 llvm/test/Analysis/BasicAA/call-escape-source.ll diff --git a/llvm/test/Analysis/BasicAA/call-escape-source.ll b/llvm/test/Analysis/BasicAA/call-escape-source.ll new file mode 100644 index 0000000..f2068e4 --- /dev/null +++ b/llvm/test/Analysis/BasicAA/call-escape-source.ll @@ -0,0 +1,22 @@ +; RUN: opt -aa-eval -print-all-alias-modref-info -disable-output < %s 2>&1 | FileCheck %s + +; FIXME: 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: NoAlias: 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) -- 2.7.4