diff options
author | Chris Lattner <sabre@nondot.org> | 2003-09-17 17:26:22 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-09-17 17:26:22 +0000 |
commit | 63bd61330b89afc669b17a08a25b97ba911e1c96 (patch) | |
tree | 35a24e7745b9577788e0cbbccc2076240162612e /lib/ExecutionEngine | |
parent | 621727c29ead58158121f52e5a8f66d14bb0d4c8 (diff) | |
download | llvm-63bd61330b89afc669b17a08a25b97ba911e1c96.tar.gz llvm-63bd61330b89afc669b17a08a25b97ba911e1c96.tar.bz2 llvm-63bd61330b89afc669b17a08a25b97ba911e1c96.tar.xz |
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
Diffstat (limited to 'lib/ExecutionEngine')
-rw-r--r-- | lib/ExecutionEngine/Interpreter/Execution.cpp | 13 | ||||
-rw-r--r-- | lib/ExecutionEngine/Interpreter/ExecutionAnnotations.h | 16 | ||||
-rw-r--r-- | lib/ExecutionEngine/Interpreter/Interpreter.h | 2 |
3 files changed, 9 insertions, 22 deletions
diff --git a/lib/ExecutionEngine/Interpreter/Execution.cpp b/lib/ExecutionEngine/Interpreter/Execution.cpp index 4570f1a239..d3818063d0 100644 --- a/lib/ExecutionEngine/Interpreter/Execution.cpp +++ b/lib/ExecutionEngine/Interpreter/Execution.cpp @@ -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(); diff --git a/lib/ExecutionEngine/Interpreter/ExecutionAnnotations.h b/lib/ExecutionEngine/Interpreter/ExecutionAnnotations.h index e17aa4b355..cca1233ea3 100644 --- a/lib/ExecutionEngine/Interpreter/ExecutionAnnotations.h +++ b/lib/ExecutionEngine/Interpreter/ExecutionAnnotations.h @@ -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); }; diff --git a/lib/ExecutionEngine/Interpreter/Interpreter.h b/lib/ExecutionEngine/Interpreter/Interpreter.h index 26ed2dc6d1..61d391a360 100644 --- a/lib/ExecutionEngine/Interpreter/Interpreter.h +++ b/lib/ExecutionEngine/Interpreter/Interpreter.h @@ -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); |