| //===- NVPTXSubtarget.cpp - NVPTX Subtarget Information -------------------===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| // | |
| // This file implements the NVPTX specific subclass of TargetSubtarget. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #include "NVPTXSubtarget.h" | |
| #include "NVPTXTargetMachine.h" | |
| using namespace llvm; | |
| #define DEBUG_TYPE "nvptx-subtarget" | |
| #define GET_SUBTARGETINFO_ENUM | |
| #define GET_SUBTARGETINFO_TARGET_DESC | |
| #define GET_SUBTARGETINFO_CTOR | |
| #include "NVPTXGenSubtargetInfo.inc" | |
| static cl::opt<bool> | |
| NoF16Math("nvptx-no-f16-math", cl::ZeroOrMore, cl::Hidden, | |
| cl::desc("NVPTX Specific: Disable generation of f16 math ops."), | |
| cl::init(false)); | |
| // Pin the vtable to this file. | |
| void NVPTXSubtarget::anchor() {} | |
| NVPTXSubtarget &NVPTXSubtarget::initializeSubtargetDependencies(StringRef CPU, | |
| StringRef FS) { | |
| // Provide the default CPU if we don't have one. | |
| TargetName = CPU.empty() ? "sm_20" : CPU; | |
| ParseSubtargetFeatures(TargetName, FS); | |
| // Set default to PTX 3.2 (CUDA 5.5) | |
| if (PTXVersion == 0) { | |
| PTXVersion = 32; | |
| } | |
| return *this; | |
| } | |
| NVPTXSubtarget::NVPTXSubtarget(const Triple &TT, const std::string &CPU, | |
| const std::string &FS, | |
| const NVPTXTargetMachine &TM) | |
| : NVPTXGenSubtargetInfo(TT, CPU, FS), PTXVersion(0), SmVersion(20), TM(TM), | |
| InstrInfo(), TLInfo(TM, initializeSubtargetDependencies(CPU, FS)), | |
| FrameLowering() {} | |
| bool NVPTXSubtarget::hasImageHandles() const { | |
| // Enable handles for Kepler+, where CUDA supports indirect surfaces and | |
| // textures | |
| if (TM.getDrvInterface() == NVPTX::CUDA) | |
| return (SmVersion >= 30); | |
| // Disabled, otherwise | |
| return false; | |
| } | |
| bool NVPTXSubtarget::allowFP16Math() const { | |
| return hasFP16Math() && NoF16Math == false; | |
| } |