[WebAssembly] Add a few open tasks to the target README.txt.
[oota-llvm.git] / lib / Target / WebAssembly / README.txt
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
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.
22
23 //===---------------------------------------------------------------------===//
24
25 set_local and store instructions have a return value. We should (a) model this,
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 //===---------------------------------------------------------------------===//