Mercurial > hg > CbC > CbC_llvm
comparison test/Analysis/BasicAA/phi-and-select.ll @ 0:95c75e76d11b LLVM3.4
LLVM 3.4
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 12 Dec 2013 13:56:28 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:95c75e76d11b |
---|---|
1 ; RUN: opt < %s -basicaa -aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s | |
2 | |
3 ; BasicAA should detect NoAliases in PHIs and Selects. | |
4 | |
5 ; CHECK: Function: foo | |
6 ; CHECK: NoAlias: double* %a, double* %b | |
7 ; CHECK: Function: bar | |
8 ; CHECK: NoAlias: double* %a, double* %b | |
9 ; CHECK: Function: qux | |
10 ; CHECK: NoAlias: double* %a, double* %b | |
11 ; CHECK: Function: fin | |
12 ; CHECK: NoAlias: double* %a, double* %b | |
13 ; CHECK: ===== Alias Analysis Evaluator Report ===== | |
14 | |
15 ; Two PHIs in the same block. | |
16 define void @foo(i1 %m, double* noalias %x, double* noalias %y) { | |
17 entry: | |
18 br i1 %m, label %true, label %false | |
19 | |
20 true: | |
21 br label %exit | |
22 | |
23 false: | |
24 br label %exit | |
25 | |
26 exit: | |
27 %a = phi double* [ %x, %true ], [ %y, %false ] | |
28 %b = phi double* [ %x, %false ], [ %y, %true ] | |
29 store volatile double 0.0, double* %a | |
30 store volatile double 1.0, double* %b | |
31 ret void | |
32 } | |
33 | |
34 ; Two selects with the same condition. | |
35 define void @bar(i1 %m, double* noalias %x, double* noalias %y) { | |
36 entry: | |
37 %a = select i1 %m, double* %x, double* %y | |
38 %b = select i1 %m, double* %y, double* %x | |
39 store volatile double 0.000000e+00, double* %a | |
40 store volatile double 1.000000e+00, double* %b | |
41 ret void | |
42 } | |
43 | |
44 ; Two PHIs with disjoint sets of inputs. | |
45 define void @qux(i1 %m, double* noalias %x, double* noalias %y, | |
46 i1 %n, double* noalias %v, double* noalias %w) { | |
47 entry: | |
48 br i1 %m, label %true, label %false | |
49 | |
50 true: | |
51 br label %exit | |
52 | |
53 false: | |
54 br label %exit | |
55 | |
56 exit: | |
57 %a = phi double* [ %x, %true ], [ %y, %false ] | |
58 br i1 %n, label %ntrue, label %nfalse | |
59 | |
60 ntrue: | |
61 br label %nexit | |
62 | |
63 nfalse: | |
64 br label %nexit | |
65 | |
66 nexit: | |
67 %b = phi double* [ %v, %ntrue ], [ %w, %nfalse ] | |
68 store volatile double 0.0, double* %a | |
69 store volatile double 1.0, double* %b | |
70 ret void | |
71 } | |
72 | |
73 ; Two selects with disjoint sets of arms. | |
74 define void @fin(i1 %m, double* noalias %x, double* noalias %y, | |
75 i1 %n, double* noalias %v, double* noalias %w) { | |
76 entry: | |
77 %a = select i1 %m, double* %x, double* %y | |
78 %b = select i1 %n, double* %v, double* %w | |
79 store volatile double 0.000000e+00, double* %a | |
80 store volatile double 1.000000e+00, double* %b | |
81 ret void | |
82 } |