119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman//===- PTXSubtarget.cpp - PTX Subtarget Information ---------------*- C++ -*-=// 219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// 319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// The LLVM Compiler Infrastructure 419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// 519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// This file is distributed under the University of Illinois Open Source 619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// License. See LICENSE.TXT for details. 719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// 819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman//===----------------------------------------------------------------------===// 919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// 1019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// This file implements the PTX specific subclass of TargetSubtargetInfo. 1119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// 1219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman//===----------------------------------------------------------------------===// 1319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 1419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "PTXSubtarget.h" 1519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "PTX.h" 1619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "llvm/Support/ErrorHandling.h" 1719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "llvm/Support/TargetRegistry.h" 1819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 1919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#define GET_SUBTARGETINFO_TARGET_DESC 2019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#define GET_SUBTARGETINFO_CTOR 2119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "PTXGenSubtargetInfo.inc" 2219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 2319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanusing namespace llvm; 2419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 2519bac1e08be200c31efd26f0f5fd144c9b3eefd3John BaumanPTXSubtarget::PTXSubtarget(const std::string &TT, const std::string &CPU, 2619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman const std::string &FS, bool is64Bit) 2719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman : PTXGenSubtargetInfo(TT, CPU, FS), 2819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman PTXTarget(PTX_COMPUTE_1_0), 2919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman PTXVersion(PTX_VERSION_2_0), 3019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SupportsDouble(false), 3119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SupportsFMA(true), 3219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Is64Bit(is64Bit) { 3319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman std::string TARGET = CPU; 3419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman if (TARGET.empty()) 3519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman TARGET = "generic"; 3619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ParseSubtargetFeatures(TARGET, FS); 3719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman} 3819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 3919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanstd::string PTXSubtarget::getTargetString() const { 4019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman switch(PTXTarget) { 4119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman default: llvm_unreachable("Unknown PTX target"); 4219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman case PTX_SM_1_0: return "sm_10"; 4319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman case PTX_SM_1_1: return "sm_11"; 4419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman case PTX_SM_1_2: return "sm_12"; 4519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman case PTX_SM_1_3: return "sm_13"; 4619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman case PTX_SM_2_0: return "sm_20"; 4719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman case PTX_SM_2_1: return "sm_21"; 4819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman case PTX_SM_2_2: return "sm_22"; 4919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman case PTX_SM_2_3: return "sm_23"; 5019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman case PTX_COMPUTE_1_0: return "compute_10"; 5119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman case PTX_COMPUTE_1_1: return "compute_11"; 5219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman case PTX_COMPUTE_1_2: return "compute_12"; 5319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman case PTX_COMPUTE_1_3: return "compute_13"; 5419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman case PTX_COMPUTE_2_0: return "compute_20"; 5519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman } 5619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman} 5719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 5819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanstd::string PTXSubtarget::getPTXVersionString() const { 5919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman switch(PTXVersion) { 6019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman default: llvm_unreachable("Unknown PTX version"); 6119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman case PTX_VERSION_2_0: return "2.0"; 6219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman case PTX_VERSION_2_1: return "2.1"; 6319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman case PTX_VERSION_2_2: return "2.2"; 6419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman case PTX_VERSION_2_3: return "2.3"; 6519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman } 6619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman} 67