mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-03 14:31:10 +00:00
Implement new getFunction and getOrInsertFunction methods
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2033 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
89851077da
commit
6056c49ca0
@ -11,6 +11,7 @@
|
||||
#include "llvm/ValueHolderImpl.h"
|
||||
#include "llvm/Type.h"
|
||||
#include "llvm/ConstantVals.h"
|
||||
#include "llvm/DerivedTypes.h"
|
||||
#include "Support/STLExtras.h"
|
||||
#include <map>
|
||||
|
||||
@ -40,6 +41,36 @@ Module::~Module() {
|
||||
FunctionList.setParent(0);
|
||||
}
|
||||
|
||||
// getOrInsertFunction - Look up the specified function in the module symbol
|
||||
// table. If it does not exist, add a prototype for the function and return
|
||||
// it. This is nice because it allows most passes to get away with not handling
|
||||
// the symbol table directly for this common task.
|
||||
//
|
||||
Function *Module::getOrInsertFunction(const std::string &Name,
|
||||
const FunctionType *Ty) {
|
||||
SymbolTable *SymTab = getSymbolTableSure();
|
||||
|
||||
// See if we have a definitions for the specified function already...
|
||||
if (Value *V = SymTab->lookup(PointerType::get(Ty), Name)) {
|
||||
return cast<Function>(V); // Yup, got it
|
||||
} else { // Nope, add one
|
||||
Function *New = new Function(Ty, false, Name);
|
||||
FunctionList.push_back(New);
|
||||
return New; // Return the new prototype...
|
||||
}
|
||||
}
|
||||
|
||||
// getFunction - Look up the specified function in the module symbol table.
|
||||
// If it does not exist, return null.
|
||||
//
|
||||
Function *Module::getFunction(const std::string &Name, const FunctionType *Ty) {
|
||||
SymbolTable *SymTab = getSymbolTable();
|
||||
if (SymTab == 0) return 0; // No symtab, no symbols...
|
||||
|
||||
return cast_or_null<Function>(SymTab->lookup(PointerType::get(Ty), Name));
|
||||
}
|
||||
|
||||
|
||||
|
||||
// dropAllReferences() - This function causes all the subinstructions to "let
|
||||
// go" of all references that they are maintaining. This allows one to
|
||||
|
Loading…
x
Reference in New Issue
Block a user