forked from OSchip/llvm-project
35bfb24c28
Full varargs support will depend on prologue/epilogue support, but this patch gets us started with most of the basic infrastructure. Differential Revision: http://reviews.llvm.org/D15231 llvm-svn: 254799 |
||
---|---|---|
.. | ||
InstPrinter | ||
MCTargetDesc | ||
TargetInfo | ||
CMakeLists.txt | ||
LLVMBuild.txt | ||
Makefile | ||
README.txt | ||
Relooper.cpp | ||
Relooper.h | ||
WebAssembly.h | ||
WebAssembly.td | ||
WebAssemblyAsmPrinter.cpp | ||
WebAssemblyCFGStackify.cpp | ||
WebAssemblyFastISel.cpp | ||
WebAssemblyFrameLowering.cpp | ||
WebAssemblyFrameLowering.h | ||
WebAssemblyISD.def | ||
WebAssemblyISelDAGToDAG.cpp | ||
WebAssemblyISelLowering.cpp | ||
WebAssemblyISelLowering.h | ||
WebAssemblyInstrAtomics.td | ||
WebAssemblyInstrCall.td | ||
WebAssemblyInstrControl.td | ||
WebAssemblyInstrConv.td | ||
WebAssemblyInstrFloat.td | ||
WebAssemblyInstrFormats.td | ||
WebAssemblyInstrInfo.cpp | ||
WebAssemblyInstrInfo.h | ||
WebAssemblyInstrInfo.td | ||
WebAssemblyInstrInteger.td | ||
WebAssemblyInstrMemory.td | ||
WebAssemblyInstrSIMD.td | ||
WebAssemblyMCInstLower.cpp | ||
WebAssemblyMCInstLower.h | ||
WebAssemblyMachineFunctionInfo.cpp | ||
WebAssemblyMachineFunctionInfo.h | ||
WebAssemblyOptimizeReturned.cpp | ||
WebAssemblyPeephole.cpp | ||
WebAssemblyRegColoring.cpp | ||
WebAssemblyRegNumbering.cpp | ||
WebAssemblyRegStackify.cpp | ||
WebAssemblyRegisterInfo.cpp | ||
WebAssemblyRegisterInfo.h | ||
WebAssemblyRegisterInfo.td | ||
WebAssemblySelectionDAGInfo.cpp | ||
WebAssemblySelectionDAGInfo.h | ||
WebAssemblyStoreResults.cpp | ||
WebAssemblySubtarget.cpp | ||
WebAssemblySubtarget.h | ||
WebAssemblyTargetMachine.cpp | ||
WebAssemblyTargetMachine.h | ||
WebAssemblyTargetObjectFile.h | ||
WebAssemblyTargetTransformInfo.cpp | ||
WebAssemblyTargetTransformInfo.h |
README.txt
//===-- README.txt - Notes for WebAssembly code gen -----------------------===// This WebAssembly backend is presently in a very early stage of development. The code should build and not break anything else, but don't expect a lot more at this point. For more information on WebAssembly itself, see the design documents: * https://github.com/WebAssembly/design/blob/master/README.md The following documents contain some information on the planned semantics and 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 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. //===---------------------------------------------------------------------===//