Dan Gohman | 10e730a | 2015-06-29 23:51:55 +0000 | [diff] [blame] | 1 | //===-- README.txt - Notes for WebAssembly code gen -----------------------===// |
| 2 | |
| 3 | This WebAssembly backend is presently in a very early stage of development. |
| 4 | The code should build and not break anything else, but don't expect a lot more |
| 5 | at this point. |
| 6 | |
| 7 | For more information on WebAssembly itself, see the design documents: |
| 8 | * https://github.com/WebAssembly/design/blob/master/README.md |
| 9 | |
| 10 | The following documents contain some information on the planned semantics and |
| 11 | binary encoding of WebAssembly itself: |
| 12 | * https://github.com/WebAssembly/design/blob/master/AstSemantics.md |
| 13 | * https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md |
| 14 | |
JF Bastien | f05f6fd | 2015-12-05 19:36:33 +0000 | [diff] [blame^] | 15 | The backend is built, tested and archived on the following waterfall: |
| 16 | https://build.chromium.org/p/client.wasm.llvm/console |
| 17 | |
| 18 | The backend's bringup is done using the GCC torture test suite first since it |
| 19 | doesn't require C library support. Current known failures are in |
| 20 | known_gcc_test_failures.txt, all other tests should pass. The waterfall will |
| 21 | turn red if not. Once most of these pass, further testing will use LLVM's own |
| 22 | test suite. |
| 23 | |
JF Bastien | 86bc915 | 2015-07-06 21:41:59 +0000 | [diff] [blame] | 24 | Interesting work that remains to be done: |
| 25 | * Write a pass to restructurize irreducible control flow. This needs to be done |
| 26 | before register allocation to be efficient, because it may duplicate basic |
| 27 | blocks and WebAssembly performs register allocation at a whole-function |
| 28 | level. Note that LLVM's GPU code has such a pass, but it linearizes control |
| 29 | flow (e.g. both sides of branches execute and are masked) which is undesirable |
| 30 | for WebAssembly. |
JF Bastien | 86bc915 | 2015-07-06 21:41:59 +0000 | [diff] [blame] | 31 | |
Dan Gohman | 10e730a | 2015-06-29 23:51:55 +0000 | [diff] [blame] | 32 | //===---------------------------------------------------------------------===// |
Dan Gohman | dfa81d8 | 2015-11-20 03:08:27 +0000 | [diff] [blame] | 33 | |
Dan Gohman | 81719f8 | 2015-11-25 16:55:01 +0000 | [diff] [blame] | 34 | set_local instructions have a return value. We should (a) model this, |
Dan Gohman | dfa81d8 | 2015-11-20 03:08:27 +0000 | [diff] [blame] | 35 | and (b) write optimizations which take advantage of it. Keep in mind that |
| 36 | many set_local instructions are implicit! |
| 37 | |
| 38 | //===---------------------------------------------------------------------===// |
| 39 | |
| 40 | Load and store instructions can have a constant offset. We should (a) model |
| 41 | this, and (b) do address-mode folding with it. |
| 42 | |
| 43 | //===---------------------------------------------------------------------===// |
| 44 | |
| 45 | Br, br_if, and tableswitch instructions can support having a value on the |
| 46 | expression stack across the jump (sometimes). We should (a) model this, and |
| 47 | (b) extend the stackifier to utilize it. |
| 48 | |
| 49 | //===---------------------------------------------------------------------===// |