[llvm-uc] [PATCH] uc32: Add SubTarget stub

  • From: Jia Liu <proljc@xxxxxxxxx>
  • To: llvm-uc@xxxxxxxxxxxxx
  • Date: Mon, 26 Nov 2012 21:08:22 -0800

Signed-off-by: Jia Liu <proljc@xxxxxxxxx>
---
 .../UniCore/MCTargetDesc/UniCoreMCTargetDesc.cpp   |   15 ++++++
 .../UniCore/MCTargetDesc/UniCoreMCTargetDesc.h     |    3 ++
 lib/Target/UniCore/Makefile                        |    3 +-
 lib/Target/UniCore/UniCore.td                      |    5 ++
 lib/Target/UniCore/UniCoreSubtarget.cpp            |   37 +++++++++++++
 lib/Target/UniCore/UniCoreSubtarget.h              |   56 ++++++++++++++++++++
 6 files changed, 118 insertions(+), 1 deletion(-)
 create mode 100644 lib/Target/UniCore/UniCoreSubtarget.cpp
 create mode 100644 lib/Target/UniCore/UniCoreSubtarget.h

diff --git a/lib/Target/UniCore/MCTargetDesc/UniCoreMCTargetDesc.cpp 
b/lib/Target/UniCore/MCTargetDesc/UniCoreMCTargetDesc.cpp
index 0e14154..86750e4 100644
--- a/lib/Target/UniCore/MCTargetDesc/UniCoreMCTargetDesc.cpp
+++ b/lib/Target/UniCore/MCTargetDesc/UniCoreMCTargetDesc.cpp
@@ -15,11 +15,15 @@
 #include "llvm/MC/MCCodeGenInfo.h"
 #include "llvm/MC/MCInstrInfo.h"
 #include "llvm/MC/MCRegisterInfo.h"
+#include "llvm/MC/MCSubtargetInfo.h"
 #include "llvm/Support/TargetRegistry.h"
 
 #define GET_INSTRINFO_MC_DESC
 #include "UniCoreGenInstrInfo.inc"
 
+#define GET_SUBTARGETINFO_MC_DESC
+#include "UniCoreGenSubtargetInfo.inc"
+
 #define GET_REGINFO_MC_DESC
 #include "UniCoreGenRegisterInfo.inc"
 
@@ -37,6 +41,13 @@ static MCRegisterInfo *createUniCoreMCRegisterInfo(StringRef 
TT) {
   return X;
 }
 
+static MCSubtargetInfo *createUniCoreMCSubtargetInfo(StringRef TT, StringRef 
CPU,
+                                                      StringRef FS) {
+  MCSubtargetInfo *X = new MCSubtargetInfo();
+  InitUniCoreMCSubtargetInfo(X, TT, CPU, FS);
+  return X;
+}
+
 extern "C" void LLVMInitializeUniCoreTargetMC() {
   // Register the MC instruction info.
   TargetRegistry::RegisterMCInstrInfo(TheUniCoreTarget, 
createUniCoreMCInstrInfo);
@@ -44,4 +55,8 @@ extern "C" void LLVMInitializeUniCoreTargetMC() {
   // Register the MC register info.
   TargetRegistry::RegisterMCRegInfo(TheUniCoreTarget,
                                     createUniCoreMCRegisterInfo);
+
+  // Register the MC subtarget info.
+  TargetRegistry::RegisterMCSubtargetInfo(TheUniCoreTarget,
+                                          createUniCoreMCSubtargetInfo);
 }
diff --git a/lib/Target/UniCore/MCTargetDesc/UniCoreMCTargetDesc.h 
b/lib/Target/UniCore/MCTargetDesc/UniCoreMCTargetDesc.h
index a57dcbd..2c03fe0 100644
--- a/lib/Target/UniCore/MCTargetDesc/UniCoreMCTargetDesc.h
+++ b/lib/Target/UniCore/MCTargetDesc/UniCoreMCTargetDesc.h
@@ -31,4 +31,7 @@ extern Target TheUniCoreTarget;
 #define GET_INSTRINFO_ENUM
 #include "UniCoreGenInstrInfo.inc"
 
+#define GET_SUBTARGETINFO_ENUM
+#include "UniCoreGenSubtargetInfo.inc"
+
 #endif
diff --git a/lib/Target/UniCore/Makefile b/lib/Target/UniCore/Makefile
index a0e4e1d..388da94 100644
--- a/lib/Target/UniCore/Makefile
+++ b/lib/Target/UniCore/Makefile
@@ -12,7 +12,8 @@ TARGET = UniCore
 
 # Make sure that tblgen is run, first thing.
 BUILT_SOURCES = UniCoreGenRegisterInfo.inc \
-                UniCoreGenInstrInfo.inc
+                UniCoreGenInstrInfo.inc \
+                UniCoreGenSubtargetInfo.inc
 
 DIRS = TargetInfo MCTargetDesc
 
diff --git a/lib/Target/UniCore/UniCore.td b/lib/Target/UniCore/UniCore.td
index 1b919bc..592de5d 100644
--- a/lib/Target/UniCore/UniCore.td
+++ b/lib/Target/UniCore/UniCore.td
@@ -24,6 +24,11 @@ include "UniCoreInstrInfo.td"
 include "UniCoreSchedule.td"
 
 
//===----------------------------------------------------------------------===//
+// UniCore Subtarget features                                              //
+//===----------------------------------------------------------------------===//
+
+
+//===----------------------------------------------------------------------===//
 // UniCore processors supported.
 
//===----------------------------------------------------------------------===//
 class Proc<string Name, list<SubtargetFeature> Features>
diff --git a/lib/Target/UniCore/UniCoreSubtarget.cpp 
b/lib/Target/UniCore/UniCoreSubtarget.cpp
new file mode 100644
index 0000000..0c3de85
--- /dev/null
+++ b/lib/Target/UniCore/UniCoreSubtarget.cpp
@@ -0,0 +1,37 @@
+//===-- UniCoreSubtarget.cpp - UniCore Subtarget Information 
--------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements the UniCore specific subclass of TargetSubtargetInfo.
+//
+//===----------------------------------------------------------------------===//
+
+#include "UniCoreSubtarget.h"
+#include "UniCore.h"
+#include "llvm/Support/TargetRegistry.h"
+
+#define GET_SUBTARGETINFO_TARGET_DESC
+#define GET_SUBTARGETINFO_CTOR
+#include "UniCoreGenSubtargetInfo.inc"
+
+using namespace llvm;
+
+void UniCoreSubtarget::anchor() { }
+
+UniCoreSubtarget::UniCoreSubtarget(const std::string &TT,
+                                   const std::string &CPU,
+                                   const std::string &FS) :
+  UniCoreGenSubtargetInfo(TT, CPU, FS) {
+  std::string CPUName = "unicore32";
+
+  // Parse features string.
+  ParseSubtargetFeatures(CPUName, FS);
+
+  UniCoreABI = O32;
+  UniCoreArchVersion = UniCore32;  
+}
diff --git a/lib/Target/UniCore/UniCoreSubtarget.h 
b/lib/Target/UniCore/UniCoreSubtarget.h
new file mode 100644
index 0000000..722ded2
--- /dev/null
+++ b/lib/Target/UniCore/UniCoreSubtarget.h
@@ -0,0 +1,56 @@
+//===-- UniCoreSubtarget.h - Define Subtarget for the UniCore --*- C++ 
-*--===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file declares the UniCore specific subclass of TargetSubtargetInfo.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TARGET_UniCore_SUBTARGET_H
+#define LLVM_TARGET_UniCore_SUBTARGET_H
+
+#include "llvm/Target/TargetSubtargetInfo.h"
+#include <string>
+
+#define GET_SUBTARGETINFO_HEADER
+#include "UniCoreGenSubtargetInfo.inc"
+
+namespace llvm {
+class StringRef;
+
+class UniCoreSubtarget : public UniCoreGenSubtargetInfo {
+  virtual void anchor();
+
+public:
+  enum UniCoreABIEnum {
+    UnknownABI, O32
+  };
+
+  enum UniCoreArchEnum {
+    UniCore32
+  };
+
+  // UniCore architecture version
+  UniCoreArchEnum UniCoreArchVersion;
+
+  // UniCore supported ABIs
+  UniCoreABIEnum UniCoreABI;
+
+  /// This constructor initializes the data members to match that
+  /// of the specified triple.
+  ///
+  UniCoreSubtarget(const std::string &TT, const std::string &CPU,
+                   const std::string &FS);
+
+  /// ParseSubtargetFeatures - Parses features string setting specified
+  /// subtarget options.  Definition of function is auto generated by tblgen.
+  void ParseSubtargetFeatures(StringRef CPU, StringRef FS);
+};
+} // End llvm namespace
+
+#endif  // LLVM_TARGET_UniCore_SUBTARGET_H
-- 
1.7.10.2 (Apple Git-33)


Other related posts:

  • » [llvm-uc] [PATCH] uc32: Add SubTarget stub - Jia Liu