Add trivial subtarget support
authorChris Lattner <sabre@nondot.org>
Thu, 26 Jan 2006 06:51:21 +0000 (06:51 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 26 Jan 2006 06:51:21 +0000 (06:51 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25641 91177308-0d34-0410-b5e6-96231b3b80d8

12 files changed:
lib/Target/Sparc/Makefile
lib/Target/Sparc/Sparc.td
lib/Target/Sparc/SparcSubtarget.cpp [new file with mode: 0644]
lib/Target/Sparc/SparcSubtarget.h [new file with mode: 0644]
lib/Target/Sparc/SparcTargetMachine.cpp
lib/Target/Sparc/SparcTargetMachine.h
lib/Target/SparcV8/Makefile
lib/Target/SparcV8/SparcV8.td
lib/Target/SparcV8/SparcV8Subtarget.cpp [new file with mode: 0644]
lib/Target/SparcV8/SparcV8Subtarget.h [new file with mode: 0644]
lib/Target/SparcV8/SparcV8TargetMachine.cpp
lib/Target/SparcV8/SparcV8TargetMachine.h

index 497d1a52f2681ed6a334f3c90c43ad96b3471d98..7d61984048e69d4839a60d4a9d4a79505b180b91 100644 (file)
@@ -14,7 +14,7 @@ TARGET = SparcV8
 BUILT_SOURCES = SparcV8GenRegisterInfo.h.inc SparcV8GenRegisterNames.inc \
                 SparcV8GenRegisterInfo.inc SparcV8GenInstrNames.inc \
                 SparcV8GenInstrInfo.inc SparcV8GenAsmWriter.inc \
-                SparcV8GenDAGISel.inc
+                SparcV8GenDAGISel.inc SparcV8GenSubtarget.inc
 
 include $(LEVEL)/Makefile.common
 
index dabb0dc976063648face724970e716199f18aea9..cd06886e1b71f128279146bdc336d20f6b8ba1f1 100644 (file)
 
 include "../Target.td"
 
+//===----------------------------------------------------------------------===//
+// PowerPC Subtarget features.
+//
+def Feature64Bit     : SubtargetFeature<"64bit", "bool", "Is64Bit",
+                                        "Enable 64-bit instructions">;
+
+
 //===----------------------------------------------------------------------===//
 // Register File Description
 //===----------------------------------------------------------------------===//
@@ -36,6 +44,14 @@ def SparcV8InstrInfo : InstrInfo {
   let TSFlagsShifts = [];
 }
 
+//===----------------------------------------------------------------------===//
+// SPARC processors supported.
+//===----------------------------------------------------------------------===//
+
+def : Processor<"generic", NoItineraries, []>;
+def : Processor<"v8", NoItineraries, []>;
+def : Processor<"v9", NoItineraries, [Feature64Bit]>;
+
 //===----------------------------------------------------------------------===//
 // Declare the target which we are implementing
 //===----------------------------------------------------------------------===//
diff --git a/lib/Target/Sparc/SparcSubtarget.cpp b/lib/Target/Sparc/SparcSubtarget.cpp
new file mode 100644 (file)
index 0000000..53a7b5b
--- /dev/null
@@ -0,0 +1,27 @@
+//===- SparcV8Subtarget.cpp - SPARC Subtarget Information -----------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file was developed by Chris Lattner and is distributed under the
+// University of Illinois Open Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements the SPARC specific subclass of TargetSubtarget.
+//
+//===----------------------------------------------------------------------===//
+
+#include "SparcV8Subtarget.h"
+#include "SparcV8GenSubtarget.inc"
+using namespace llvm;
+
+SparcV8Subtarget::SparcV8Subtarget(const Module &M, const std::string &FS) {
+  // Determine default and user specified characteristics
+  std::string CPU = "generic";
+
+  // FIXME: autodetect host here!
+  
+  // Parse features string.
+  ParseSubtargetFeatures(FS, CPU);
+
+};
\ No newline at end of file
diff --git a/lib/Target/Sparc/SparcSubtarget.h b/lib/Target/Sparc/SparcSubtarget.h
new file mode 100644 (file)
index 0000000..682c99b
--- /dev/null
@@ -0,0 +1,38 @@
+//=====-- SparcV8Subtarget.h - Define Subtarget for the SPARC -*- C++ -*--====//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file was developed by Chris Lattner and is distributed under the
+// University of Illinois Open Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file declares the SPARC specific subclass of TargetSubtarget.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef SPARC_SUBTARGET_H
+#define SPARC_SUBTARGET_H
+
+#include "llvm/Target/TargetSubtarget.h"
+#include <string>
+
+namespace llvm {
+  class Module;
+  
+class SparcV8Subtarget : public TargetSubtarget {
+  bool Is64Bit;
+public:
+  SparcV8Subtarget(const Module &M, const std::string &FS);
+
+  bool is64Bit() const { return Is64Bit; }
+  
+  /// ParseSubtargetFeatures - Parses features string setting specified 
+  /// subtarget options.  Definition of function is auto generated by tblgen.
+  void ParseSubtargetFeatures(const std::string &FS, const std::string &CPU);
+  
+};
+
+} // end namespace llvm
+
+#endif
index 83cd308327a5fb42432758e0ad8d1821d3382875..88f88f4acdee8f49a758fd14a4cefafc4f7a2cbc 100644 (file)
@@ -35,6 +35,7 @@ SparcV8TargetMachine::SparcV8TargetMachine(const Module &M,
                                            IntrinsicLowering *IL,
                                            const std::string &FS)
   : TargetMachine("SparcV8", IL, false, 4, 4),
+    Subtarget(M, FS),
     FrameInfo(TargetFrameInfo::StackGrowsDown, 8, 0) {
 }
 
index 1f3096be2f6bcd0d370612bfc1cb695f899908b1..09777442b5ac9bab9fd3cd5163d9252eadef6f0c 100644 (file)
@@ -18,6 +18,7 @@
 #include "llvm/Target/TargetFrameInfo.h"
 #include "llvm/PassManager.h"
 #include "SparcV8InstrInfo.h"
+#include "SparcV8Subtarget.h"
 
 namespace llvm {
 
@@ -25,6 +26,7 @@ class IntrinsicLowering;
 class Module;
 
 class SparcV8TargetMachine : public TargetMachine {
+  SparcV8Subtarget Subtarget;
   SparcV8InstrInfo InstrInfo;
   TargetFrameInfo FrameInfo;
 public:
@@ -33,6 +35,7 @@ public:
 
   virtual const SparcV8InstrInfo *getInstrInfo() const { return &InstrInfo; }
   virtual const TargetFrameInfo  *getFrameInfo() const { return &FrameInfo; }
+  virtual const TargetSubtarget  *getSubtargetImpl() const{ return &Subtarget; }
   virtual const MRegisterInfo *getRegisterInfo() const {
     return &InstrInfo.getRegisterInfo();
   }
index 497d1a52f2681ed6a334f3c90c43ad96b3471d98..7d61984048e69d4839a60d4a9d4a79505b180b91 100644 (file)
@@ -14,7 +14,7 @@ TARGET = SparcV8
 BUILT_SOURCES = SparcV8GenRegisterInfo.h.inc SparcV8GenRegisterNames.inc \
                 SparcV8GenRegisterInfo.inc SparcV8GenInstrNames.inc \
                 SparcV8GenInstrInfo.inc SparcV8GenAsmWriter.inc \
-                SparcV8GenDAGISel.inc
+                SparcV8GenDAGISel.inc SparcV8GenSubtarget.inc
 
 include $(LEVEL)/Makefile.common
 
index dabb0dc976063648face724970e716199f18aea9..cd06886e1b71f128279146bdc336d20f6b8ba1f1 100644 (file)
 
 include "../Target.td"
 
+//===----------------------------------------------------------------------===//
+// PowerPC Subtarget features.
+//
+def Feature64Bit     : SubtargetFeature<"64bit", "bool", "Is64Bit",
+                                        "Enable 64-bit instructions">;
+
+
 //===----------------------------------------------------------------------===//
 // Register File Description
 //===----------------------------------------------------------------------===//
@@ -36,6 +44,14 @@ def SparcV8InstrInfo : InstrInfo {
   let TSFlagsShifts = [];
 }
 
+//===----------------------------------------------------------------------===//
+// SPARC processors supported.
+//===----------------------------------------------------------------------===//
+
+def : Processor<"generic", NoItineraries, []>;
+def : Processor<"v8", NoItineraries, []>;
+def : Processor<"v9", NoItineraries, [Feature64Bit]>;
+
 //===----------------------------------------------------------------------===//
 // Declare the target which we are implementing
 //===----------------------------------------------------------------------===//
diff --git a/lib/Target/SparcV8/SparcV8Subtarget.cpp b/lib/Target/SparcV8/SparcV8Subtarget.cpp
new file mode 100644 (file)
index 0000000..53a7b5b
--- /dev/null
@@ -0,0 +1,27 @@
+//===- SparcV8Subtarget.cpp - SPARC Subtarget Information -----------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file was developed by Chris Lattner and is distributed under the
+// University of Illinois Open Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements the SPARC specific subclass of TargetSubtarget.
+//
+//===----------------------------------------------------------------------===//
+
+#include "SparcV8Subtarget.h"
+#include "SparcV8GenSubtarget.inc"
+using namespace llvm;
+
+SparcV8Subtarget::SparcV8Subtarget(const Module &M, const std::string &FS) {
+  // Determine default and user specified characteristics
+  std::string CPU = "generic";
+
+  // FIXME: autodetect host here!
+  
+  // Parse features string.
+  ParseSubtargetFeatures(FS, CPU);
+
+};
\ No newline at end of file
diff --git a/lib/Target/SparcV8/SparcV8Subtarget.h b/lib/Target/SparcV8/SparcV8Subtarget.h
new file mode 100644 (file)
index 0000000..682c99b
--- /dev/null
@@ -0,0 +1,38 @@
+//=====-- SparcV8Subtarget.h - Define Subtarget for the SPARC -*- C++ -*--====//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file was developed by Chris Lattner and is distributed under the
+// University of Illinois Open Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file declares the SPARC specific subclass of TargetSubtarget.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef SPARC_SUBTARGET_H
+#define SPARC_SUBTARGET_H
+
+#include "llvm/Target/TargetSubtarget.h"
+#include <string>
+
+namespace llvm {
+  class Module;
+  
+class SparcV8Subtarget : public TargetSubtarget {
+  bool Is64Bit;
+public:
+  SparcV8Subtarget(const Module &M, const std::string &FS);
+
+  bool is64Bit() const { return Is64Bit; }
+  
+  /// ParseSubtargetFeatures - Parses features string setting specified 
+  /// subtarget options.  Definition of function is auto generated by tblgen.
+  void ParseSubtargetFeatures(const std::string &FS, const std::string &CPU);
+  
+};
+
+} // end namespace llvm
+
+#endif
index 83cd308327a5fb42432758e0ad8d1821d3382875..88f88f4acdee8f49a758fd14a4cefafc4f7a2cbc 100644 (file)
@@ -35,6 +35,7 @@ SparcV8TargetMachine::SparcV8TargetMachine(const Module &M,
                                            IntrinsicLowering *IL,
                                            const std::string &FS)
   : TargetMachine("SparcV8", IL, false, 4, 4),
+    Subtarget(M, FS),
     FrameInfo(TargetFrameInfo::StackGrowsDown, 8, 0) {
 }
 
index 1f3096be2f6bcd0d370612bfc1cb695f899908b1..09777442b5ac9bab9fd3cd5163d9252eadef6f0c 100644 (file)
@@ -18,6 +18,7 @@
 #include "llvm/Target/TargetFrameInfo.h"
 #include "llvm/PassManager.h"
 #include "SparcV8InstrInfo.h"
+#include "SparcV8Subtarget.h"
 
 namespace llvm {
 
@@ -25,6 +26,7 @@ class IntrinsicLowering;
 class Module;
 
 class SparcV8TargetMachine : public TargetMachine {
+  SparcV8Subtarget Subtarget;
   SparcV8InstrInfo InstrInfo;
   TargetFrameInfo FrameInfo;
 public:
@@ -33,6 +35,7 @@ public:
 
   virtual const SparcV8InstrInfo *getInstrInfo() const { return &InstrInfo; }
   virtual const TargetFrameInfo  *getFrameInfo() const { return &FrameInfo; }
+  virtual const TargetSubtarget  *getSubtargetImpl() const{ return &Subtarget; }
   virtual const MRegisterInfo *getRegisterInfo() const {
     return &InstrInfo.getRegisterInfo();
   }