12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- //===- 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 = std::string(CPU.empty() ? "sm_20" : CPU);
- ParseSubtargetFeatures(TargetName, /*TuneCPU*/ 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, /*TuneCPU*/ CPU, FS), PTXVersion(0),
- SmVersion(20), TM(TM),
- TLInfo(TM, initializeSubtargetDependencies(CPU, FS)) {}
- 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;
- }
|