From d24479730a8790d82c4859dc477bc2416d7a6bda Mon Sep 17 00:00:00 2001 From: Nate Begeman Date: Wed, 4 Feb 2009 19:47:21 +0000 Subject: New feature: add support for target intrinsics being defined in the target directories themselves. This also means that VMCore no longer needs to know about every target's list of intrinsics. Future work will include converting the PowerPC target to this interface as an example implementation. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63765 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/VMCore/Module.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'lib/VMCore/Module.cpp') diff --git a/lib/VMCore/Module.cpp b/lib/VMCore/Module.cpp index ef94796b24..896245d69e 100644 --- a/lib/VMCore/Module.cpp +++ b/lib/VMCore/Module.cpp @@ -171,6 +171,25 @@ Constant *Module::getOrInsertFunction(const std::string &Name, return F; } +Constant *Module::getOrInsertTargetIntrinsic(const std::string &Name, + const FunctionType *Ty, + AttrListPtr AttributeList) { + ValueSymbolTable &SymTab = getValueSymbolTable(); + + // See if we have a definition for the specified function already. + GlobalValue *F = dyn_cast_or_null(SymTab.lookup(Name)); + if (F == 0) { + // Nope, add it + Function *New = Function::Create(Ty, GlobalVariable::ExternalLinkage, Name); + New->setAttributes(AttributeList); + FunctionList.push_back(New); + return New; // Return the new prototype. + } + + // Otherwise, we just found the existing function or a prototype. + return F; +} + Constant *Module::getOrInsertFunction(const std::string &Name, const FunctionType *Ty) { AttrListPtr AttributeList = AttrListPtr::get((AttributeWithIndex *)0, 0); -- cgit v1.2.3-18-g5258