131d157ae1ac2cd9c787dc3c1d28e64c682803844Jia Liu//===-- PTXSubtarget.cpp - PTX Subtarget Information ----------------------===// 250880d08ec32857fa557281046c81a0506e7f64dEric Christopher// 350880d08ec32857fa557281046c81a0506e7f64dEric Christopher// The LLVM Compiler Infrastructure 450880d08ec32857fa557281046c81a0506e7f64dEric Christopher// 550880d08ec32857fa557281046c81a0506e7f64dEric Christopher// This file is distributed under the University of Illinois Open Source 650880d08ec32857fa557281046c81a0506e7f64dEric Christopher// License. See LICENSE.TXT for details. 750880d08ec32857fa557281046c81a0506e7f64dEric Christopher// 850880d08ec32857fa557281046c81a0506e7f64dEric Christopher//===----------------------------------------------------------------------===// 950880d08ec32857fa557281046c81a0506e7f64dEric Christopher// 105b1b4489cf3a0f56f8be0673fc5cc380a32d277bEvan Cheng// This file implements the PTX specific subclass of TargetSubtargetInfo. 1150880d08ec32857fa557281046c81a0506e7f64dEric Christopher// 1250880d08ec32857fa557281046c81a0506e7f64dEric Christopher//===----------------------------------------------------------------------===// 1350880d08ec32857fa557281046c81a0506e7f64dEric Christopher 1450880d08ec32857fa557281046c81a0506e7f64dEric Christopher#include "PTXSubtarget.h" 15ffc0e73046f737d75e0a62b3a83ef19bcef111e3Evan Cheng#include "PTX.h" 16fd8978b021dbb0b9b09084dcc707c2054ff76280Che-Liang Chiou#include "llvm/Support/ErrorHandling.h" 173e74d6fdd248e20a280f1dff3da9a6c689c2c4c3Evan Cheng#include "llvm/Support/TargetRegistry.h" 1850880d08ec32857fa557281046c81a0506e7f64dEric Christopher 1994214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng#define GET_SUBTARGETINFO_TARGET_DESC 20ebdeeab812beec0385b445f3d4c41a114e0d972fEvan Cheng#define GET_SUBTARGETINFO_CTOR 21385e930d55f3ecd3c9538823dfa5896a12461845Evan Cheng#include "PTXGenSubtargetInfo.inc" 2294214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng 2350880d08ec32857fa557281046c81a0506e7f64dEric Christopherusing namespace llvm; 2450880d08ec32857fa557281046c81a0506e7f64dEric Christopher 252d24e2a396a1d211baaeedf32148a3b657240170David Blaikievoid PTXSubtarget::anchor() { } 262d24e2a396a1d211baaeedf32148a3b657240170David Blaikie 27276365dd4bc0c2160f91fd8062ae1fc90c86c324Evan ChengPTXSubtarget::PTXSubtarget(const std::string &TT, const std::string &CPU, 28276365dd4bc0c2160f91fd8062ae1fc90c86c324Evan Cheng const std::string &FS, bool is64Bit) 290ddff1b5359433faf2eb1c4ff5320ddcbd42f52fEvan Cheng : PTXGenSubtargetInfo(TT, CPU, FS), 3094214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng PTXTarget(PTX_COMPUTE_1_0), 31625eec10fef5449f709ecd7a4e348aa94b29aef8Justin Holewinski PTXVersion(PTX_VERSION_2_0), 32f48817cbf98472c4007e38ff7dad57126531a6e0Che-Liang Chiou SupportsDouble(false), 33657d1bed2368ab0355ddf69acd737a43d0bfabcfJustin Holewinski SupportsFMA(true), 3435f4fb34ff60b8f23b2c9691b312bc67cac95eb4Justin Holewinski Is64Bit(is64Bit) { 35276365dd4bc0c2160f91fd8062ae1fc90c86c324Evan Cheng std::string TARGET = CPU; 36276365dd4bc0c2160f91fd8062ae1fc90c86c324Evan Cheng if (TARGET.empty()) 37276365dd4bc0c2160f91fd8062ae1fc90c86c324Evan Cheng TARGET = "generic"; 380ddff1b5359433faf2eb1c4ff5320ddcbd42f52fEvan Cheng ParseSubtargetFeatures(TARGET, FS); 39fd8978b021dbb0b9b09084dcc707c2054ff76280Che-Liang Chiou} 40fd8978b021dbb0b9b09084dcc707c2054ff76280Che-Liang Chiou 41fd8978b021dbb0b9b09084dcc707c2054ff76280Che-Liang Chioustd::string PTXSubtarget::getTargetString() const { 4235f4fb34ff60b8f23b2c9691b312bc67cac95eb4Justin Holewinski switch(PTXTarget) { 4335f4fb34ff60b8f23b2c9691b312bc67cac95eb4Justin Holewinski default: llvm_unreachable("Unknown PTX target"); 44fd8978b021dbb0b9b09084dcc707c2054ff76280Che-Liang Chiou case PTX_SM_1_0: return "sm_10"; 4535f4fb34ff60b8f23b2c9691b312bc67cac95eb4Justin Holewinski case PTX_SM_1_1: return "sm_11"; 4635f4fb34ff60b8f23b2c9691b312bc67cac95eb4Justin Holewinski case PTX_SM_1_2: return "sm_12"; 47fd8978b021dbb0b9b09084dcc707c2054ff76280Che-Liang Chiou case PTX_SM_1_3: return "sm_13"; 48fd8978b021dbb0b9b09084dcc707c2054ff76280Che-Liang Chiou case PTX_SM_2_0: return "sm_20"; 4935f4fb34ff60b8f23b2c9691b312bc67cac95eb4Justin Holewinski case PTX_SM_2_1: return "sm_21"; 5035f4fb34ff60b8f23b2c9691b312bc67cac95eb4Justin Holewinski case PTX_SM_2_2: return "sm_22"; 5135f4fb34ff60b8f23b2c9691b312bc67cac95eb4Justin Holewinski case PTX_SM_2_3: return "sm_23"; 5235f4fb34ff60b8f23b2c9691b312bc67cac95eb4Justin Holewinski case PTX_COMPUTE_1_0: return "compute_10"; 5335f4fb34ff60b8f23b2c9691b312bc67cac95eb4Justin Holewinski case PTX_COMPUTE_1_1: return "compute_11"; 5435f4fb34ff60b8f23b2c9691b312bc67cac95eb4Justin Holewinski case PTX_COMPUTE_1_2: return "compute_12"; 5535f4fb34ff60b8f23b2c9691b312bc67cac95eb4Justin Holewinski case PTX_COMPUTE_1_3: return "compute_13"; 5635f4fb34ff60b8f23b2c9691b312bc67cac95eb4Justin Holewinski case PTX_COMPUTE_2_0: return "compute_20"; 57fd8978b021dbb0b9b09084dcc707c2054ff76280Che-Liang Chiou } 58fd8978b021dbb0b9b09084dcc707c2054ff76280Che-Liang Chiou} 59fd8978b021dbb0b9b09084dcc707c2054ff76280Che-Liang Chiou 60fd8978b021dbb0b9b09084dcc707c2054ff76280Che-Liang Chioustd::string PTXSubtarget::getPTXVersionString() const { 61fd8978b021dbb0b9b09084dcc707c2054ff76280Che-Liang Chiou switch(PTXVersion) { 62fd8978b021dbb0b9b09084dcc707c2054ff76280Che-Liang Chiou case PTX_VERSION_2_0: return "2.0"; 63fd8978b021dbb0b9b09084dcc707c2054ff76280Che-Liang Chiou case PTX_VERSION_2_1: return "2.1"; 64625eec10fef5449f709ecd7a4e348aa94b29aef8Justin Holewinski case PTX_VERSION_2_2: return "2.2"; 65ab0145d2a9fd8500ceb6644dae0b73c9147671abJustin Holewinski case PTX_VERSION_2_3: return "2.3"; 66fd8978b021dbb0b9b09084dcc707c2054ff76280Che-Liang Chiou } 67e4ad58272970ecd850d233862f40a72d15649639Benjamin Kramer llvm_unreachable("Invalid PTX version"); 6850880d08ec32857fa557281046c81a0506e7f64dEric Christopher} 69