]> granicus.if.org Git - clang/commitdiff
Simplify ExtVectorElementExpr::containsDuplicateElements().
authorDaniel Dunbar <daniel@zuster.org>
Sat, 17 Oct 2009 23:53:04 +0000 (23:53 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Sat, 17 Oct 2009 23:53:04 +0000 (23:53 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@84380 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/Expr.cpp

index 547854bb616fe1bd73683e4cf78fd8be3ba91fe3..d9de698175a62eba129d4c7de873f3212cac2000 100644 (file)
@@ -1744,26 +1744,20 @@ unsigned ExtVectorElementExpr::getNumElements() const {
 
 /// containsDuplicateElements - Return true if any element access is repeated.
 bool ExtVectorElementExpr::containsDuplicateElements() const {
-  const char *compStr = Accessor->getName();
-  unsigned length = Accessor->getLength();
+  llvm::StringRef Comp = Accessor->getNameStr();
 
   // Halving swizzles do not contain duplicate elements.
-  if (!strcmp(compStr, "hi") || !strcmp(compStr, "lo") ||
-      !strcmp(compStr, "even") || !strcmp(compStr, "odd"))
+  if (Comp == "hi" || Comp == "lo" || Comp == "even" || Comp == "odd")
     return false;
 
   // Advance past s-char prefix on hex swizzles.
-  if (*compStr == 's' || *compStr == 'S') {
-    compStr++;
-    length--;
-  }
+  if (Comp[0] == 's' || Comp[0] == 'S')
+    Comp = Comp.substr(1);
 
-  for (unsigned i = 0; i != length-1; i++) {
-    const char *s = compStr+i;
-    for (const char c = *s++; *s; s++)
-      if (c == *s)
+  for (unsigned i = 0, e = Comp.size(); i != e; ++i)
+    if (Comp.substr(i + 1).find(Comp[i]) != llvm::StringRef::npos)
         return true;
-  }
+
   return false;
 }