OLD | NEW |
1 Subzero - Fast code generator for PNaCl bitcode | 1 Subzero - Fast code generator for PNaCl bitcode |
2 =============================================== | 2 =============================================== |
3 | 3 |
4 Design | 4 Design |
5 ------ | 5 ------ |
6 | 6 |
7 See the accompanying DESIGN.rst file for a more detailed technical overview of | 7 See the accompanying DESIGN.rst file for a more detailed technical overview of |
8 Subzero. | 8 Subzero. |
9 | 9 |
10 Building | 10 Building |
(...skipping 26 matching lines...) Expand all Loading... |
37 | 37 |
38 ``DEBUG=1`` builds without optimizations and is good when running the translator | 38 ``DEBUG=1`` builds without optimizations and is good when running the translator |
39 inside a debugger. ``NOASSERT=1`` disables assertions and is the preferred | 39 inside a debugger. ``NOASSERT=1`` disables assertions and is the preferred |
40 configuration for performance testing the translator. ``MINIMAL=1`` attempts to | 40 configuration for performance testing the translator. ``MINIMAL=1`` attempts to |
41 minimize the size of the translator by compiling out everything unnecessary. | 41 minimize the size of the translator by compiling out everything unnecessary. |
42 ``ASAN=1`` enables AddressSanitizer, and ``TSAN=1`` enables ThreadSanitizer. | 42 ``ASAN=1`` enables AddressSanitizer, and ``TSAN=1`` enables ThreadSanitizer. |
43 | 43 |
44 The result of the ``make`` command is the target ``pnacl-sz`` in the current | 44 The result of the ``make`` command is the target ``pnacl-sz`` in the current |
45 directory. | 45 directory. |
46 | 46 |
| 47 Building within LLVM trunk |
| 48 -------------------------- |
| 49 |
| 50 Subzero can also be built from within a standard LLVM trunk checkout. Here is |
| 51 an example of how it can be checked out and built:: |
| 52 |
| 53 mkdir llvm-git |
| 54 cd llvm-git |
| 55 git clone http://llvm.org/git/llvm.git |
| 56 cd llvm/projects/ |
| 57 git clone https://chromium.googlesource.com/native_client/pnacl-subzero |
| 58 cd ../.. |
| 59 mkdir build |
| 60 cd build |
| 61 cmake -G Ninja ../llvm/ |
| 62 ninja |
| 63 ./bin/pnacl-sz -version |
| 64 |
| 65 This creates a default build of ``pnacl-sz``; currently any options such as |
| 66 ``DEBUG=1`` or ``MINIMAL=1`` have to be added manually. |
| 67 |
47 ``pnacl-sz`` | 68 ``pnacl-sz`` |
48 ------------ | 69 ------------ |
49 | 70 |
50 The ``pnacl-sz`` program parses a pexe or an LLVM bitcode file and translates it | 71 The ``pnacl-sz`` program parses a pexe or an LLVM bitcode file and translates it |
51 into ICE (Subzero's intermediate representation). It then invokes the ICE | 72 into ICE (Subzero's intermediate representation). It then invokes the ICE |
52 translate method to lower it to target-specific machine code, optionally dumping | 73 translate method to lower it to target-specific machine code, optionally dumping |
53 the intermediate representation at various stages of the translation. | 74 the intermediate representation at various stages of the translation. |
54 | 75 |
55 The program can be run as follows:: | 76 The program can be run as follows:: |
56 | 77 |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 | 204 |
184 * Global, linear-scan register allocation. | 205 * Global, linear-scan register allocation. |
185 | 206 |
186 * Advanced phi lowering after target lowering and global register allocation, | 207 * Advanced phi lowering after target lowering and global register allocation, |
187 via edge splitting, topological sorting of the parallel moves, and final local | 208 via edge splitting, topological sorting of the parallel moves, and final local |
188 register allocation. | 209 register allocation. |
189 | 210 |
190 * Stack slot coalescing to reduce frame size. | 211 * Stack slot coalescing to reduce frame size. |
191 | 212 |
192 * Branch optimization to reduce the number of branches to the following block. | 213 * Branch optimization to reduce the number of branches to the following block. |
OLD | NEW |