[llvm-commits] CVS: llvm/lib/VMCore/Function.cpp

Reid Spencer reid at x10sys.com
Sun Apr 1 00:25:50 PDT 2007



Changes in directory llvm/lib/VMCore:

Function.cpp updated: 1.114 -> 1.115
---
Log message:

For PR1297: http://llvm.org/PR1297 :
Implement "actual" argument types for the Intrinsic member functions. This
involves changing the getName, getType, and getDeclaration methods to have
optional parameters for the actual types. These are necessary in order for
the type/name to be constructed properly for overloaded intrinsics. Only
the caller knows the actual argument types desired.


---
Diffs of the changes:  (+14 -5)

 Function.cpp |   19 ++++++++++++++-----
 1 files changed, 14 insertions(+), 5 deletions(-)


Index: llvm/lib/VMCore/Function.cpp
diff -u llvm/lib/VMCore/Function.cpp:1.114 llvm/lib/VMCore/Function.cpp:1.115
--- llvm/lib/VMCore/Function.cpp:1.114	Thu Feb 15 13:17:16 2007
+++ llvm/lib/VMCore/Function.cpp	Sun Apr  1 02:25:33 2007
@@ -176,7 +176,7 @@
   return 0;
 }
 
-const char *Intrinsic::getName(ID id) {
+std::string Intrinsic::getName(ID id, const Type **Tys, unsigned numTys) { 
   assert(id < num_intrinsics && "Invalid intrinsic ID!");
   const char * const Table[] = {
     "not_intrinsic",
@@ -184,10 +184,17 @@
 #include "llvm/Intrinsics.gen"
 #undef GET_INTRINSIC_NAME_TABLE
   };
-  return Table[id];
+  if (numTys == 0)
+    return Table[id];
+  std::string Result(Table[id]);
+  for (unsigned i = 0; i < numTys; ++i) 
+    if (Tys[i])
+      Result += "." + Tys[i]->getDescription();
+  return Result;
 }
 
-const FunctionType *Intrinsic::getType(ID id) {
+const FunctionType *Intrinsic::getType(ID id, const Type **Tys, 
+                                       uint32_t numTys) {
   const Type *ResultTy = NULL;
   std::vector<const Type*> ArgTys;
   std::vector<FunctionType::ParameterAttributes> Attrs;
@@ -200,10 +207,12 @@
   return FunctionType::get(ResultTy, ArgTys, IsVarArg, Attrs); 
 }
 
-Function *Intrinsic::getDeclaration(Module *M, ID id) {
+Function *Intrinsic::getDeclaration(Module *M, ID id, const Type **Tys, 
+                                    unsigned numTys) {
 // There can never be multiple globals with the same name of different types,
 // because intrinsics must be a specific type.
-  return cast<Function>(M->getOrInsertFunction(getName(id), getType(id)));
+  return cast<Function>(M->getOrInsertFunction(getName(id, Tys, numTys), 
+                                               getType(id, Tys, numTys)));
 }
 
 Value *IntrinsicInst::StripPointerCasts(Value *Ptr) {






More information about the llvm-commits mailing list