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 llvm-svn: 242939
63 lines
2.1 KiB
C++
63 lines
2.1 KiB
C++
//===-- WebAssemblyMCTargetDesc.cpp - WebAssembly Target Descriptions -----===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
///
|
|
/// \file
|
|
/// \brief This file provides WebAssembly-specific target descriptions.
|
|
///
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "WebAssemblyMCTargetDesc.h"
|
|
#include "InstPrinter/WebAssemblyInstPrinter.h"
|
|
#include "WebAssemblyMCAsmInfo.h"
|
|
#include "llvm/MC/MCCodeGenInfo.h"
|
|
#include "llvm/MC/MCInstrInfo.h"
|
|
#include "llvm/MC/MCRegisterInfo.h"
|
|
#include "llvm/MC/MCStreamer.h"
|
|
#include "llvm/MC/MCSubtargetInfo.h"
|
|
#include "llvm/Support/ErrorHandling.h"
|
|
#include "llvm/Support/TargetRegistry.h"
|
|
using namespace llvm;
|
|
|
|
#define DEBUG_TYPE "wasm-mc-target-desc"
|
|
|
|
#define GET_INSTRINFO_MC_DESC
|
|
#include "WebAssemblyGenInstrInfo.inc"
|
|
|
|
#define GET_SUBTARGETINFO_MC_DESC
|
|
#include "WebAssemblyGenSubtargetInfo.inc"
|
|
|
|
#define GET_REGINFO_MC_DESC
|
|
#include "WebAssemblyGenRegisterInfo.inc"
|
|
|
|
static MCAsmInfo *createWebAssemblyMCAsmInfo(const MCRegisterInfo &MRI,
|
|
const Triple &TT) {
|
|
MCAsmInfo *MAI = new WebAssemblyMCAsmInfo(TT);
|
|
return MAI;
|
|
}
|
|
|
|
static MCInstPrinter *
|
|
createWebAssemblyMCInstPrinter(const Triple &T, unsigned SyntaxVariant,
|
|
const MCAsmInfo &MAI, const MCInstrInfo &MII,
|
|
const MCRegisterInfo &MRI) {
|
|
if (SyntaxVariant == 0 || SyntaxVariant == 1)
|
|
return new WebAssemblyInstPrinter(MAI, MII, MRI);
|
|
return nullptr;
|
|
}
|
|
|
|
// Force static initialization.
|
|
extern "C" void LLVMInitializeWebAssemblyTargetMC() {
|
|
for (Target *T : {&TheWebAssemblyTarget32, &TheWebAssemblyTarget64}) {
|
|
// Register the MC asm info.
|
|
RegisterMCAsmInfoFn X(*T, createWebAssemblyMCAsmInfo);
|
|
|
|
// Register the MCInstPrinter.
|
|
TargetRegistry::RegisterMCInstPrinter(*T, createWebAssemblyMCInstPrinter);
|
|
}
|
|
}
|