LLVM  10.0.0svn
NVPTXSubtarget.cpp
Go to the documentation of this file.
1 //===- NVPTXSubtarget.cpp - NVPTX Subtarget Information -------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file implements the NVPTX specific subclass of TargetSubtarget.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #include "NVPTXSubtarget.h"
14 #include "NVPTXTargetMachine.h"
15 
16 using namespace llvm;
17 
18 #define DEBUG_TYPE "nvptx-subtarget"
19 
20 #define GET_SUBTARGETINFO_ENUM
21 #define GET_SUBTARGETINFO_TARGET_DESC
22 #define GET_SUBTARGETINFO_CTOR
23 #include "NVPTXGenSubtargetInfo.inc"
24 
25 static cl::opt<bool>
26  NoF16Math("nvptx-no-f16-math", cl::ZeroOrMore, cl::Hidden,
27  cl::desc("NVPTX Specific: Disable generation of f16 math ops."),
28  cl::init(false));
29 
30 // Pin the vtable to this file.
31 void NVPTXSubtarget::anchor() {}
32 
34  StringRef FS) {
35  // Provide the default CPU if we don't have one.
36  TargetName = CPU.empty() ? "sm_20" : CPU;
37 
38  ParseSubtargetFeatures(TargetName, FS);
39 
40  // Set default to PTX 3.2 (CUDA 5.5)
41  if (PTXVersion == 0) {
42  PTXVersion = 32;
43  }
44 
45  return *this;
46 }
47 
48 NVPTXSubtarget::NVPTXSubtarget(const Triple &TT, const std::string &CPU,
49  const std::string &FS,
50  const NVPTXTargetMachine &TM)
51  : NVPTXGenSubtargetInfo(TT, CPU, FS), PTXVersion(0), SmVersion(20), TM(TM),
52  InstrInfo(), TLInfo(TM, initializeSubtargetDependencies(CPU, FS)),
53  FrameLowering() {}
54 
56  // Enable handles for Kepler+, where CUDA supports indirect surfaces and
57  // textures
58  if (TM.getDrvInterface() == NVPTX::CUDA)
59  return (SmVersion >= 30);
60 
61  // Disabled, otherwise
62  return false;
63 }
64 
66  return hasFP16Math() && NoF16Math == false;
67 }
This class represents lattice values for constants.
Definition: AllocatorList.h:23
void ParseSubtargetFeatures(StringRef CPU, StringRef FS)
bool hasImageHandles() const
NVPTXSubtarget(const Triple &TT, const std::string &CPU, const std::string &FS, const NVPTXTargetMachine &TM)
This constructor initializes the data members to match that of the specified module.
LLVM_NODISCARD bool empty() const
empty - Check if the string is empty.
Definition: StringRef.h:140
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))
initializer< Ty > init(const Ty &Val)
Definition: CommandLine.h:432
bool hasFP16Math() const
NVPTX::DrvInterface getDrvInterface() const
Triple - Helper class for working with autoconf configuration names.
Definition: Triple.h:43
NVPTXTargetMachine.
bool allowFP16Math() const
NVPTXSubtarget & initializeSubtargetDependencies(StringRef CPU, StringRef FS)
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:48