Path: blob/main/contrib/llvm-project/llvm/lib/Target/NVPTX/MCTargetDesc/NVPTXMCTargetDesc.cpp
35295 views
//===-- NVPTXMCTargetDesc.cpp - NVPTX Target Descriptions -------*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//7//8// This file provides NVPTX specific target descriptions.9//10//===----------------------------------------------------------------------===//1112#include "NVPTXMCTargetDesc.h"13#include "NVPTXInstPrinter.h"14#include "NVPTXMCAsmInfo.h"15#include "NVPTXTargetStreamer.h"16#include "TargetInfo/NVPTXTargetInfo.h"17#include "llvm/MC/MCInstrInfo.h"18#include "llvm/MC/MCRegisterInfo.h"19#include "llvm/MC/MCSubtargetInfo.h"20#include "llvm/MC/TargetRegistry.h"2122using namespace llvm;2324#define GET_INSTRINFO_MC_DESC25#define ENABLE_INSTR_PREDICATE_VERIFIER26#include "NVPTXGenInstrInfo.inc"2728#define GET_SUBTARGETINFO_MC_DESC29#include "NVPTXGenSubtargetInfo.inc"3031#define GET_REGINFO_MC_DESC32#include "NVPTXGenRegisterInfo.inc"3334static MCInstrInfo *createNVPTXMCInstrInfo() {35MCInstrInfo *X = new MCInstrInfo();36InitNVPTXMCInstrInfo(X);37return X;38}3940static MCRegisterInfo *createNVPTXMCRegisterInfo(const Triple &TT) {41MCRegisterInfo *X = new MCRegisterInfo();42// PTX does not have a return address register.43InitNVPTXMCRegisterInfo(X, 0);44return X;45}4647static MCSubtargetInfo *48createNVPTXMCSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS) {49return createNVPTXMCSubtargetInfoImpl(TT, CPU, /*TuneCPU*/ CPU, FS);50}5152static MCInstPrinter *createNVPTXMCInstPrinter(const Triple &T,53unsigned SyntaxVariant,54const MCAsmInfo &MAI,55const MCInstrInfo &MII,56const MCRegisterInfo &MRI) {57if (SyntaxVariant == 0)58return new NVPTXInstPrinter(MAI, MII, MRI);59return nullptr;60}6162static MCTargetStreamer *createTargetAsmStreamer(MCStreamer &S,63formatted_raw_ostream &,64MCInstPrinter *) {65return new NVPTXAsmTargetStreamer(S);66}6768static MCTargetStreamer *createNullTargetStreamer(MCStreamer &S) {69return new NVPTXTargetStreamer(S);70}7172// Force static initialization.73extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeNVPTXTargetMC() {74for (Target *T : {&getTheNVPTXTarget32(), &getTheNVPTXTarget64()}) {75// Register the MC asm info.76RegisterMCAsmInfo<NVPTXMCAsmInfo> X(*T);7778// Register the MC instruction info.79TargetRegistry::RegisterMCInstrInfo(*T, createNVPTXMCInstrInfo);8081// Register the MC register info.82TargetRegistry::RegisterMCRegInfo(*T, createNVPTXMCRegisterInfo);8384// Register the MC subtarget info.85TargetRegistry::RegisterMCSubtargetInfo(*T, createNVPTXMCSubtargetInfo);8687// Register the MCInstPrinter.88TargetRegistry::RegisterMCInstPrinter(*T, createNVPTXMCInstPrinter);8990// Register the MCTargetStreamer.91TargetRegistry::RegisterAsmTargetStreamer(*T, createTargetAsmStreamer);9293// Register the MCTargetStreamer.94TargetRegistry::RegisterNullTargetStreamer(*T, createNullTargetStreamer);95}96}979899