blob: bfb124d504eb91289cc6de49191fab2a8c4cd763 [file] [log] [blame]
Dan Gohman10e730a2015-06-29 23:51:55 +00001//===-- README.txt - Notes for WebAssembly code gen -----------------------===//
2
3This WebAssembly backend is presently in a very early stage of development.
4The code should build and not break anything else, but don't expect a lot more
5at this point.
6
7For more information on WebAssembly itself, see the design documents:
8 * https://github.com/WebAssembly/design/blob/master/README.md
9
10The following documents contain some information on the planned semantics and
11binary 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 Bastien86bc9152015-07-06 21:41:59 +000015Interesting 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 Bastien86bc9152015-07-06 21:41:59 +000022
Dan Gohman10e730a2015-06-29 23:51:55 +000023//===---------------------------------------------------------------------===//
Dan Gohmandfa81d82015-11-20 03:08:27 +000024
Dan Gohman81719f82015-11-25 16:55:01 +000025set_local instructions have a return value. We should (a) model this,
Dan Gohmandfa81d82015-11-20 03:08:27 +000026and (b) write optimizations which take advantage of it. Keep in mind that
27many set_local instructions are implicit!
28
29//===---------------------------------------------------------------------===//
30
31Load and store instructions can have a constant offset. We should (a) model
32this, and (b) do address-mode folding with it.
33
34//===---------------------------------------------------------------------===//
35
36Br, br_if, and tableswitch instructions can support having a value on the
37expression stack across the jump (sometimes). We should (a) model this, and
38(b) extend the stackifier to utilize it.
39
40//===---------------------------------------------------------------------===//