Remove Value::{isName, getNameRef}.
authorDaniel Dunbar <daniel@zuster.org>
Sat, 25 Jul 2009 23:55:21 +0000 (23:55 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Sat, 25 Jul 2009 23:55:21 +0000 (23:55 +0000)
Also, change MDString to use a StringRef.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77098 91177308-0d34-0410-b5e6-96231b3b80d8

15 files changed:
docs/ReleaseNotes-2.6.html
include/llvm/MDNode.h
include/llvm/Value.h
lib/CodeGen/AsmPrinter/AsmPrinter.cpp
lib/Linker/LinkModules.cpp
lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp
lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp
lib/Transforms/Scalar/SimplifyLibCalls.cpp
lib/Transforms/Utils/InlineCost.cpp
lib/VMCore/AsmWriter.cpp
lib/VMCore/AutoUpgrade.cpp
lib/VMCore/LLVMContextImpl.cpp
lib/VMCore/Value.cpp
lib/VMCore/ValueSymbolTable.cpp

index add659cc88040c84c3aa5f3adc3a05903841bf9c..7f287bff06a3e9a42be93dbe99e790b7e863bb09 100644 (file)
@@ -484,6 +484,9 @@ clients should be unaffected by this transition, unless they are used to <tt>Val
       treating the result as an <tt>std::string</tt>, you can either
       uses <tt>Twine::str</tt> to get the result as an <tt>std::string</tt>, or
       could move to a <tt>Twine</tt> based design.</li>
+
+    <li><tt>isName()</tt> should be replaced with comparison
+      against <tt>getName()</tt> (this is now efficient).</tt>
   </ul>
 </li>
 
index 06cc90931e3d62df5792a6cab34f35e3939e862e..551c2e964d0a662102004c3644ccf218b0b94570 100644 (file)
@@ -64,25 +64,25 @@ public:
 ///
 class MDString : public MetadataBase {
   MDString(const MDString &);            // DO NOT IMPLEMENT
-  const char *StrBegin;
-  unsigned StrLength;
+  StringRef Str;
   friend class LLVMContextImpl;
 
 protected:
   explicit MDString(const char *begin, unsigned l)
-    : MetadataBase(Type::MetadataTy, Value::MDStringVal),
-      StrBegin(begin), StrLength(l) {}
+    : MetadataBase(Type::MetadataTy, Value::MDStringVal), Str(begin, l) {}
 
 public:
-  unsigned length() const { return StrLength; }
+  StringRef getString() const { return Str; }
+
+  unsigned length() const { return Str.size(); }
 
   /// begin() - Pointer to the first byte of the string.
   ///
-  const char *begin() const { return StrBegin; }
+  const char *begin() const { return Str.begin(); }
 
   /// end() - Pointer to one byte past the end of the string.
   ///
-  const char *end() const { return StrBegin + length(); }
+  const char *end() const { return Str.end(); }
 
   /// Methods for support type inquiry through isa, cast, and dyn_cast:
   static inline bool classof(const MDString *) { return true; }
index 1f5bd7ff318b42435f178190230e85d3d795513a..584b80e3e46dd4da4d8d1e4d99da4933ce6074e7 100644 (file)
@@ -118,10 +118,6 @@ public:
   /// getNameEnd - Return a pointer to the end of the name.
   const char *getNameEnd() const { return getNameStart() + getNameLen(); }
   
-  /// isName - Return true if this value has the name specified by the provided
-  /// nul terminated string.
-  bool isName(const char *N) const;
-  
   /// getNameLen - Return the length of the string, correctly handling nul
   /// characters embedded into them.
   unsigned getNameLen() const;
@@ -131,7 +127,6 @@ public:
   /// construct a string, they are very expensive and should be avoided.
   StringRef getName() const { return StringRef(getNameStart(), getNameLen()); }
   std::string getNameStr() const;
-  StringRef getNameRef() const;
 
   void setName(const Twine &Name);
   void setName(const char *Name, unsigned NameLen);
index 887c417a8a16df43871ff4dfb400c6d332fb6a1b..582acce0da3975802c71d2fd796ed02877486585 100644 (file)
@@ -477,7 +477,7 @@ void AsmPrinter::printPICJumpTableEntry(const MachineJumpTableInfo *MJTI,
 /// special global used by LLVM.  If so, emit it and return true, otherwise
 /// do nothing and return false.
 bool AsmPrinter::EmitSpecialLLVMGlobal(const GlobalVariable *GV) {
-  if (GV->isName("llvm.used")) {
+  if (GV->getName() == "llvm.used") {
     if (TAI->getUsedDirective() != 0)    // No need to emit this at all.
       EmitLLVMUsedList(GV->getInitializer());
     return true;
index 8831d3520b6b90b4c5e664f3411da383fdf35603..15fe2224e6691a9132370d9b1302946f4c71aaba 100644 (file)
@@ -548,7 +548,7 @@ static bool LinkGlobals(Module *Dest, const Module *Src,
     // Check to see if may have to link the global with the global, alias or
     // function.
     if (SGV->hasName() && !SGV->hasLocalLinkage())
-      DGV = cast_or_null<GlobalValue>(DestSymTab.lookup(SGV->getNameRef()));
+      DGV = cast_or_null<GlobalValue>(DestSymTab.lookup(SGV->getName()));
 
     // If we found a global with the same name in the dest module, but it has
     // internal linkage, we are really not doing any linkage here.
@@ -941,7 +941,7 @@ static bool LinkFunctionProtos(Module *Dest, const Module *Src,
     // Check to see if may have to link the function with the global, alias or
     // function.
     if (SF->hasName() && !SF->hasLocalLinkage())
-      DGV = cast_or_null<GlobalValue>(DestSymTab.lookup(SF->getNameRef()));
+      DGV = cast_or_null<GlobalValue>(DestSymTab.lookup(SF->getName()));
 
     // If we found a global with the same name in the dest module, but it has
     // internal linkage, we are really not doing any linkage here.
index 3d6fb8016b1a5eec547d3ed428ed87a52fc08331..5ee5e6d5cd781c8233f6819e5550fd24d29231c9 100644 (file)
@@ -1104,9 +1104,9 @@ void ARMAsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
   if (EmitSpecialLLVMGlobal(GVar)) {
     if (Subtarget->isTargetDarwin() &&
         TM.getRelocationModel() == Reloc::Static) {
-      if (GVar->isName("llvm.global_ctors"))
+      if (GVar->getName() == "llvm.global_ctors")
         O << ".reference .constructors_used\n";
-      else if (GVar->isName("llvm.global_dtors"))
+      else if (GVar->getName() == "llvm.global_dtors")
         O << ".reference .destructors_used\n";
     }
     return;
index 146979ef5657f92ab370bd0eeb91bee9e1175dec..69b67db8092e2c11a6cec7abccc233c5bc8c2499 100644 (file)
@@ -874,9 +874,9 @@ void PPCDarwinAsmPrinter::PrintGlobalVariable(const GlobalVariable *GVar) {
   // Check to see if this is a special global used by LLVM, if so, emit it.
   if (EmitSpecialLLVMGlobal(GVar)) {
     if (TM.getRelocationModel() == Reloc::Static) {
-      if (GVar->isName("llvm.global_ctors"))
+      if (GVar->getName() == "llvm.global_ctors")
         O << ".reference .constructors_used\n";
-      else if (GVar->isName("llvm.global_dtors"))
+      else if (GVar->getName() == "llvm.global_dtors")
         O << ".reference .destructors_used\n";
     }
     return;
index 6e44b9b87f3a2777f2be39a4ea9d3af934921f44..16d8482086a3efb00597c75a9a70907470103bbd 100644 (file)
@@ -773,9 +773,9 @@ void X86ATTAsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
   if (EmitSpecialLLVMGlobal(GVar)) {
     if (Subtarget->isTargetDarwin() &&
         TM.getRelocationModel() == Reloc::Static) {
-      if (GVar->isName("llvm.global_ctors"))
+      if (GVar->getName() == "llvm.global_ctors")
         O << ".reference .constructors_used\n";
-      else if (GVar->isName("llvm.global_dtors"))
+      else if (GVar->getName() == "llvm.global_dtors")
         O << ".reference .destructors_used\n";
     }
     return;
index 6f1898a2e0ec6f1030c6ea8f52bc9300cfb1da38..60895f3e8f0d6dec06d47359fcad65177e8b12ae 100644 (file)
@@ -512,7 +512,7 @@ struct VISIBILITY_HIDDEN ExitOpt : public LibCallOptimization {
 
     // Verify the caller is main, and that the result type of main matches the
     // argument type of exit.
-    if (!Caller->isName("main") || !Caller->hasExternalLinkage() ||
+    if (Caller->getName() != "main" || !Caller->hasExternalLinkage() ||
         Caller->getReturnType() != CI->getOperand(1)->getType())
       return 0;
 
index 9cd470276317dfb8dc5118e8417fd4a2c6e81926..1a04b96be51415f9c30602f874683122673a2baf 100644 (file)
@@ -125,7 +125,7 @@ void InlineCostAnalyzer::FunctionInfo::analyzeFunction(Function *F) {
         // probably won't do this in callers.
         if (Function *F = CS.getCalledFunction())
           if (F->isDeclaration() && 
-              (F->isName("setjmp") || F->isName("_setjmp"))) {
+              (F->getName() == "setjmp" || F->getName() == "_setjmp")) {
             NeverInline = true;
             return;
           }
index 9b3d2edd78a8019118208353040713b3f0336afd..bb117e1418719a7afe2a2a202fb8d00bd6858574 100644 (file)
@@ -66,10 +66,9 @@ static const Module *getModuleFromVal(const Value *V) {
 
 // PrintEscapedString - Print each character of the specified string, escaping
 // it if it is not printable or if it is an escape char.
-static void PrintEscapedString(const char *Str, unsigned Length,
-                               raw_ostream &Out) {
-  for (unsigned i = 0; i != Length; ++i) {
-    unsigned char C = Str[i];
+static void PrintEscapedString(const StringRef &Name, raw_ostream &Out) {
+  for (unsigned i = 0, e = Name.size(); i != e; ++i) {
+    unsigned char C = Name[i];
     if (isprint(C) && C != '\\' && C != '"')
       Out << C;
     else
@@ -77,12 +76,6 @@ static void PrintEscapedString(const char *Str, unsigned Length,
   }
 }
 
-// PrintEscapedString - Print each character of the specified string, escaping
-// it if it is not printable or if it is an escape char.
-static void PrintEscapedString(const std::string &Str, raw_ostream &Out) {
-  PrintEscapedString(Str.c_str(), Str.size(), Out);
-}
-
 enum PrefixType {
   GlobalPrefix,
   LabelPrefix,
@@ -93,9 +86,9 @@ enum PrefixType {
 /// PrintLLVMName - Turn the specified name into an 'LLVM name', which is either
 /// prefixed with % (if the string only contains simple characters) or is
 /// surrounded with ""'s (if it has special chars in it).  Print it out.
-static void PrintLLVMName(raw_ostream &OS, const char *NameStr,
-                          unsigned NameLen, PrefixType Prefix) {
-  assert(NameStr && "Cannot get empty name!");
+static void PrintLLVMName(raw_ostream &OS, const StringRef &Name,
+                          PrefixType Prefix) {
+  assert(Name.data() && "Cannot get empty name!");
   switch (Prefix) {
   default: llvm_unreachable("Bad prefix!");
   case NoPrefix: break;
@@ -105,10 +98,10 @@ static void PrintLLVMName(raw_ostream &OS, const char *NameStr,
   }
   
   // Scan the name to see if it needs quotes first.
-  bool NeedsQuotes = isdigit(NameStr[0]);
+  bool NeedsQuotes = isdigit(Name[0]);
   if (!NeedsQuotes) {
-    for (unsigned i = 0; i != NameLen; ++i) {
-      char C = NameStr[i];
+    for (unsigned i = 0, e = Name.size(); i != e; ++i) {
+      char C = Name[i];
       if (!isalnum(C) && C != '-' && C != '.' && C != '_') {
         NeedsQuotes = true;
         break;
@@ -118,14 +111,14 @@ static void PrintLLVMName(raw_ostream &OS, const char *NameStr,
   
   // If we didn't need any quotes, just write out the name in one blast.
   if (!NeedsQuotes) {
-    OS.write(NameStr, NameLen);
+    OS << Name;
     return;
   }
   
   // Okay, we need quotes.  Output the quotes and escape any scary characters as
   // needed.
   OS << '"';
-  PrintEscapedString(NameStr, NameLen, OS);
+  PrintEscapedString(Name, OS);
   OS << '"';
 }
 
@@ -133,7 +126,7 @@ static void PrintLLVMName(raw_ostream &OS, const char *NameStr,
 /// prefixed with % (if the string only contains simple characters) or is
 /// surrounded with ""'s (if it has special chars in it).  Print it out.
 static void PrintLLVMName(raw_ostream &OS, const Value *V) {
-  PrintLLVMName(OS, V->getNameStart(), V->getNameLen(),
+  PrintLLVMName(OS, V->getName(), 
                 isa<GlobalValue>(V) ? GlobalPrefix : LocalPrefix);
 }
 
@@ -433,7 +426,7 @@ static void AddModuleTypesToPrinter(TypePrinting &TP,
     // Get the name as a string and insert it into TypeNames.
     std::string NameStr;
     raw_string_ostream NameOS(NameStr);
-    PrintLLVMName(NameOS, TI->first.c_str(), TI->first.length(), LocalPrefix);
+    PrintLLVMName(NameOS, TI->first, LocalPrefix);
     TP.addTypeName(Ty, NameOS.str());
   }
   
@@ -1138,7 +1131,7 @@ static void WriteAsOperandInternal(raw_ostream &Out, const Value *V,
 
   if (const MDString *MDS = dyn_cast<MDString>(V)) {
     Out << "!\"";
-    PrintEscapedString(MDS->begin(), MDS->length(), Out);
+    PrintEscapedString(MDS->getString(), Out);
     Out << '"';
     return;
   }
@@ -1474,7 +1467,7 @@ void AssemblyWriter::printTypeSymbolTable(const TypeSymbolTable &ST) {
   for (TypeSymbolTable::const_iterator TI = ST.begin(), TE = ST.end();
        TI != TE; ++TI) {
     Out << '\t';
-    PrintLLVMName(Out, &TI->first[0], TI->first.size(), LocalPrefix);
+    PrintLLVMName(Out, TI->first, LocalPrefix);
     Out << " = type ";
 
     // Make sure we print out at least one level of the type structure, so
@@ -1605,7 +1598,7 @@ void AssemblyWriter::printArgument(const Argument *Arg,
 void AssemblyWriter::printBasicBlock(const BasicBlock *BB) {
   if (BB->hasName()) {              // Print out the label if it exists...
     Out << "\n";
-    PrintLLVMName(Out, BB->getNameStart(), BB->getNameLen(), LabelPrefix);
+    PrintLLVMName(Out, BB->getName(), LabelPrefix);
     Out << ':';
   } else if (!BB->use_empty()) {      // Don't print block # of no uses...
     Out << "\n; <label>:";
@@ -1982,7 +1975,7 @@ void Value::print(raw_ostream &OS, AssemblyAnnotationWriter *AAW) const {
     TypePrinter.print(MDS->getType(), OS);
     OS << ' ';
     OS << "!\"";
-    PrintEscapedString(MDS->begin(), MDS->length(), OS);
+    PrintEscapedString(MDS->getString(), OS);
     OS << '"';
   } else if (const MDNode *N = dyn_cast<MDNode>(this)) {
     SlotTracker SlotTable(N);
index ca2e57d4b701e40b5ddb27296cb02d8547b65dfb..c771500d91411e6bc922354c6c107d75e6a5bc37 100644 (file)
@@ -241,23 +241,23 @@ void llvm::UpgradeIntrinsicCall(CallInst *CI, Function *NewFn) {
     bool isMovSD = false, isShufPD = false;
     bool isUnpckhPD = false, isUnpcklPD = false;
     bool isPunpckhQPD = false, isPunpcklQPD = false;
-    if (strcmp(F->getNameStart(), "llvm.x86.sse2.loadh.pd") == 0)
+    if (F->getName() == "llvm.x86.sse2.loadh.pd")
       isLoadH = true;
-    else if (strcmp(F->getNameStart(), "llvm.x86.sse2.loadl.pd") == 0)
+    else if (F->getName() == "llvm.x86.sse2.loadl.pd")
       isLoadL = true;
-    else if (strcmp(F->getNameStart(), "llvm.x86.sse2.movl.dq") == 0)
+    else if (F->getName() == "llvm.x86.sse2.movl.dq")
       isMovL = true;
-    else if (strcmp(F->getNameStart(), "llvm.x86.sse2.movs.d") == 0)
+    else if (F->getName() == "llvm.x86.sse2.movs.d")
       isMovSD = true;
-    else if (strcmp(F->getNameStart(), "llvm.x86.sse2.shuf.pd") == 0)
+    else if (F->getName() == "llvm.x86.sse2.shuf.pd")
       isShufPD = true;
-    else if (strcmp(F->getNameStart(), "llvm.x86.sse2.unpckh.pd") == 0)
+    else if (F->getName() == "llvm.x86.sse2.unpckh.pd")
       isUnpckhPD = true;
-    else if (strcmp(F->getNameStart(), "llvm.x86.sse2.unpckl.pd") == 0)
+    else if (F->getName() == "llvm.x86.sse2.unpckl.pd")
       isUnpcklPD = true;
-    else if (strcmp(F->getNameStart(), "llvm.x86.sse2.punpckh.qdq") == 0)
+    else if (F->getName() ==  "llvm.x86.sse2.punpckh.qdq")
       isPunpckhQPD = true;
-    else if (strcmp(F->getNameStart(), "llvm.x86.sse2.punpckl.qdq") == 0)
+    else if (F->getName() ==  "llvm.x86.sse2.punpckl.qdq")
       isPunpcklQPD = true;
 
     if (isLoadH || isLoadL || isMovL || isMovSD || isShufPD ||
index 8e6c7778b9599d36c0ff73f8169161ce64d36156..edd76fc031ba9e6714cf456d72903a72b98068f9 100644 (file)
@@ -188,8 +188,7 @@ Constant *LLVMContextImpl::getConstantVector(const VectorType *Ty,
 
 void LLVMContextImpl::erase(MDString *M) {
   sys::SmartScopedWriter<true> Writer(ConstantsLock);
-  MDStringCache.erase(MDStringCache.find(StringRef(M->StrBegin, 
-                                                   M->length())));
+  MDStringCache.erase(MDStringCache.find(M->getString()));
 }
 
 void LLVMContextImpl::erase(MDNode *M) {
index d020c399fd077ffb1077160c4b0194c3003c35d6..9d6af5a334eebaabaa350b5a45793427e5dc1694 100644 (file)
@@ -165,13 +165,6 @@ unsigned Value::getNameLen() const {
   return Name ? Name->getKeyLength() : 0;
 }
 
-/// isName - Return true if this value has the name specified by the provided
-/// nul terminated string.
-bool Value::isName(const char *N) const {
-  unsigned InLen = strlen(N);
-  return InLen == getNameLen() && memcmp(getNameStart(), N, InLen) == 0;
-}
-
 
 std::string Value::getNameStr() const {
   if (Name == 0) return "";
@@ -179,11 +172,6 @@ std::string Value::getNameStr() const {
                      Name->getKeyData()+Name->getKeyLength());
 }
 
-StringRef Value::getNameRef() const {
-  if (Name == 0) return StringRef();
-  return StringRef(Name->getKeyData(), Name->getKeyLength());
-}
-
 void Value::setName(const Twine &Name) {
   SmallString<32> NameData;
   Name.toVector(NameData);
index eae3bf28003fc0aad2b30e06640a496972ddc158..525f3f04d010ee617749cae3b06ef7b175d8a908 100644 (file)
@@ -43,7 +43,7 @@ void ValueSymbolTable::reinsertValue(Value* V) {
   }
   
   // Otherwise, there is a naming conflict.  Rename this value.
-  SmallString<128> UniqueName(V->getNameStart(), V->getNameEnd());
+  SmallString<128> UniqueName(V->getName().begin(), V->getName().end());
 
   // The name is too already used, just free it so we can allocate a new name.
   V->Name->Destroy();