[WebAssembly] Add a few open tasks to the target README.txt.
[oota-llvm.git] / lib / Target / WebAssembly / README.txt
index 7a71060a638f145e09cb00b50eaa95b260783806..8604528b2fc8e4c157f3429e363762219a473f92 100644 (file)
@@ -12,4 +12,29 @@ binary encoding of WebAssembly itself:
   * https://github.com/WebAssembly/design/blob/master/AstSemantics.md
   * https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md
 
+Interesting work that remains to be done:
+* Write a pass to restructurize irreducible control flow. This needs to be done
+  before register allocation to be efficient, because it may duplicate basic
+  blocks and WebAssembly performs register allocation at a whole-function
+  level. Note that LLVM's GPU code has such a pass, but it linearizes control
+  flow (e.g. both sides of branches execute and are masked) which is undesirable
+  for WebAssembly.
+
+//===---------------------------------------------------------------------===//
+
+set_local and store instructions have a return value. We should (a) model this,
+and (b) write optimizations which take advantage of it. Keep in mind that
+many set_local instructions are implicit!
+
+//===---------------------------------------------------------------------===//
+
+Load and store instructions can have a constant offset. We should (a) model
+this, and (b) do address-mode folding with it.
+
+//===---------------------------------------------------------------------===//
+
+Br, br_if, and tableswitch instructions can support having a value on the
+expression stack across the jump (sometimes). We should (a) model this, and
+(b) extend the stackifier to utilize it.
+
 //===---------------------------------------------------------------------===//