llvm-project/llvm/lib/Target/WebAssembly
Dan Gohman 3280793234 [WebAssembly] Use dominator information to improve BLOCK placement
Always starting blocks at the top of their containing loops works, but creates
unnecessarily deep nesting because it makes all blocks in a loop overlap.
Refine the BLOCK placement algorithm to start blocks at nearest common
dominating points instead, which significantly shrinks them and reduces
overlapping.

llvm-svn: 253876
2015-11-23 16:19:56 +00:00
..
InstPrinter [WebAssembly] Enable register coloring and register stackifying. 2015-11-18 16:12:01 +00:00
MCTargetDesc [WebAssembly] Add WebAssemblyMCInstLower.cpp. 2015-11-05 19:28:16 +00:00
TargetInfo
CMakeLists.txt [WebAssembly] Prototype passes for register coloring and register stackifying. 2015-11-16 16:18:28 +00:00
LLVMBuild.txt [WebAssembly] Make WebAssemblyCodeGen depend on WebAssemblyAsmPrinter 2015-11-02 23:23:16 +00:00
Makefile [WebAssembly] Skeleton FastISel support 2015-08-24 18:44:37 +00:00
README.txt [WebAssembly] Add a few open tasks to the target README.txt. 2015-11-20 03:08:27 +00:00
Relooper.cpp Fix a [-Werror,-Wcovered-switch-default] warning by removing the 2015-11-19 23:45:42 +00:00
Relooper.h WebAssembly: relooper analysis pass 2015-10-16 16:35:49 +00:00
WebAssembly.h [WebAssembly] Prototype passes for register coloring and register stackifying. 2015-11-16 16:18:28 +00:00
WebAssembly.td WebAssembly: add a generic CPU 2015-07-27 23:25:54 +00:00
WebAssemblyAsmPrinter.cpp [WebAssembly] Remove the AsmPrinter code for printing physical registers. 2015-11-20 03:13:31 +00:00
WebAssemblyCFGStackify.cpp [WebAssembly] Use dominator information to improve BLOCK placement 2015-11-23 16:19:56 +00:00
WebAssemblyFastISel.cpp [WebAssembly] Skeleton FastISel support 2015-08-24 18:44:37 +00:00
WebAssemblyFrameLowering.cpp [WebAssembly] Use the checked form of MachineFunction::getSubtarget. NFC. 2015-08-24 16:46:31 +00:00
WebAssemblyFrameLowering.h WebAssembly: basic bitcode → assembly CodeGen test 2015-07-22 21:28:15 +00:00
WebAssemblyISD.def [WebAssembly] Rename SWITCH to TABLESWITCH to match the current wording in the spec. 2015-11-20 03:02:49 +00:00
WebAssemblyISelDAGToDAG.cpp [WebAssembly] Inline asm support. 2015-11-13 01:42:29 +00:00
WebAssemblyISelLowering.cpp [WebAssembly] Rename SWITCH to TABLESWITCH to match the current wording in the spec. 2015-11-20 03:02:49 +00:00
WebAssemblyISelLowering.h [WebAssembly] Implement isCheapToSpeculateCtlz and isCheapToSpeculateCttz. 2015-11-19 23:04:59 +00:00
WebAssemblyInstrAtomics.td WebAssembly: basic instructions todo, and basic register info. 2015-07-10 18:23:10 +00:00
WebAssemblyInstrCall.td [WebAssembly] Add more whitespace characters to prettify the assembly output. 2015-11-18 17:05:35 +00:00
WebAssemblyInstrControl.td [WebAssembly] Rename SWITCH to TABLESWITCH to match the current wording in the spec. 2015-11-20 03:02:49 +00:00
WebAssemblyInstrConv.td [WebAssembly] Use tabs instead of spaces in assembly output. 2015-11-15 15:34:19 +00:00
WebAssemblyInstrFloat.td [WebAssembly] Add some spaces to the assembly output to vertically align operands. 2015-11-18 16:25:38 +00:00
WebAssemblyInstrFormats.td [WebAssembly] Use tabs instead of spaces in assembly output. 2015-11-15 15:34:19 +00:00
WebAssemblyInstrInfo.cpp [WebAssembly] Enable register coloring and register stackifying. 2015-11-18 16:12:01 +00:00
WebAssemblyInstrInfo.h [WebAssembly] Check in an initial CFG Stackifier pass 2015-09-16 16:51:30 +00:00
WebAssemblyInstrInfo.td [WebAssembly] Rename SWITCH to TABLESWITCH to match the current wording in the spec. 2015-11-20 03:02:49 +00:00
WebAssemblyInstrInteger.td [WebAssembly] Add some spaces to the assembly output to vertically align operands. 2015-11-18 16:25:38 +00:00
WebAssemblyInstrMemory.td [WebAssembly] Use tabs instead of spaces in assembly output. 2015-11-15 15:34:19 +00:00
WebAssemblyInstrSIMD.td WebAssembly: basic instructions todo, and basic register info. 2015-07-10 18:23:10 +00:00
WebAssemblyMCInstLower.cpp [WebAssembly] Reapply r252858, with svn add for the new file. 2015-11-12 17:04:33 +00:00
WebAssemblyMCInstLower.h [WebAssembly] Add WebAssemblyMCInstLower.cpp. 2015-11-05 19:28:16 +00:00
WebAssemblyMachineFunctionInfo.cpp [WebAssembly] Introduce a new pseudo-operand for unused expression results. 2015-11-13 00:21:05 +00:00
WebAssemblyMachineFunctionInfo.h [WebAssembly] Fix function return type printing 2015-11-16 21:12:41 +00:00
WebAssemblyRegColoring.cpp Split the argument unscheduling loop in the WebAssembly register 2015-11-20 00:34:54 +00:00
WebAssemblyRegNumbering.cpp [WebAssembly] Enable register coloring and register stackifying. 2015-11-18 16:12:01 +00:00
WebAssemblyRegStackify.cpp [WebAssembly] Add asserts that the expression stack is used in stack order. 2015-11-20 02:33:24 +00:00
WebAssemblyRegisterInfo.cpp Targets: commonize some stack realignment code 2015-07-20 22:51:32 +00:00
WebAssemblyRegisterInfo.h Targets: commonize some stack realignment code 2015-07-20 22:51:32 +00:00
WebAssemblyRegisterInfo.td [WebAssemby] Enforce FIFO ordering for instructions using stackified registers. 2015-11-20 02:19:12 +00:00
WebAssemblySelectionDAGInfo.cpp Unbreak WebAssembly build 2015-07-09 21:00:09 +00:00
WebAssemblySelectionDAGInfo.h Unbreak WebAssembly build 2015-07-09 21:00:09 +00:00
WebAssemblySubtarget.cpp Unbreak WebAssembly build 2015-07-09 21:00:09 +00:00
WebAssemblySubtarget.h WebAssembly: basic bitcode → assembly CodeGen test 2015-07-22 21:28:15 +00:00
WebAssemblyTargetMachine.cpp [WebAssembly] Enable register coloring and register stackifying. 2015-11-18 16:12:01 +00:00
WebAssemblyTargetMachine.h
WebAssemblyTargetObjectFile.h Remove DataLayout from TargetLoweringObjectFile, redirect to Module 2015-07-16 06:04:17 +00:00
WebAssemblyTargetTransformInfo.cpp [WebAssembly] Tell TargetTransformInfo about popcnt and sqrt. 2015-08-24 16:51:46 +00:00
WebAssemblyTargetTransformInfo.h Try to fix WebAssembly build after r247864 2015-09-16 23:59:57 +00:00

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 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.

//===---------------------------------------------------------------------===//