NVPTXSubtarget.cpp revision dce4a407a24b04eebc6a376f8e62b41aaa7b071f
1//===- NVPTXSubtarget.cpp - NVPTX Subtarget Information -------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file implements the NVPTX specific subclass of TargetSubtarget.
11//
12//===----------------------------------------------------------------------===//
13
14#include "NVPTXSubtarget.h"
15
16using 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// Pin the vtable to this file.
26void NVPTXSubtarget::anchor() {}
27
28NVPTXSubtarget::NVPTXSubtarget(const std::string &TT, const std::string &CPU,
29                               const std::string &FS, bool is64Bit)
30    : NVPTXGenSubtargetInfo(TT, CPU, FS), Is64Bit(is64Bit), PTXVersion(0),
31      SmVersion(20) {
32
33  Triple T(TT);
34
35  if (T.getOS() == Triple::NVCL)
36    drvInterface = NVPTX::NVCL;
37  else
38    drvInterface = NVPTX::CUDA;
39
40  // Provide the default CPU if none
41  std::string defCPU = "sm_20";
42
43  ParseSubtargetFeatures((CPU.empty() ? defCPU : CPU), FS);
44
45  // Get the TargetName from the FS if available
46  if (FS.empty() && CPU.empty())
47    TargetName = defCPU;
48  else if (!CPU.empty())
49    TargetName = CPU;
50  else
51    llvm_unreachable("we are not using FeatureStr");
52
53  // We default to PTX 3.1, but we cannot just default to it in the initializer
54  // since the attribute parser checks if the given option is >= the default.
55  // So if we set ptx31 as the default, the ptx30 attribute would never match.
56  // Instead, we use 0 as the default and manually set 31 if the default is
57  // used.
58  if (PTXVersion == 0) {
59    PTXVersion = 31;
60  }
61}
62