mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-28 19:25:00 +00:00
Re-committing r76828 with the JIT memory manager changes now that the build
bots like the BumpPtrAllocator changes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76902 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -15,9 +15,12 @@
|
||||
#define LLVM_EXECUTION_ENGINE_JIT_MEMMANAGER_H
|
||||
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
#include <string>
|
||||
|
||||
namespace llvm {
|
||||
|
||||
class Function;
|
||||
class GlobalValue;
|
||||
|
||||
/// JITMemoryManager - This interface is used by the JIT to allocate and manage
|
||||
/// memory for the code generated by the JIT. This can be reimplemented by
|
||||
@@ -88,16 +91,19 @@ public:
|
||||
//===--------------------------------------------------------------------===//
|
||||
// Main Allocation Functions
|
||||
//===--------------------------------------------------------------------===//
|
||||
|
||||
/// startFunctionBody - When we start JITing a function, the JIT calls this
|
||||
|
||||
/// startFunctionBody - When we start JITing a function, the JIT calls this
|
||||
/// method to allocate a block of free RWX memory, which returns a pointer to
|
||||
/// it. The JIT doesn't know ahead of time how much space it will need to
|
||||
/// emit the function, so it doesn't pass in the size. Instead, this method
|
||||
/// is required to pass back a "valid size". The JIT will be careful to not
|
||||
/// write more than the returned ActualSize bytes of memory.
|
||||
virtual uint8_t *startFunctionBody(const Function *F,
|
||||
/// it. If the JIT wants to request a block of memory of at least a certain
|
||||
/// size, it passes that value as ActualSize, and this method returns a block
|
||||
/// with at least that much space. If the JIT doesn't know ahead of time how
|
||||
/// much space it will need to emit the function, it passes 0 for the
|
||||
/// ActualSize. In either case, this method is required to pass back the size
|
||||
/// of the allocated block through ActualSize. The JIT will be careful to
|
||||
/// not write more than the returned ActualSize bytes of memory.
|
||||
virtual uint8_t *startFunctionBody(const Function *F,
|
||||
uintptr_t &ActualSize) = 0;
|
||||
|
||||
|
||||
/// allocateStub - This method is called by the JIT to allocate space for a
|
||||
/// function stub (used to handle limited branch displacements) while it is
|
||||
/// JIT compiling a function. For example, if foo calls bar, and if bar
|
||||
@@ -118,10 +124,12 @@ public:
|
||||
virtual void endFunctionBody(const Function *F, uint8_t *FunctionStart,
|
||||
uint8_t *FunctionEnd) = 0;
|
||||
|
||||
/// allocateSpace - Allocate a memory block of the given size.
|
||||
/// allocateSpace - Allocate a memory block of the given size. This method
|
||||
/// cannot be called between calls to startFunctionBody and endFunctionBody.
|
||||
virtual uint8_t *allocateSpace(intptr_t Size, unsigned Alignment) = 0;
|
||||
|
||||
/// allocateGlobal - Allocate memory for a global.
|
||||
///
|
||||
virtual uint8_t *allocateGlobal(uintptr_t Size, unsigned Alignment) = 0;
|
||||
|
||||
/// deallocateMemForFunction - Free JIT memory for the specified function.
|
||||
@@ -137,6 +145,49 @@ public:
|
||||
/// the exception table.
|
||||
virtual void endExceptionTable(const Function *F, uint8_t *TableStart,
|
||||
uint8_t *TableEnd, uint8_t* FrameRegister) = 0;
|
||||
|
||||
/// CheckInvariants - For testing only. Return true if all internal
|
||||
/// invariants are preserved, or return false and set ErrorStr to a helpful
|
||||
/// error message.
|
||||
virtual bool CheckInvariants(std::string &ErrorStr) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/// GetDefaultCodeSlabSize - For testing only. Returns DefaultCodeSlabSize
|
||||
/// from DefaultJITMemoryManager.
|
||||
virtual size_t GetDefaultCodeSlabSize() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// GetDefaultDataSlabSize - For testing only. Returns DefaultCodeSlabSize
|
||||
/// from DefaultJITMemoryManager.
|
||||
virtual size_t GetDefaultDataSlabSize() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// GetDefaultStubSlabSize - For testing only. Returns DefaultCodeSlabSize
|
||||
/// from DefaultJITMemoryManager.
|
||||
virtual size_t GetDefaultStubSlabSize() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// GetNumCodeSlabs - For testing only. Returns the number of MemoryBlocks
|
||||
/// allocated for code.
|
||||
virtual unsigned GetNumCodeSlabs() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// GetNumDataSlabs - For testing only. Returns the number of MemoryBlocks
|
||||
/// allocated for data.
|
||||
virtual unsigned GetNumDataSlabs() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// GetNumStubSlabs - For testing only. Returns the number of MemoryBlocks
|
||||
/// allocated for function stubs.
|
||||
virtual unsigned GetNumStubSlabs() {
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
} // end namespace llvm.
|
||||
|
Reference in New Issue
Block a user