[llvm-commits] CVS: llvm/include/llvm/Target/TargetMachineRegistry.h
Chris Lattner
lattner at cs.uiuc.edu
Sat Jul 10 21:45:01 PDT 2004
Changes in directory llvm/include/llvm/Target:
TargetMachineRegistry.h added (r1.1)
---
Log message:
First cut at TargetMachineRegistry and RegisterTarget classes
---
Diffs of the changes: (+76 -0)
Index: llvm/include/llvm/Target/TargetMachineRegistry.h
diff -c /dev/null llvm/include/llvm/Target/TargetMachineRegistry.h:1.1
*** /dev/null Sat Jul 10 21:43:54 2004
--- llvm/include/llvm/Target/TargetMachineRegistry.h Sat Jul 10 21:43:43 2004
***************
*** 0 ****
--- 1,76 ----
+ //===-- Target/TargetMachineRegistry.h - Target Registration ----*- C++ -*-===//
+ //
+ // The LLVM Compiler Infrastructure
+ //
+ // This file was developed by the LLVM research group and is distributed under
+ // the University of Illinois Open Source License. See LICENSE.TXT for details.
+ //
+ //===----------------------------------------------------------------------===//
+ //
+ // This file exposes two classes: the TargetMachineRegistry class, which allows
+ // tools to inspect all of registered targets, and the RegisterTarget class,
+ // which TargetMachine implementations should use to register themselves with
+ // the system.
+ //
+ //===----------------------------------------------------------------------===//
+
+ #ifndef LLVM_TARGET_TARGETMACHINEREGISTRY_H
+ #define LLVM_TARGET_TARGETMACHINEREGISTRY_H
+
+ namespace llvm {
+ class Module;
+ class TargetMachine;
+ class IntrinsicLowering;
+
+ struct TargetMachineRegistry {
+ /// Entry - One instance of this struct is created for each target that is
+ /// registered.
+ struct Entry {
+ const char *Name;
+ const char *ShortDesc;
+ TargetMachine *(*CtorFn)(const Module &, IntrinsicLowering*);
+ unsigned (*ModuleMatchQualityFn)(const Module &M);
+ unsigned (*JITMatchQualityFn)();
+
+ const Entry *getNext() const { return Next; }
+
+ protected:
+ Entry(const char *N, const char *SD,
+ TargetMachine *(*CF)(const Module &, IntrinsicLowering*),
+ unsigned (*MMF)(const Module &M), unsigned (*JMF)())
+ : Name(N), ShortDesc(SD), CtorFn(CF), ModuleMatchQualityFn(MMF),
+ JITMatchQualityFn(JMF), Next(List) {
+ List = this;
+ }
+ private:
+ const Entry *Next; // Next entry in the linked list.
+ };
+
+ /// TargetMachineRegistry::getList - This static method returns the list of
+ /// target machines that are registered with the system.
+ static const Entry *getList() { return List; }
+
+ private:
+ static const Entry *List;
+ };
+
+ //===--------------------------------------------------------------------===//
+ /// RegisterTarget - This class is used to make targets automatically register
+ /// themselves with the tool they are linked. Targets should define an
+ /// instance of this and implement the static methods described in the
+ /// TargetMachine comments..
+ template<class TargetMachineImpl>
+ struct RegisterTarget : public TargetMachineRegistry::Entry {
+ RegisterTarget(const char *Name, const char *ShortDesc) :
+ TargetMachineRegistry::Entry(Name, ShortDesc, &Allocator,
+ &TargetMachineImpl::getModuleMatchQuality,
+ &TargetMachineImpl::getJITMatchQuality) {
+ }
+ private:
+ static TargetMachine *Allocator(const Module &M, IntrinsicLowering *IL) {
+ return new TargetMachineImpl(M, IL);
+ }
+ };
+ }
+
+ #endif
More information about the llvm-commits
mailing list