[llvm-commits] CVS: llvm/include/llvm/Target/TargetJITInfo.h TargetMachine.h
Chris Lattner
lattner at cs.uiuc.edu
Fri Dec 19 19:22:01 PST 2003
Changes in directory llvm/include/llvm/Target:
TargetJITInfo.h added (r1.1)
TargetMachine.h updated: 1.40 -> 1.41
---
Log message:
Rip JIT specific stuff out of TargetMachine, as per PR176
---
Diffs of the changes: (+62 -25)
Index: llvm/include/llvm/Target/TargetJITInfo.h
diff -c /dev/null llvm/include/llvm/Target/TargetJITInfo.h:1.1
*** /dev/null Fri Dec 19 19:21:48 2003
--- llvm/include/llvm/Target/TargetJITInfo.h Fri Dec 19 19:21:37 2003
***************
*** 0 ****
--- 1,54 ----
+ //===- Target/TargetJITInfo.h - Target Information for JIT ------*- 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 an abstract interface used by the Just-In-Time code
+ // generator to perform target-specific activities, such as emitting stubs. If
+ // a TargetMachine supports JIT code generation, it should provide one of these
+ // objects through the getJITInfo() method.
+ //
+ //===----------------------------------------------------------------------===//
+
+ #ifndef LLVM_TARGET_TARGETJITINFO_H
+ #define LLVM_TARGET_TARGETJITINFO_H
+
+ namespace llvm {
+ class Function;
+ class FunctionPassManager;
+ class MachineCodeEmitter;
+
+ /// TargetJITInfo - Target specific information required by the Just-In-Time
+ /// code generator.
+ struct TargetJITInfo {
+ virtual ~TargetJITInfo() {}
+
+ /// addPassesToJITCompile - Add passes to the specified pass manager to
+ /// implement a fast code generator for this target.
+ ///
+ virtual void addPassesToJITCompile(FunctionPassManager &PM) = 0;
+
+ /// replaceMachineCodeForFunction - Make it so that calling the function
+ /// whose machine code is at OLD turns into a call to NEW, perhaps by
+ /// overwriting OLD with a branch to NEW. This is used for self-modifying
+ /// code.
+ ///
+ virtual void replaceMachineCodeForFunction (void *Old, void *New) = 0;
+
+ /// getJITStubForFunction - Create or return a stub for the specified
+ /// function. This stub acts just like the specified function, except that
+ /// it allows the "address" of the function to be taken without having to
+ /// generate code for it. Targets do not need to implement this method, but
+ /// doing so will allow for faster startup of the JIT.
+ ///
+ virtual void *getJITStubForFunction(Function *F, MachineCodeEmitter &MCE) {
+ return 0;
+ }
+ };
+ } // End llvm namespace
+
+ #endif
Index: llvm/include/llvm/Target/TargetMachine.h
diff -u llvm/include/llvm/Target/TargetMachine.h:1.40 llvm/include/llvm/Target/TargetMachine.h:1.41
--- llvm/include/llvm/Target/TargetMachine.h:1.40 Fri Dec 12 01:10:32 2003
+++ llvm/include/llvm/Target/TargetMachine.h Fri Dec 19 19:21:37 2003
@@ -21,6 +21,7 @@
class TargetInstrInfo;
class TargetInstrDescriptor;
+class TargetJITInfo;
class TargetSchedInfo;
class TargetRegInfo;
class TargetFrameInfo;
@@ -79,16 +80,16 @@
///
virtual const MRegisterInfo* getRegisterInfo() const { return 0; }
- // Data storage information
+ /// getJITInfo - If this target supports a JIT, return information for it,
+ /// otherwise return null.
+ ///
+ virtual TargetJITInfo *getJITInfo() { return 0; }
+
+ // Data storage information. FIXME, this should be moved out to sparc
+ // specific code.
//
virtual unsigned findOptimalStorageSize(const Type* ty) const;
- /// addPassesToJITCompile - Add passes to the specified pass manager to
- /// implement a fast dynamic compiler for this target. Return true if this is
- /// not supported for this target.
- ///
- virtual bool addPassesToJITCompile(FunctionPassManager &PM) { return true; }
-
/// addPassesToEmitAssembly - Add passes to the specified pass manager to get
/// assembly langage code emitted. Typically this will involve several steps
/// of code generation. This method should return true if assembly emission
@@ -107,24 +108,6 @@
virtual bool addPassesToEmitMachineCode(FunctionPassManager &PM,
MachineCodeEmitter &MCE) {
return true;
- }
-
- /// replaceMachineCodeForFunction - Make it so that calling the
- /// function whose machine code is at OLD turns into a call to NEW,
- /// perhaps by overwriting OLD with a branch to NEW.
- ///
- /// FIXME: this is JIT-specific.
- ///
- virtual void replaceMachineCodeForFunction (void *Old, void *New) {
- assert (0 && "Current target cannot replace machine code for functions");
- }
-
- /// getJITStubForFunction - Create or return a stub for the specified
- /// function. This stub acts just like the specified function, except that it
- /// allows the "address" of the function to be taken without having to
- /// generate code for it.
- virtual void *getJITStubForFunction(Function *F, MachineCodeEmitter &MCE) {
- return 0;
}
};
More information about the llvm-commits
mailing list