| 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 |