llvm-6502/lib/Target/WebAssembly
JF Bastien b18e7bdac8 WebAssembly: basic bitcode → assembly CodeGen test
Summary:
Add a basic CodeGen bitcode test which (for now) only prints out the function name and nothing else. The current code merely implements the basic needed for the test run to not crash / assert. Getting to that point required:

 - Basic InstPrinter.
 - Basic AsmPrinter.
 - DiagnosticInfoUnsupported (not strictly required, but nice to have, duplicated from AMDGPU/BPF's ISelLowering).
 - Some SP and register setup in WebAssemblyTargetLowering.
 - Basic LowerFormalArguments.
 - GenInstrInfo.
 - Placeholder LowerFormalArguments.
 - Placeholder CanLowerReturn and LowerReturn.
 - Basic DAGToDAGISel::Select, which requiresGenDAGISel.inc as well as GET_INSTRINFO_ENUM with GenInstrInfo.inc.
 - Remove WebAssemblyFrameLowering::determineCalleeSaves and rely on default.
 - Implement WebAssemblyFrameLowering::hasFP, same as AArch64's implementation.

Follow-up patches will implement a real AsmPrinter, which will require adding MI opcodes specific to WebAssembly.

Reviewers: sunfish

Subscribers: aemerson, jfb, llvm-commits

Differential Revision: http://reviews.llvm.org/D11369

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242939 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-22 21:28:15 +00:00
..
InstPrinter WebAssembly: basic bitcode → assembly CodeGen test 2015-07-22 21:28:15 +00:00
MCTargetDesc WebAssembly: basic bitcode → assembly CodeGen test 2015-07-22 21:28:15 +00:00
TargetInfo
CMakeLists.txt WebAssembly: basic bitcode → assembly CodeGen test 2015-07-22 21:28:15 +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
WebAssembly.h
WebAssembly.td WebAssembly: start instructions 2015-07-01 23:41:25 +00:00
WebAssemblyAsmPrinter.cpp WebAssembly: basic bitcode → assembly CodeGen test 2015-07-22 21:28:15 +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
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
WebAssemblyInstrConv.td WebAssembly: basic instructions todo, and basic register info. 2015-07-10 18:23:10 +00:00
WebAssemblyInstrFloat.td WebAssembly: add basic int/fp instruction codegen. 2015-07-14 21:13:29 +00:00
WebAssemblyInstrFormats.td WebAssembly: add basic int/fp instruction codegen. 2015-07-14 21:13:29 +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: basic instructions todo, and basic register info. 2015-07-10 18:23:10 +00:00
WebAssemblyInstrInteger.td WebAssembly: add basic int/fp instruction codegen. 2015-07-14 21:13:29 +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
WebAssemblyISelDAGToDAG.cpp WebAssembly: basic bitcode → assembly CodeGen test 2015-07-22 21:28:15 +00:00
WebAssemblyISelLowering.cpp WebAssembly: basic bitcode → assembly CodeGen test 2015-07-22 21:28:15 +00:00
WebAssemblyISelLowering.h WebAssembly: basic bitcode → assembly CodeGen test 2015-07-22 21:28:15 +00:00
WebAssemblyMachineFunctionInfo.cpp
WebAssemblyMachineFunctionInfo.h
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 WebAssembly: start instructions 2015-07-01 23:41:25 +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 - 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.

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