WebAssembly: improve readme, add placeholder for tests.
[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 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
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.
31
32 //===---------------------------------------------------------------------===//
33
34 set_local instructions have a return value. We should (a) model this,
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 //===---------------------------------------------------------------------===//