mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-22 20:26:31 +00:00
Change FunctionInfo from being an annotation put on Functions to be
something which is mapped from functions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8580 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
621727c29e
commit
63bd61330b
@ -120,8 +120,6 @@ static void SetValue(Value *V, GenericValue Val, ExecutionContext &SF) {
|
||||
|
||||
void Interpreter::initializeExecutionEngine() {
|
||||
TheEE = this;
|
||||
AnnotationManager::registerAnnotationFactory(FunctionInfoAID,
|
||||
&FunctionInfo::Create);
|
||||
initializeSignalHandlers();
|
||||
}
|
||||
|
||||
@ -899,7 +897,7 @@ void Interpreter::visitVarArgInst(VarArgInst &I) {
|
||||
// Dispatch and Execution Code
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
FunctionInfo::FunctionInfo(Function *F) : Annotation(FunctionInfoAID) {
|
||||
FunctionInfo::FunctionInfo(Function *F) {
|
||||
// Assign slot numbers to the function arguments...
|
||||
for (Function::const_aiterator AI = F->abegin(), E = F->aend(); AI != E; ++AI)
|
||||
AI->addAnnotation(new SlotNumber(getValueSlot(AI)));
|
||||
@ -959,11 +957,12 @@ void Interpreter::callFunction(Function *F,
|
||||
// the function. Also calculate the number of values for each type slot
|
||||
// active.
|
||||
//
|
||||
FunctionInfo *FuncInfo =
|
||||
(FunctionInfo*)F->getOrCreateAnnotation(FunctionInfoAID);
|
||||
ECStack.push_back(ExecutionContext()); // Make a new stack frame...
|
||||
FunctionInfo *&FuncInfo = FunctionInfoMap[F];
|
||||
if (!FuncInfo) FuncInfo = new FunctionInfo(F);
|
||||
|
||||
ExecutionContext &StackFrame = ECStack.back(); // Fill it in...
|
||||
// Make a new stack frame... and fill it in.
|
||||
ECStack.push_back(ExecutionContext());
|
||||
ExecutionContext &StackFrame = ECStack.back();
|
||||
StackFrame.CurFunction = F;
|
||||
StackFrame.CurBB = F->begin();
|
||||
StackFrame.CurInst = StackFrame.CurBB->begin();
|
||||
|
@ -15,24 +15,10 @@
|
||||
// information about the function, including the number of types present in the
|
||||
// function, and the number of values for each type.
|
||||
//
|
||||
// This annotation object is created on demand, and attaches other annotation
|
||||
// objects to the instructions in the function when it's created.
|
||||
//
|
||||
static AnnotationID FunctionInfoAID(
|
||||
AnnotationManager::getID("Interpreter::FunctionInfo"));
|
||||
|
||||
struct FunctionInfo : public Annotation {
|
||||
struct FunctionInfo {
|
||||
FunctionInfo(Function *F);
|
||||
std::vector<unsigned> NumPlaneElements;
|
||||
|
||||
// Create - Factory function to allow FunctionInfo annotations to be
|
||||
// created on demand.
|
||||
//
|
||||
static Annotation *Create(AnnotationID AID, const Annotable *O, void *) {
|
||||
assert(AID == FunctionInfoAID);
|
||||
return new FunctionInfo(cast<Function>((Value*)O));
|
||||
}
|
||||
|
||||
private:
|
||||
unsigned getValueSlot(const Value *V);
|
||||
};
|
||||
|
@ -82,6 +82,8 @@ class Interpreter : public ExecutionEngine, public InstVisitor<Interpreter> {
|
||||
// AtExitHandlers - List of functions to call when the program exits,
|
||||
// registered with the atexit() library function.
|
||||
std::vector<Function*> AtExitHandlers;
|
||||
|
||||
std::map<Function*, FunctionInfo*> FunctionInfoMap;
|
||||
public:
|
||||
Interpreter(Module *M, bool isLittleEndian, bool isLongPointer,
|
||||
bool TraceMode);
|
||||
|
Loading…
x
Reference in New Issue
Block a user