Files
clang-p2996/llvm/test/Analysis/CFLAliasAnalysis/Steensgaard/phi-and-select.ll
George Burgess IV bfa401e5ad [CFLAA] Split into Anders+Steens analysis.
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
2016-07-06 00:26:41 +00:00

37 lines
848 B
LLVM

; RUN: opt < %s -cfl-steens-aa -aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s
; Derived from (a subset of) BasicAA/phi-and-select.ll
; CHECK: Function: qux
; CHECK: NoAlias: double* %a, double* %b
; CHECK: ===== Alias Analysis Evaluator Report =====
; Two PHIs with disjoint sets of inputs.
define void @qux(i1 %m, double* noalias %x, double* noalias %y,
i1 %n, double* noalias %v, double* noalias %w) {
entry:
br i1 %m, label %true, label %false
true:
br label %exit
false:
br label %exit
exit:
%a = phi double* [ %x, %true ], [ %y, %false ]
br i1 %n, label %ntrue, label %nfalse
ntrue:
br label %nexit
nfalse:
br label %nexit
nexit:
%b = phi double* [ %v, %ntrue ], [ %w, %nfalse ]
store volatile double 0.0, double* %a
store volatile double 1.0, double* %b
ret void
}