blob: 465c006d76aee3cfc5f8009c37f3ef108f84e62c [file] [log] [blame]
Guochun Shif4688a82002-07-17 23:05:56 +00001<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>
3 <head>
4 <title>Specification for LLVM system code</title>
5 </head>
6
7 <body>
8 <h1>Specification for LLVM system</h1>
9 <h1><a name="index">Index</a></h1>
10 <ul>
11 <li><a href="#cvs">Checkout LLVM from CVS</a>
12 <li><a href="#compilerun">Compile and Run</a>
13 <li><a href="#layout">Program layout</a>
14 <ol>
15 <li><a href="#d&d">Depend and Debug directories</a></li>
16 <li><a href="#include">llvm/include</a>
17 <li><a href="#lib">llvm/lib</a>
18 <li><a href="#test">llvm/test</a>
19 <li><a href="#tools">llvm/tools</a>
20 </ol>
21 <li> <a href="#tutorial"> simple example for using tools</li>
22 <li><a href="#links">Links</a>
23 </ul>
24 <h2><a name="tools">Checkout LLVM from CVS</a></h2>
25 <p>
26 <dl>
27 <dt>cvs root directory:<dd> /home/vadve/vadve/Research/DynOpt/CVSRepository<br>
28 <dt>project name:<dd> llvm
29 </dl>
30
31 For those who are not familar with cvs, there are two steps you should do:<br>
32 <ol>
33 <li>
34 set CVSROOT. Add the following line into the .cshrc file in your home directory if you are using tcsh or csh:<br>
35 <i>setenv CVSROOT /home/vadve/vadve/Research/DynOpt/CVSRepository</i>
36 </li>
37 <li>
38 check out. Go to the directory you want to store LLVM, type <br>
39 <i>cvs checkout llvm</i>
40 </li>
41 </ol>
42
43 note: the c front-end implementation is not in cvs. If you want to use it, you can use excutable in Chris Lattner's directory<br>
44 <dd><i>/home/vadve/lattner/cvs/gcc_install/bin/gcc</i><br>
45 a brief usage of this gcc and other tools are introduced later. To read it now, click <a href="#tutorial">here</a>.
46
47 <h2><a name="compilerun">Compile and Run</a></h2>
48 There is a makefile in each directory. You can simple type <i>gmake</i> in the <b>~/llvm</b> directory to compile all the files or you can type <i>gmake</i> in the certain directory to compile all files and subdirectories in that directory.<br>
49 You might want to add the the following directory into your path:<br>
50 <dd><i>llvm/tools/Debug</i><br>
51 so you can run tools in any directory. If you are using csh or tcsh, add <br>
52 <dd><i>setenv PATH llvm/tools/Debug:${PATH}</i><br>
53 at the end of the file .cshrc in your home directory.
54
55 </dl>
56 <h2><a name="layout">Program Layout</a></h2>
57 Many useful infomation can be obtained from the LLVM doxygen tree available at <a href="http://llvm.cs.uiuc.edu/doxygen/"><i>http://llvm.cs.uiuc.edu/doxygen/ </i><br></a>
58 The following is a brief introduction to code layout:
59
60 <h3><a name="d&d">Depend and Debug directories</a></h3>
61 Most directories contain these two directories. The depend directory contains dependance files which will be used during complilation. The debug directory contains object files, library files or executables after compilation.
62 <h3><a name="include">llvm/include</a></h3>
63 This directory contains common head files supporting the LLVM library. Specific head files which are only used by certain directory are place in that directory instead of here.
64 <h3><a name="lib">llvm/lib</a></h3>
65 This directory contains most important files of LLVM system. <br>
66 <dl compact>
67
68 <dt>llvm/lib/transforms/<dd> This directory contains files and directories for transforming one representation to another representation.
69 <dt>llvm/lib/Target/<dd> This directory contains files and directories for target machine. The files under llvm/lib/Target describe the common property for any target machine. The directory llvm/lib/Target/Sparc describe the sparc machine specification. <br>
70
71 <dt>llvm/lib/Analysis/<dd> This directory contains files and directories for doing all kinds of data and control analysis.
72 <dt>llvm/lib/AsmParser/<dd> This directory contains files and directories for parsing the llvm assemly files.
73 <dt>llvm/lib/ByteCode/<dd> This directory contains files and directories for reading and write LLVM bytecode.
74 <dt>llvm/lib/CWrite/<dd> This directory contains files and directories for writing c files as output.
75 <dt>llvm/lib/CodeGen/<dd> This directory contains files and directories for instruction selection, instruction scheduling and register allocation.
76 <dt>llvm/lib/Reoptimizer<dd> This directory contains files and directories for all kinds of optimizations, e.g. dead code elimination, Loop Invariant Code Motion, etc.
77
78 <dt>llvm/lib/Support/<dd> This directory contains some files and directories supporting the library, e.g. commandline processor and statistic reporter.
79 <dt>llvm/lib/VMCore/<dd> This directory contains files and directories for implementing the virtual machine instruction set.
80 </dl>
81 <h3><a name="test">llvm/test</a></h3>
82 This directory contains llvm assembly and other files to test the llvm library.
83
84 <h3><a name="tools">llvm/tools</a></h3>
85 <p> The <b>tools</b> directory contains many tools. You can always get help by typing <i>command_name --help </i>. The following is a brief introduction to each tool.
86 <dl compact>
87 <dt><i>analyze</i><dd> ???
88 <dt><i>as</i><dd>llvm .ll -> .bc assembler
89 <br>The assembler transfroms the human readable assembly to llvm bytecode.
90 <dt><i>dis</i><dd>llvm .bc -> .ll disassembler
91 <br>The disassembler transfroms the llvm bytecode to human readable assembly.
92 <dt><i>extract</i><dd> ???
93 <dt><i>gccas</i><dd>llvm .ll -> .bc assembler
94 <br>The assembler transfroms the human readable assembly to llvm bytecode.
95 <dt><i>gccld</i><dd>many llvm bytecode -> llvm bytecode + optimizations
96 <br> gccld links many llvm bytecode files into one bytecode file and does some optimization.
97 <dt><i>link</i><dd>many llvm bytecode -> llvm bytecode
98 <br> <i>link</i> takes many llvm bytecode files and link them into one llvm bytecode file.
99 <dt><i>llc</i><dd>llvm bytecode -> SPARC assembly
100 <br> <i>llc</i> takes a llvm bytecode file and output a SPARC assembly file.
101 <dt><i>lli</i><dd>llvm interpreter
102 <br><i>lli</i> reads a llvm bytecode file and execute it.
103 <dt><i>opt</i><dd>llvm .bc -> .bc modular optimizer
104 <br> <i>opt</i> reads llvm bytecode and do certain optimization, then output llvm bytecode .
105 </dl>
106
107 <h2><a name="tutorial">tutorial for using tools</h2>
108 <ul>
109 <li>create a simple c file:<br>
110 <pre>
111 hello.c
112
113 int main() {
114 printf("hello world\n");
115 return 0;
116 }
117 </pre>
118 </li>
119 <li>compile the c file into a llvm bytecode file<br>
120 <i>% alias llvmgcc /home/vadve/lattner/cvs/gcc_install/bin/gcc</i><br>
121 <i>% llvmgcc hello.c </i><br>
122 there will be two output files: <b>a.out</b> and <b>a.out.bc</b>. The file <b>a.out</b> is a shell script and <b>a.out.bc</b> is the llvm bytecode. You can run a.out to excute or directly call the interpreter: <br>
123 % <i>lli a.out.bc</i><br>
124 <li> dissembler and assembler <br>
125 read llvm bytecode and output human readable llvm assembly<br>
126 %<i>dis a.out.bc -o hello.ll</i><br>
127 read human readable llvm assembly code and output llvm bytecode<br>
128 %<i>as hello.ll -o hello.bc</i>
129 </li>
130 <li> compile to sparc assembly<br>
131 <i>%llc hello.bc -o hello.s</i>
132 </li>
133 </ul>
134 <h2><a name="links">Links</a></h2>
135 <ul>
136 <li><a href="http://llvm.cs.uiuc.edu/">LLVM homepage</a></li>
137 <li><a href="http://tank.cs.uiuc.edu/doxygen/">LLVM doxygen tree</a></li>
138 </ul>
139 <hr>
140 If you have any question, please send an email to <a href="mailto:lattner@uiuc.edu">Lattner Chris Arthur</a> or <a href="mailto:gshi1@uiuc.edu">Guochun Shi</a>. <p>
141 <!-- Created: Mon Jul 1 02:29:02 CDT 2002 -->
142 <!-- hhmts start -->
143Last modified: Wed Jul 17 17:55:16 CDT 2002
144<!-- hhmts end -->
145 </body>
146</html>