brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.3 KiB · cb7132b Raw
100 lines · cpp
1//===-- NVPTXMCTargetDesc.cpp - NVPTX Target Descriptions -------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This file provides NVPTX specific target descriptions.10//11//===----------------------------------------------------------------------===//12 13#include "NVPTXMCTargetDesc.h"14#include "NVPTXInstPrinter.h"15#include "NVPTXMCAsmInfo.h"16#include "NVPTXTargetStreamer.h"17#include "TargetInfo/NVPTXTargetInfo.h"18#include "llvm/MC/MCInstrInfo.h"19#include "llvm/MC/MCRegisterInfo.h"20#include "llvm/MC/MCSubtargetInfo.h"21#include "llvm/MC/TargetRegistry.h"22#include "llvm/Support/Compiler.h"23 24using namespace llvm;25 26#define GET_INSTRINFO_MC_DESC27#define ENABLE_INSTR_PREDICATE_VERIFIER28#include "NVPTXGenInstrInfo.inc"29 30#define GET_SUBTARGETINFO_MC_DESC31#include "NVPTXGenSubtargetInfo.inc"32 33#define GET_REGINFO_MC_DESC34#include "NVPTXGenRegisterInfo.inc"35 36static MCInstrInfo *createNVPTXMCInstrInfo() {37  MCInstrInfo *X = new MCInstrInfo();38  InitNVPTXMCInstrInfo(X);39  return X;40}41 42static MCRegisterInfo *createNVPTXMCRegisterInfo(const Triple &TT) {43  MCRegisterInfo *X = new MCRegisterInfo();44  // PTX does not have a return address register.45  InitNVPTXMCRegisterInfo(X, 0);46  return X;47}48 49static MCSubtargetInfo *50createNVPTXMCSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS) {51  return createNVPTXMCSubtargetInfoImpl(TT, CPU, /*TuneCPU*/ CPU, FS);52}53 54static MCInstPrinter *createNVPTXMCInstPrinter(const Triple &T,55                                               unsigned SyntaxVariant,56                                               const MCAsmInfo &MAI,57                                               const MCInstrInfo &MII,58                                               const MCRegisterInfo &MRI) {59  if (SyntaxVariant == 0)60    return new NVPTXInstPrinter(MAI, MII, MRI);61  return nullptr;62}63 64static MCTargetStreamer *createTargetAsmStreamer(MCStreamer &S,65                                                 formatted_raw_ostream &,66                                                 MCInstPrinter *) {67  return new NVPTXAsmTargetStreamer(S);68}69 70static MCTargetStreamer *createNullTargetStreamer(MCStreamer &S) {71  return new NVPTXTargetStreamer(S);72}73 74// Force static initialization.75extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void76LLVMInitializeNVPTXTargetMC() {77  for (Target *T : {&getTheNVPTXTarget32(), &getTheNVPTXTarget64()}) {78    // Register the MC asm info.79    RegisterMCAsmInfo<NVPTXMCAsmInfo> X(*T);80 81    // Register the MC instruction info.82    TargetRegistry::RegisterMCInstrInfo(*T, createNVPTXMCInstrInfo);83 84    // Register the MC register info.85    TargetRegistry::RegisterMCRegInfo(*T, createNVPTXMCRegisterInfo);86 87    // Register the MC subtarget info.88    TargetRegistry::RegisterMCSubtargetInfo(*T, createNVPTXMCSubtargetInfo);89 90    // Register the MCInstPrinter.91    TargetRegistry::RegisterMCInstPrinter(*T, createNVPTXMCInstPrinter);92 93    // Register the MCTargetStreamer.94    TargetRegistry::RegisterAsmTargetStreamer(*T, createTargetAsmStreamer);95 96    // Register the MCTargetStreamer.97    TargetRegistry::RegisterNullTargetStreamer(*T, createNullTargetStreamer);98  }99}100