diff options
author | Alex Bradbury <asb@lowrisc.org> | 2016-11-01 17:27:54 +0000 |
---|---|---|
committer | Alex Bradbury <asb@lowrisc.org> | 2016-11-01 17:27:54 +0000 |
commit | b2e5472d854365ee26a24c7fe3ec6adfc2362ae4 (patch) | |
tree | 020082cb3297d3d7c41bc8b26742821f0cc607c3 /llvm/lib/Target/RISCV/RISCVTargetMachine.cpp | |
parent | 9677b602880c0202108686e6d2d4f2d1df36608d (diff) | |
download | bcm5719-llvm-b2e5472d854365ee26a24c7fe3ec6adfc2362ae4.tar.gz bcm5719-llvm-b2e5472d854365ee26a24c7fe3ec6adfc2362ae4.zip |
[RISCV] Add stub backend
This contains just enough for lib/Target/RISCV to compile. Notably a basic
RISCVTargetMachine and RISCVTargetInfo. At this point you can attempt llc
-march=riscv32 myinput.ll and will find it fails due to the lack of
MCAsmInfo.
See http://lists.llvm.org/pipermail/llvm-dev/2016-August/103748.html for
further discussion
Differential Revision: https://reviews.llvm.org/D23560
llvm-svn: 285712
Diffstat (limited to 'llvm/lib/Target/RISCV/RISCVTargetMachine.cpp')
-rw-r--r-- | llvm/lib/Target/RISCV/RISCVTargetMachine.cpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp b/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp new file mode 100644 index 00000000000..afbbe004186 --- /dev/null +++ b/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp @@ -0,0 +1,58 @@ +//===-- RISCVTargetMachine.cpp - Define TargetMachine for RISCV -----------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// Implements the info about RISCV target spec. +// +//===----------------------------------------------------------------------===// + +#include "RISCVTargetMachine.h" +#include "llvm/ADT/STLExtras.h" +#include "llvm/CodeGen/TargetLoweringObjectFileImpl.h" +#include "llvm/CodeGen/TargetPassConfig.h" +#include "llvm/IR/LegacyPassManager.h" +#include "llvm/CodeGen/Passes.h" +#include "llvm/Support/FormattedStream.h" +#include "llvm/Support/TargetRegistry.h" +#include "llvm/Target/TargetOptions.h" +using namespace llvm; + +extern "C" void LLVMInitializeRISCVTarget() { + RegisterTargetMachine<RISCVTargetMachine> X(getTheRISCV32Target()); + RegisterTargetMachine<RISCVTargetMachine> Y(getTheRISCV64Target()); +} + +static std::string computeDataLayout(const Triple &TT) { + if (TT.isArch64Bit()) { + return "e-m:e-i64:64-n32:64-S128"; + } else { + assert(TT.isArch32Bit() && "only RV32 and RV64 are currently supported"); + return "e-m:e-i64:64-n32-S128"; + } +} + +static Reloc::Model getEffectiveRelocModel(const Triple &TT, + Optional<Reloc::Model> RM) { + if (!RM.hasValue()) + return Reloc::Static; + return *RM; +} + +RISCVTargetMachine::RISCVTargetMachine(const Target &T, const Triple &TT, + StringRef CPU, StringRef FS, + const TargetOptions &Options, + Optional<Reloc::Model> RM, + CodeModel::Model CM, + CodeGenOpt::Level OL) + : LLVMTargetMachine(T, computeDataLayout(TT), TT, CPU, FS, Options, + getEffectiveRelocModel(TT, RM), CM, OL), + TLOF(make_unique<TargetLoweringObjectFileELF>()) {} + +TargetPassConfig *RISCVTargetMachine::createPassConfig(PassManagerBase &PM) { + return new TargetPassConfig(this, PM); +} |