A couple more vector component access fixes.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62443 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp
index 6540b2c..4dd06b9 100644
--- a/lib/AST/Expr.cpp
+++ b/lib/AST/Expr.cpp
@@ -1160,6 +1160,17 @@
 bool ExtVectorElementExpr::containsDuplicateElements() const {
   const char *compStr = Accessor.getName();
   unsigned length = Accessor.getLength();
+
+  // Halving swizzles do not contain duplicate elements.
+  if (!strcmp(compStr, "hi") || !strcmp(compStr, "lo") || 
+      !strcmp(compStr, "even") || !strcmp(compStr, "odd"))
+    return false;
+  
+  // Advance past s-char prefix on hex swizzles.
+  if (*compStr == 's') {
+    compStr++;
+    length--;
+  }
   
   for (unsigned i = 0; i != length-1; i++) {
     const char *s = compStr+i;