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 | 86bc915 | 2015-07-06 21:41:59 +0000 | [diff] [blame] | 15 | Interesting work that remains to be done: |
| 16 | * Write a pass to restructurize irreducible control flow. This needs to be done |
| 17 | before register allocation to be efficient, because it may duplicate basic |
| 18 | blocks and WebAssembly performs register allocation at a whole-function |
| 19 | level. Note that LLVM's GPU code has such a pass, but it linearizes control |
| 20 | flow (e.g. both sides of branches execute and are masked) which is undesirable |
| 21 | for WebAssembly. |
JF Bastien | 86bc915 | 2015-07-06 21:41:59 +0000 | [diff] [blame] | 22 | |
Dan Gohman | 10e730a | 2015-06-29 23:51:55 +0000 | [diff] [blame] | 23 | //===---------------------------------------------------------------------===// |
Dan Gohman | dfa81d8 | 2015-11-20 03:08:27 +0000 | [diff] [blame] | 24 | |
Dan Gohman | 81719f8 | 2015-11-25 16:55:01 +0000 | [diff] [blame] | 25 | set_local instructions have a return value. We should (a) model this, |
Dan Gohman | dfa81d8 | 2015-11-20 03:08:27 +0000 | [diff] [blame] | 26 | and (b) write optimizations which take advantage of it. Keep in mind that |
| 27 | many set_local instructions are implicit! |
| 28 | |
| 29 | //===---------------------------------------------------------------------===// |
| 30 | |
| 31 | Load and store instructions can have a constant offset. We should (a) model |
| 32 | this, and (b) do address-mode folding with it. |
| 33 | |
| 34 | //===---------------------------------------------------------------------===// |
| 35 | |
| 36 | Br, br_if, and tableswitch instructions can support having a value on the |
| 37 | expression stack across the jump (sometimes). We should (a) model this, and |
| 38 | (b) extend the stackifier to utilize it. |
| 39 | |
| 40 | //===---------------------------------------------------------------------===// |