-
Notifications
You must be signed in to change notification settings - Fork 1
/
README
75 lines (62 loc) · 2.15 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
=== SFS
On "porting" branch, i try to port the original source to 5.0 or 6.0 latest llvm.
Current main project is this porting.
----------
This is based on sfs.tar.gz downloaded from
http://www.cs.ucsb.edu/~benh/research/downloads.html
https://www.cs.ucsb.edu/~benh/research/papers/hardekopf11flow.pdf
Staged Flow-Sensitive Pointer Analysis as described by Hardekopf and Lin.
Semi Spare analysis by Hardekopf and Lin.
----------
This is an 'as-is' implementation of the Staged Flow-Sensitive Pointer
Analysis as described by Hardekopf and Lin, "Flow-Sensitive Pointer
Analysis for Millions of Lines of Code", CGO 2011, presented without
warranty, guarantees, or promises of support. Use at your own risk. To
set up the analysis, use the same methods for this implementation as
described for the semi-sparse analysis implementation (available from
the same website as this implementation).
This package contains an implementation of Andersen-style pointer
analysis used for the AUX stage (in anders/ and anders-aa/) and of the
staged flow-sensitive analysis itself (in sfs-aa/). Presented below is
a copy of the README for the semi-sparse analysis, which applies for
this implementation as well:
----------
This implementation was created for an early (pre-release) version of
LLVM 2.5. For best results, you should compile the source code using the
my-llvm-gcc script that's part of the inclusion-based pointer analysis
package for LLVM linked on the same webpage as this file. This script is
a drop-in replacement for gcc in the build process and creates a single,
whole-program bitcode file.
That file should then be passed through LLVM's own optimization passes
in the order specified below (this is important; some passes destroy the
invariants guaranteed by earlier passes, such as mergereturn's invariant
that every function has a single return statement):
-internalize
-mem2reg
-indmemrem
-raiseallocs
-predsimplify
-mergereturn
-simplify-libcalls
-loopsimplify
-scalarrepl
-licm
-instcombine
-condprop
-constprop
-sccp
-gvn
-die
-adce
-dse
-constmerge
-globaldce
-globalopt
-tailcallelim
-ipconstprop
-ipsccp
-deadargelim
-loop-deletion
-simplifycfg
-mergereturn
Good luck!