mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
9f9488ba33
StratifiedSets (as implemented) is very fast, but its accuracy is also limited. If we take a more aggressive andersens-like approach, we can be way more accurate, but we'll also end up being slower. So, we've decided to split CFLAA into CFLSteensAA and CFLAndersAA. Long-term, we want to end up in a place where CFLSteens is queried first; if it can provide an answer, great (since queries are basically map lookups). Otherwise, we'll fall back to CFLAnders, BasicAA, etc. This patch splits everything out so we can try to do something like that when we get a reasonable CFLAnders implementation. Patch by Jia Chen. Differential Revision: http://reviews.llvm.org/D21910 llvm-svn: 274589
36 lines
1.2 KiB
LLVM
36 lines
1.2 KiB
LLVM
; This testcase ensures that CFL AA answers queries soundly when callee tries
|
|
; to mutate the memory pointed to by its parameters
|
|
|
|
; RUN: opt < %s -disable-basicaa -cfl-steens-aa -aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s
|
|
; RUN: opt < %s -aa-pipeline=cfl-steens-aa -passes=aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s
|
|
|
|
define void @store_arg_callee(i32** %arg1, i32* %arg2) {
|
|
store i32* %arg2, i32** %arg1
|
|
ret void
|
|
}
|
|
; CHECK-LABEL: Function: test_store_arg
|
|
; CHECK: NoAlias: i32* %a, i32** %p
|
|
; CHECK: NoAlias: i32* %b, i32** %p
|
|
; CHECK: MayAlias: i32* %a, i32* %lp
|
|
; CHECK: MayAlias: i32* %b, i32* %lp
|
|
; CHECK: MayAlias: i32* %b, i32* %lq
|
|
; CHECK: MayAlias: i32* %lp, i32* %lq
|
|
|
|
; We could've proven the following facts if the analysis were inclusion-based:
|
|
; NoAlias: i32* %a, i32* %b
|
|
; NoAlias: i32* %a, i32* %lq
|
|
define void @test_store_arg() {
|
|
%a = alloca i32, align 4
|
|
%b = alloca i32, align 4
|
|
%p = alloca i32*, align 8
|
|
%q = alloca i32*, align 8
|
|
|
|
store i32* %a, i32** %p
|
|
store i32* %b, i32** %q
|
|
call void @store_arg_callee(i32** %p, i32* %b)
|
|
|
|
%lp = load i32*, i32** %p
|
|
%lq = load i32*, i32** %q
|
|
|
|
ret void
|
|
} |