1//===- PTXSubtarget.cpp - PTX Subtarget Information ---------------*- C++ -*-=//
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 PTX specific subclass of TargetSubtargetInfo.
11//
12//===----------------------------------------------------------------------===//
13
14#include "PTXSubtarget.h"
15#include "PTX.h"
16#include "llvm/Support/ErrorHandling.h"
17#include "llvm/Support/TargetRegistry.h"
18
19#define GET_SUBTARGETINFO_TARGET_DESC
20#define GET_SUBTARGETINFO_CTOR
21#include "PTXGenSubtargetInfo.inc"
22
23using namespace llvm;
24
25PTXSubtarget::PTXSubtarget(const std::string &TT, const std::string &CPU,
26                           const std::string &FS, bool is64Bit)
27  : PTXGenSubtargetInfo(TT, CPU, FS),
28    PTXTarget(PTX_COMPUTE_1_0),
29    PTXVersion(PTX_VERSION_2_0),
30    SupportsDouble(false),
31    SupportsFMA(true),
32    Is64Bit(is64Bit) {
33  std::string TARGET = CPU;
34  if (TARGET.empty())
35    TARGET = "generic";
36  ParseSubtargetFeatures(TARGET, FS);
37}
38
39std::string PTXSubtarget::getTargetString() const {
40  switch(PTXTarget) {
41    default: llvm_unreachable("Unknown PTX target");
42    case PTX_SM_1_0: return "sm_10";
43    case PTX_SM_1_1: return "sm_11";
44    case PTX_SM_1_2: return "sm_12";
45    case PTX_SM_1_3: return "sm_13";
46    case PTX_SM_2_0: return "sm_20";
47    case PTX_SM_2_1: return "sm_21";
48    case PTX_SM_2_2: return "sm_22";
49    case PTX_SM_2_3: return "sm_23";
50    case PTX_COMPUTE_1_0: return "compute_10";
51    case PTX_COMPUTE_1_1: return "compute_11";
52    case PTX_COMPUTE_1_2: return "compute_12";
53    case PTX_COMPUTE_1_3: return "compute_13";
54    case PTX_COMPUTE_2_0: return "compute_20";
55  }
56}
57
58std::string PTXSubtarget::getPTXVersionString() const {
59  switch(PTXVersion) {
60    default: llvm_unreachable("Unknown PTX version");
61    case PTX_VERSION_2_0: return "2.0";
62    case PTX_VERSION_2_1: return "2.1";
63    case PTX_VERSION_2_2: return "2.2";
64    case PTX_VERSION_2_3: return "2.3";
65  }
66}
67