diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-10-17 23:53:04 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-10-17 23:53:04 +0000 |
commit | 150274299b0bc2efda45783f99bef3f9f6e807ac (patch) | |
tree | d207b17f361ae7ece1c578fa34afd79c4f0f90bf | |
parent | bfec576b1b8882b94670727cac2584b60962a607 (diff) |
Simplify ExtVectorElementExpr::containsDuplicateElements().
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@84380 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/AST/Expr.cpp | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp index 547854bb61..d9de698175 100644 --- a/lib/AST/Expr.cpp +++ b/lib/AST/Expr.cpp @@ -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; } |