[llvm-commits] [llvm] r167699 - in /llvm/trunk: lib/Target/NVPTX/ test/CodeGen/NVPTX/

Justin Holewinski jholewinski at nvidia.com
Sun Nov 11 19:16:43 PST 2012


Author: jholewinski
Date: Sun Nov 11 21:16:43 2012
New Revision: 167699

URL: http://llvm.org/viewvc/llvm-project?rev=167699&view=rev
Log:
[NVPTX] Add more precise PTX/SM target attributes

Each SM and PTX version is modeled as a subtarget feature/CPU. Additionally,
PTX 3.1 is added as the default PTX version to be out-of-the-box compatible
with CUDA 5.0.

Available CPUs for this target:

  sm_10 - Select the sm_10 processor.
  sm_11 - Select the sm_11 processor.
  sm_12 - Select the sm_12 processor.
  sm_13 - Select the sm_13 processor.
  sm_20 - Select the sm_20 processor.
  sm_21 - Select the sm_21 processor.
  sm_30 - Select the sm_30 processor.
  sm_35 - Select the sm_35 processor.

Available features for this target:

  ptx30 - Use PTX version 3.0.
  ptx31 - Use PTX version 3.1.
  sm_10 - Target SM 1.0.
  sm_11 - Target SM 1.1.
  sm_12 - Target SM 1.2.
  sm_13 - Target SM 1.3.
  sm_20 - Target SM 2.0.
  sm_21 - Target SM 2.1.
  sm_30 - Target SM 3.0.
  sm_35 - Target SM 3.5.

Added:
    llvm/trunk/test/CodeGen/NVPTX/ptx-version-30.ll
    llvm/trunk/test/CodeGen/NVPTX/ptx-version-31.ll
    llvm/trunk/test/CodeGen/NVPTX/sm-version-10.ll
    llvm/trunk/test/CodeGen/NVPTX/sm-version-11.ll
    llvm/trunk/test/CodeGen/NVPTX/sm-version-12.ll
    llvm/trunk/test/CodeGen/NVPTX/sm-version-13.ll
    llvm/trunk/test/CodeGen/NVPTX/sm-version-20.ll
    llvm/trunk/test/CodeGen/NVPTX/sm-version-21.ll
    llvm/trunk/test/CodeGen/NVPTX/sm-version-30.ll
    llvm/trunk/test/CodeGen/NVPTX/sm-version-35.ll
Modified:
    llvm/trunk/lib/Target/NVPTX/NVPTX.td
    llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
    llvm/trunk/lib/Target/NVPTX/NVPTXSubtarget.cpp
    llvm/trunk/lib/Target/NVPTX/NVPTXSubtarget.h

Modified: llvm/trunk/lib/Target/NVPTX/NVPTX.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTX.td?rev=167699&r1=167698&r2=167699&view=diff
==============================================================================
--- llvm/trunk/lib/Target/NVPTX/NVPTX.td (original)
+++ llvm/trunk/lib/Target/NVPTX/NVPTX.td Sun Nov 11 21:16:43 2012
@@ -24,7 +24,30 @@
 // - Need at least one feature to avoid generating zero sized array by
 //   TableGen in NVPTXGenSubtarget.inc.
 //===----------------------------------------------------------------------===//
-def FeatureDummy  : SubtargetFeature<"dummy", "dummy", "true", "">;
+
+// SM Versions
+def SM10 : SubtargetFeature<"sm_10", "SmVersion", "10",
+                            "Target SM 1.0">;
+def SM11 : SubtargetFeature<"sm_11", "SmVersion", "11",
+                            "Target SM 1.1">;
+def SM12 : SubtargetFeature<"sm_12", "SmVersion", "12",
+                            "Target SM 1.2">;
+def SM13 : SubtargetFeature<"sm_13", "SmVersion", "13",
+                            "Target SM 1.3">;
+def SM20 : SubtargetFeature<"sm_20", "SmVersion", "20",
+                            "Target SM 2.0">;
+def SM21 : SubtargetFeature<"sm_21", "SmVersion", "21",
+                            "Target SM 2.1">;
+def SM30 : SubtargetFeature<"sm_30", "SmVersion", "30",
+                            "Target SM 3.0">;
+def SM35 : SubtargetFeature<"sm_35", "SmVersion", "35",
+                            "Target SM 3.5">;
+
+// PTX Versions
+def PTX30 : SubtargetFeature<"ptx30", "PTXVersion", "30",
+                             "Use PTX version 3.0">;
+def PTX31 : SubtargetFeature<"ptx31", "PTXVersion", "31",
+                             "Use PTX version 3.1">;
 
 //===----------------------------------------------------------------------===//
 // NVPTX supported processors.
@@ -33,7 +56,14 @@
 class Proc<string Name, list<SubtargetFeature> Features>
  : Processor<Name, NoItineraries, Features>;
 
-def : Proc<"sm_10", [FeatureDummy]>;
+def : Proc<"sm_10", [SM10]>;
+def : Proc<"sm_11", [SM11]>;
+def : Proc<"sm_12", [SM12]>;
+def : Proc<"sm_13", [SM13]>;
+def : Proc<"sm_20", [SM20]>;
+def : Proc<"sm_21", [SM21]>;
+def : Proc<"sm_30", [SM30]>;
+def : Proc<"sm_35", [SM35]>;
 
 
 def NVPTXInstrInfo : InstrInfo {

Modified: llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.cpp?rev=167699&r1=167698&r2=167699&view=diff
==============================================================================
--- llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.cpp Sun Nov 11 21:16:43 2012
@@ -910,7 +910,8 @@
   O << "//\n";
   O << "\n";
 
-  O << ".version 3.0\n";
+  unsigned PTXVersion = nvptxSubtarget.getPTXVersion();
+  O << ".version " << (PTXVersion / 10) << "." << (PTXVersion % 10) << "\n";
 
   O << ".target ";
   O << nvptxSubtarget.getTargetName();

Modified: llvm/trunk/lib/Target/NVPTX/NVPTXSubtarget.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXSubtarget.cpp?rev=167699&r1=167698&r2=167699&view=diff
==============================================================================
--- llvm/trunk/lib/Target/NVPTX/NVPTXSubtarget.cpp (original)
+++ llvm/trunk/lib/Target/NVPTX/NVPTXSubtarget.cpp Sun Nov 11 21:16:43 2012
@@ -34,16 +34,18 @@
 
 NVPTXSubtarget::NVPTXSubtarget(const std::string &TT, const std::string &CPU,
                                const std::string &FS, bool is64Bit)
-:NVPTXGenSubtargetInfo(TT, "", FS), // Don't pass CPU to subtarget,
- // because we don't register all
- // nvptx targets.
- Is64Bit(is64Bit) {
+: NVPTXGenSubtargetInfo(TT, CPU, FS),
+  Is64Bit(is64Bit),
+  PTXVersion(0),
+  SmVersion(10) {
 
   drvInterface = DriverInterface;
 
   // Provide the default CPU if none
   std::string defCPU = "sm_10";
 
+  ParseSubtargetFeatures((CPU.empty() ? defCPU : CPU), FS);
+
   // Get the TargetName from the FS if available
   if (FS.empty() && CPU.empty())
     TargetName = defCPU;
@@ -52,6 +54,12 @@
   else
     llvm_unreachable("we are not using FeatureStr");
 
-  // Set up the SmVersion
-  SmVersion = atoi(TargetName.c_str()+3);
+  // We default to PTX 3.1, but we cannot just default to it in the initializer
+  // since the attribute parser checks if the given option is >= the default.
+  // So if we set ptx31 as the default, the ptx30 attribute would never match.
+  // Instead, we use 0 as the default and manually set 31 if the default is
+  // used.
+  if (PTXVersion == 0) {
+    PTXVersion = 31;
+  }
 }

Modified: llvm/trunk/lib/Target/NVPTX/NVPTXSubtarget.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXSubtarget.h?rev=167699&r1=167698&r2=167699&view=diff
==============================================================================
--- llvm/trunk/lib/Target/NVPTX/NVPTXSubtarget.h (original)
+++ llvm/trunk/lib/Target/NVPTX/NVPTXSubtarget.h Sun Nov 11 21:16:43 2012
@@ -25,13 +25,18 @@
 namespace llvm {
 
 class NVPTXSubtarget : public NVPTXGenSubtargetInfo {
-
-  unsigned int SmVersion;
+  
   std::string TargetName;
   NVPTX::DrvInterface drvInterface;
   bool dummy; // For the 'dummy' feature, see NVPTX.td
   bool Is64Bit;
 
+  // PTX version x.y is represented as 10*x+y, e.g. 3.1 == 31
+  unsigned PTXVersion;
+
+  // SM version x.y is represented as 10*x+y, e.g. 3.1 == 31
+  unsigned int SmVersion;
+
 public:
   /// This constructor initializes the data members to match that
   /// of the specified module.
@@ -69,6 +74,8 @@
   NVPTX::DrvInterface getDrvInterface() const { return drvInterface; }
   std::string getTargetName() const { return TargetName; }
 
+  unsigned getPTXVersion() const { return PTXVersion; }
+
   void ParseSubtargetFeatures(StringRef CPU, StringRef FS);
 
   std::string getDataLayout() const {

Added: llvm/trunk/test/CodeGen/NVPTX/ptx-version-30.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/NVPTX/ptx-version-30.ll?rev=167699&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/NVPTX/ptx-version-30.ll (added)
+++ llvm/trunk/test/CodeGen/NVPTX/ptx-version-30.ll Sun Nov 11 21:16:43 2012
@@ -0,0 +1,6 @@
+; RUN: llc < %s -march=nvptx -mcpu=sm_20 -mattr=ptx30 | FileCheck %s
+; RUN: llc < %s -march=nvptx64 -mcpu=sm_20 -mattr=ptx30 | FileCheck %s
+
+
+; CHECK: .version 3.0
+

Added: llvm/trunk/test/CodeGen/NVPTX/ptx-version-31.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/NVPTX/ptx-version-31.ll?rev=167699&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/NVPTX/ptx-version-31.ll (added)
+++ llvm/trunk/test/CodeGen/NVPTX/ptx-version-31.ll Sun Nov 11 21:16:43 2012
@@ -0,0 +1,6 @@
+; RUN: llc < %s -march=nvptx -mcpu=sm_20 -mattr=ptx31 | FileCheck %s
+; RUN: llc < %s -march=nvptx64 -mcpu=sm_20 -mattr=ptx31 | FileCheck %s
+
+
+; CHECK: .version 3.1
+

Added: llvm/trunk/test/CodeGen/NVPTX/sm-version-10.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/NVPTX/sm-version-10.ll?rev=167699&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/NVPTX/sm-version-10.ll (added)
+++ llvm/trunk/test/CodeGen/NVPTX/sm-version-10.ll Sun Nov 11 21:16:43 2012
@@ -0,0 +1,6 @@
+; RUN: llc < %s -march=nvptx -mcpu=sm_10 | FileCheck %s
+; RUN: llc < %s -march=nvptx64 -mcpu=sm_10 | FileCheck %s
+
+
+; CHECK: .target sm_10
+

Added: llvm/trunk/test/CodeGen/NVPTX/sm-version-11.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/NVPTX/sm-version-11.ll?rev=167699&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/NVPTX/sm-version-11.ll (added)
+++ llvm/trunk/test/CodeGen/NVPTX/sm-version-11.ll Sun Nov 11 21:16:43 2012
@@ -0,0 +1,6 @@
+; RUN: llc < %s -march=nvptx -mcpu=sm_11 | FileCheck %s
+; RUN: llc < %s -march=nvptx64 -mcpu=sm_11 | FileCheck %s
+
+
+; CHECK: .target sm_11
+

Added: llvm/trunk/test/CodeGen/NVPTX/sm-version-12.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/NVPTX/sm-version-12.ll?rev=167699&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/NVPTX/sm-version-12.ll (added)
+++ llvm/trunk/test/CodeGen/NVPTX/sm-version-12.ll Sun Nov 11 21:16:43 2012
@@ -0,0 +1,6 @@
+; RUN: llc < %s -march=nvptx -mcpu=sm_12 | FileCheck %s
+; RUN: llc < %s -march=nvptx64 -mcpu=sm_12 | FileCheck %s
+
+
+; CHECK: .target sm_12
+

Added: llvm/trunk/test/CodeGen/NVPTX/sm-version-13.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/NVPTX/sm-version-13.ll?rev=167699&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/NVPTX/sm-version-13.ll (added)
+++ llvm/trunk/test/CodeGen/NVPTX/sm-version-13.ll Sun Nov 11 21:16:43 2012
@@ -0,0 +1,6 @@
+; RUN: llc < %s -march=nvptx -mcpu=sm_13 | FileCheck %s
+; RUN: llc < %s -march=nvptx64 -mcpu=sm_13 | FileCheck %s
+
+
+; CHECK: .target sm_13
+

Added: llvm/trunk/test/CodeGen/NVPTX/sm-version-20.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/NVPTX/sm-version-20.ll?rev=167699&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/NVPTX/sm-version-20.ll (added)
+++ llvm/trunk/test/CodeGen/NVPTX/sm-version-20.ll Sun Nov 11 21:16:43 2012
@@ -0,0 +1,6 @@
+; RUN: llc < %s -march=nvptx -mcpu=sm_20 | FileCheck %s
+; RUN: llc < %s -march=nvptx64 -mcpu=sm_20 | FileCheck %s
+
+
+; CHECK: .target sm_20
+

Added: llvm/trunk/test/CodeGen/NVPTX/sm-version-21.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/NVPTX/sm-version-21.ll?rev=167699&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/NVPTX/sm-version-21.ll (added)
+++ llvm/trunk/test/CodeGen/NVPTX/sm-version-21.ll Sun Nov 11 21:16:43 2012
@@ -0,0 +1,6 @@
+; RUN: llc < %s -march=nvptx -mcpu=sm_21 | FileCheck %s
+; RUN: llc < %s -march=nvptx64 -mcpu=sm_21 | FileCheck %s
+
+
+; CHECK: .target sm_21
+

Added: llvm/trunk/test/CodeGen/NVPTX/sm-version-30.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/NVPTX/sm-version-30.ll?rev=167699&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/NVPTX/sm-version-30.ll (added)
+++ llvm/trunk/test/CodeGen/NVPTX/sm-version-30.ll Sun Nov 11 21:16:43 2012
@@ -0,0 +1,6 @@
+; RUN: llc < %s -march=nvptx -mcpu=sm_30 | FileCheck %s
+; RUN: llc < %s -march=nvptx64 -mcpu=sm_30 | FileCheck %s
+
+
+; CHECK: .target sm_30
+

Added: llvm/trunk/test/CodeGen/NVPTX/sm-version-35.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/NVPTX/sm-version-35.ll?rev=167699&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/NVPTX/sm-version-35.ll (added)
+++ llvm/trunk/test/CodeGen/NVPTX/sm-version-35.ll Sun Nov 11 21:16:43 2012
@@ -0,0 +1,6 @@
+; RUN: llc < %s -march=nvptx -mcpu=sm_35 | FileCheck %s
+; RUN: llc < %s -march=nvptx64 -mcpu=sm_35 | FileCheck %s
+
+
+; CHECK: .target sm_35
+





More information about the llvm-commits mailing list