LLVM API Documentation

NVPTXMCTargetDesc.cpp
Go to the documentation of this file.
00001 //===-- NVPTXMCTargetDesc.cpp - NVPTX Target Descriptions -------*- C++ -*-===//
00002 //
00003 //                     The LLVM Compiler Infrastructure
00004 //
00005 // This file is distributed under the University of Illinois Open Source
00006 // License. See LICENSE.TXT for details.
00007 //
00008 //===----------------------------------------------------------------------===//
00009 //
00010 // This file provides NVPTX specific target descriptions.
00011 //
00012 //===----------------------------------------------------------------------===//
00013 
00014 #include "NVPTXMCTargetDesc.h"
00015 #include "NVPTXMCAsmInfo.h"
00016 #include "llvm/MC/MCCodeGenInfo.h"
00017 #include "llvm/MC/MCInstrInfo.h"
00018 #include "llvm/MC/MCRegisterInfo.h"
00019 #include "llvm/MC/MCSubtargetInfo.h"
00020 #include "llvm/Support/TargetRegistry.h"
00021 
00022 #define GET_INSTRINFO_MC_DESC
00023 #include "NVPTXGenInstrInfo.inc"
00024 
00025 #define GET_SUBTARGETINFO_MC_DESC
00026 #include "NVPTXGenSubtargetInfo.inc"
00027 
00028 #define GET_REGINFO_MC_DESC
00029 #include "NVPTXGenRegisterInfo.inc"
00030 
00031 using namespace llvm;
00032 
00033 static MCInstrInfo *createNVPTXMCInstrInfo() {
00034   MCInstrInfo *X = new MCInstrInfo();
00035   InitNVPTXMCInstrInfo(X);
00036   return X;
00037 }
00038 
00039 static MCRegisterInfo *createNVPTXMCRegisterInfo(StringRef TT) {
00040   MCRegisterInfo *X = new MCRegisterInfo();
00041   // PTX does not have a return address register.
00042   InitNVPTXMCRegisterInfo(X, 0);
00043   return X;
00044 }
00045 
00046 static MCSubtargetInfo *
00047 createNVPTXMCSubtargetInfo(StringRef TT, StringRef CPU, StringRef FS) {
00048   MCSubtargetInfo *X = new MCSubtargetInfo();
00049   InitNVPTXMCSubtargetInfo(X, TT, CPU, FS);
00050   return X;
00051 }
00052 
00053 static MCCodeGenInfo *createNVPTXMCCodeGenInfo(
00054     StringRef TT, Reloc::Model RM, CodeModel::Model CM, CodeGenOpt::Level OL) {
00055   MCCodeGenInfo *X = new MCCodeGenInfo();
00056   X->InitMCCodeGenInfo(RM, CM, OL);
00057   return X;
00058 }
00059 
00060 // Force static initialization.
00061 extern "C" void LLVMInitializeNVPTXTargetMC() {
00062   // Register the MC asm info.
00063   RegisterMCAsmInfo<NVPTXMCAsmInfo> X(TheNVPTXTarget32);
00064   RegisterMCAsmInfo<NVPTXMCAsmInfo> Y(TheNVPTXTarget64);
00065 
00066   // Register the MC codegen info.
00067   TargetRegistry::RegisterMCCodeGenInfo(TheNVPTXTarget32,
00068                                         createNVPTXMCCodeGenInfo);
00069   TargetRegistry::RegisterMCCodeGenInfo(TheNVPTXTarget64,
00070                                         createNVPTXMCCodeGenInfo);
00071 
00072   // Register the MC instruction info.
00073   TargetRegistry::RegisterMCInstrInfo(TheNVPTXTarget32, createNVPTXMCInstrInfo);
00074   TargetRegistry::RegisterMCInstrInfo(TheNVPTXTarget64, createNVPTXMCInstrInfo);
00075 
00076   // Register the MC register info.
00077   TargetRegistry::RegisterMCRegInfo(TheNVPTXTarget32,
00078                                     createNVPTXMCRegisterInfo);
00079   TargetRegistry::RegisterMCRegInfo(TheNVPTXTarget64,
00080                                     createNVPTXMCRegisterInfo);
00081 
00082   // Register the MC subtarget info.
00083   TargetRegistry::RegisterMCSubtargetInfo(TheNVPTXTarget32,
00084                                           createNVPTXMCSubtargetInfo);
00085   TargetRegistry::RegisterMCSubtargetInfo(TheNVPTXTarget64,
00086                                           createNVPTXMCSubtargetInfo);
00087 
00088 }