1; This testcase ensures that CFL AA answers queries soundly when callee tries 2; to escape its parameters 3 4; RUN: opt < %s -aa-pipeline=cfl-anders-aa -passes=aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s 5 6declare void @opaque(i32*) 7define void @escape_arg(i32* %arg) { 8 call void @opaque(i32* %arg) 9 ret void 10} 11; CHECK-LABEL: Function: test_arg_escape 12; CHECK-DAG: NoAlias: i32* %a, i32** %x 13; CHECK-DAG: NoAlias: i32* %b, i32** %x 14; CHECK-DAG: NoAlias: i32* %a, i32* %b 15; CHECK-DAG: NoAlias: i32* %c, i32** %x 16; CHECK-DAG: NoAlias: i32* %a, i32* %c 17; CHECK-DAG: NoAlias: i32* %b, i32* %c 18; CHECK-DAG: MayAlias: i32* %a, i32* %d 19; CHECK-DAG: MayAlias: i32* %b, i32* %d 20; CHECK-DAG: NoAlias: i32* %c, i32* %d 21define void @test_arg_escape(i32** %x) { 22 %a = alloca i32, align 4 23 %b = alloca i32, align 4 24 %c = alloca i32, align 4 25 load i32, i32* %a 26 load i32, i32* %b 27 load i32, i32* %c 28 call void @escape_arg(i32* %a) 29 call void @escape_arg(i32* %b) 30 %d = load i32*, i32** %x 31 load i32, i32* %d 32 33 ret void 34} 35