llvm-project/llvm/lib/Target/WebAssembly
JF Bastien d4698e1bac [WebAssembly] Add Relooper
This is just an initial checkin of an implementation of the Relooper algorithm, in preparation for WebAssembly codegen to utilize. It doesn't do anything yet by itself.

The Relooper algorithm takes an arbitrary control flow graph and generates structured control flow from that, utilizing a helper variable when necessary to handle irreducibility. The WebAssembly backend will be able to use this in order to generate an AST for its binary format.

Author: azakai

Reviewers: jfb, sunfish

Subscribers: jevinskie, arsenm, jroelofs, llvm-commits

Differential revision: http://reviews.llvm.org/D11691

llvm-svn: 245142
2015-08-15 01:23:28 +00:00
..
InstPrinter WebAssembly: basic bitcode → assembly CodeGen test 2015-07-22 21:28:15 +00:00
MCTargetDesc WebAssembly: MCAsmInfo only has one syntax variant for now. 2015-07-28 17:23:07 +00:00
TargetInfo
CMakeLists.txt [WebAssembly] Add Relooper 2015-08-15 01:23:28 +00:00
LLVMBuild.txt
Makefile WebAssembly: basic bitcode → assembly CodeGen test 2015-07-22 21:28:15 +00:00
README.txt WebAssembly: add some TODO 2015-07-06 21:41:59 +00:00
Relooper.cpp [WebAssembly] Add Relooper 2015-08-15 01:23:28 +00:00
Relooper.h [WebAssembly] Add Relooper 2015-08-15 01:23:28 +00:00
WebAssembly.h
WebAssembly.td WebAssembly: add a generic CPU 2015-07-27 23:25:54 +00:00
WebAssemblyAsmPrinter.cpp WebAssembly: NFC fix release build break, unused variable. 2015-08-11 04:52:24 +00:00
WebAssemblyFrameLowering.cpp WebAssembly: basic bitcode → assembly CodeGen test 2015-07-22 21:28:15 +00:00
WebAssemblyFrameLowering.h WebAssembly: basic bitcode → assembly CodeGen test 2015-07-22 21:28:15 +00:00
WebAssemblyISelDAGToDAG.cpp WebAssembly: basic bitcode → assembly CodeGen test 2015-07-22 21:28:15 +00:00
WebAssemblyISelLowering.cpp WebAssembly: floating-point comparisons 2015-08-12 17:53:29 +00:00
WebAssemblyISelLowering.h WebAssembly: implement WebAssemblyTargetLowering::getTargetNodeName 2015-08-11 20:13:18 +00:00
WebAssemblyInstrAtomics.td WebAssembly: basic instructions todo, and basic register info. 2015-07-10 18:23:10 +00:00
WebAssemblyInstrCall.td WebAssembly: basic instructions todo, and basic register info. 2015-07-10 18:23:10 +00:00
WebAssemblyInstrControl.td WebAssembly: handle more than int32 argument/return 2015-08-01 04:48:44 +00:00
WebAssemblyInstrConv.td WebAssembly: basic instructions todo, and basic register info. 2015-07-10 18:23:10 +00:00
WebAssemblyInstrFloat.td WebAssembly: floating-point comparisons 2015-08-12 17:53:29 +00:00
WebAssemblyInstrFormats.td WebAssembly: implement comparison. 2015-08-11 21:02:46 +00:00
WebAssemblyInstrInfo.cpp WebAssembly: basic bitcode → assembly CodeGen test 2015-07-22 21:28:15 +00:00
WebAssemblyInstrInfo.h WebAssembly: basic bitcode → assembly CodeGen test 2015-07-22 21:28:15 +00:00
WebAssemblyInstrInfo.td WebAssembly: print immediates 2015-08-10 22:36:48 +00:00
WebAssemblyInstrInteger.td WebAssembly: implement comparison. 2015-08-11 21:02:46 +00:00
WebAssemblyInstrMemory.td WebAssembly: basic instructions todo, and basic register info. 2015-07-10 18:23:10 +00:00
WebAssemblyInstrSIMD.td WebAssembly: basic instructions todo, and basic register info. 2015-07-10 18:23:10 +00:00
WebAssemblyMachineFunctionInfo.cpp
WebAssemblyMachineFunctionInfo.h Fix typo "fuction" noticed in comments in AssumptionCache.h, and also all the other files that have the same typo. All comments, no functionality change! (Merely a "fuctionality" change.) 2015-07-29 22:32:47 +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 WebAssembly: basic instructions todo, and basic register info. 2015-07-10 18:23:10 +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 Use llvm::make_unique to fix the MSVC build. 2015-08-11 18:11:17 +00:00
WebAssemblyTargetMachine.h
WebAssemblyTargetObjectFile.h Remove DataLayout from TargetLoweringObjectFile, redirect to Module 2015-07-16 06:04:17 +00:00
WebAssemblyTargetTransformInfo.cpp
WebAssemblyTargetTransformInfo.h Unbreak WebAssembly build 2015-07-09 21:00:09 +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.
* Basic relooper to expose control flow as an AST.
* Figure out how to properly use MC for virtual ISAs. This may require some
  refactoring of MC.

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