Workaround or a VS miscompilation bug
[oota-llvm.git] / lib / VMCore / Function.cpp
index b5586721e8584ce7ba3ccaf5312dd5b9db96c942..01339e1bb06206267d5d9e72c1faf80dd3b15062 100644 (file)
@@ -128,7 +128,7 @@ void Function::setName(const std::string &name, SymbolTable *ST) {
         "Invalid symtab argument!");
   if ((P = getParent()) && hasName()) P->getSymbolTable().remove(this);
   Value::setName(name);
-  if (P && getName() != "") P->getSymbolTable().insert(this);
+  if (P && hasName()) P->getSymbolTable().insert(this);
 }
 
 void Function::setParent(Module *parent) {
@@ -207,18 +207,46 @@ unsigned Function::getIntrinsicID() const {
         if (getName() == alpha_intrinsics[i].name)
           return alpha_intrinsics[i].id;
     break;
+  case 'd':
+    if (getName() == "llvm.dbg.stoppoint")   return Intrinsic::dbg_stoppoint;
+    if (getName() == "llvm.dbg.region.start")return Intrinsic::dbg_region_start;
+    if (getName() == "llvm.dbg.region.end")  return Intrinsic::dbg_region_end;
+    if (getName() == "llvm.dbg.func.start")  return Intrinsic::dbg_func_start;
+    if (getName() == "llvm.dbg.declare")     return Intrinsic::dbg_declare;
+    break;
+  case 'f':
+    if (getName() == "llvm.frameaddress")  return Intrinsic::frameaddress;
+    break;
+  case 'g':
+    if (getName() == "llvm.gcwrite") return Intrinsic::gcwrite;
+    if (getName() == "llvm.gcread")  return Intrinsic::gcread;
+    if (getName() == "llvm.gcroot")  return Intrinsic::gcroot;
+    break;
   case 'l':
     if (getName() == "llvm.longjmp")  return Intrinsic::longjmp;
     break;
+  case 'm':
+    if (getName() == "llvm.memcpy")  return Intrinsic::memcpy;
+    if (getName() == "llvm.memmove")  return Intrinsic::memmove;
+    if (getName() == "llvm.memset")  return Intrinsic::memset;
+    break;
+  case 'r':
+    if (getName() == "llvm.returnaddress")  return Intrinsic::returnaddress;
+    if (getName() == "llvm.readport")       return Intrinsic::readport;
+    if (getName() == "llvm.readio")         return Intrinsic::readio;
+    break;
   case 's':
     if (getName() == "llvm.setjmp")     return Intrinsic::setjmp;
     if (getName() == "llvm.sigsetjmp")  return Intrinsic::sigsetjmp;
     if (getName() == "llvm.siglongjmp") return Intrinsic::siglongjmp;
     break;
   case 'v':
-    if (getName() == "llvm.va_copy")  return Intrinsic::va_copy;
-    if (getName() == "llvm.va_end")   return Intrinsic::va_end;
-    if (getName() == "llvm.va_start") return Intrinsic::va_start;
+    if (getName() == "llvm.va_copy")  return Intrinsic::vacopy;
+    if (getName() == "llvm.va_end")   return Intrinsic::vaend;
+    if (getName() == "llvm.va_start") return Intrinsic::vastart;
+  case 'w':
+    if (getName() == "llvm.writeport") return Intrinsic::writeport;
+    if (getName() == "llvm.writeio")   return Intrinsic::writeio;
     break;
   }
   // The "llvm." namespace is reserved!
@@ -259,5 +287,5 @@ void GlobalVariable::setName(const std::string &name, SymbolTable *ST) {
         "Invalid symtab argument!");
   if ((P = getParent()) && hasName()) P->getSymbolTable().remove(this);
   Value::setName(name);
-  if (P && getName() != "") P->getSymbolTable().insert(this);
+  if (P && hasName()) P->getSymbolTable().insert(this);
 }