149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//===- NVPTXSubtarget.cpp - NVPTX Subtarget Information -------------------===// 249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// 349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// The LLVM Compiler Infrastructure 449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// 549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// This file is distributed under the University of Illinois Open Source 649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// License. See LICENSE.TXT for details. 749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// 849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//===----------------------------------------------------------------------===// 949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// 1049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// This file implements the NVPTX specific subclass of TargetSubtarget. 1149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// 1249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//===----------------------------------------------------------------------===// 1349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski 1449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#include "NVPTXSubtarget.h" 1549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#define GET_SUBTARGETINFO_ENUM 1649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#define GET_SUBTARGETINFO_TARGET_DESC 1749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#define GET_SUBTARGETINFO_CTOR 1849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#include "NVPTXGenSubtargetInfo.inc" 1949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski 2049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinskiusing namespace llvm; 2149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski 2249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// Select Driver Interface 2349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#include "llvm/Support/CommandLine.h" 2449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinskinamespace { 2549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinskicl::opt<NVPTX::DrvInterface> 2649683f3c961379fbc088871a5d6304950f1f1cbcJustin HolewinskiDriverInterface(cl::desc("Choose driver interface:"), 2749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski cl::values( 2849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski clEnumValN(NVPTX::NVCL, "drvnvcl", "Nvidia OpenCL driver"), 2949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski clEnumValN(NVPTX::CUDA, "drvcuda", "Nvidia CUDA driver"), 3049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski clEnumValN(NVPTX::TEST, "drvtest", "Plain Test"), 3149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski clEnumValEnd), 3249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski cl::init(NVPTX::NVCL)); 3349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski} 3449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski 3549683f3c961379fbc088871a5d6304950f1f1cbcJustin HolewinskiNVPTXSubtarget::NVPTXSubtarget(const std::string &TT, const std::string &CPU, 3649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski const std::string &FS, bool is64Bit) 3749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski:NVPTXGenSubtargetInfo(TT, "", FS), // Don't pass CPU to subtarget, 3849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski // because we don't register all 3949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski // nvptx targets. 4049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski Is64Bit(is64Bit) { 4149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski 4249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski drvInterface = DriverInterface; 4349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski 4449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski // Provide the default CPU if none 4549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski std::string defCPU = "sm_10"; 4649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski 4749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski // Get the TargetName from the FS if available 4849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski if (FS.empty() && CPU.empty()) 4949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski TargetName = defCPU; 5049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski else if (!CPU.empty()) 5149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski TargetName = CPU; 5249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski else 5349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski llvm_unreachable("we are not using FeatureStr"); 5449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski 5549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski // Set up the SmVersion 5649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski SmVersion = atoi(TargetName.c_str()+3); 5749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski} 58