diff --git a/AST/Expr.cpp b/AST/Expr.cpp
index 2df7612..9b5fc78 100644
--- a/AST/Expr.cpp
+++ b/AST/Expr.cpp
@@ -611,3 +611,20 @@
   }
   return false;
 }
+
+/// getEncodedElementAccess - We encode fields with two bits per component.
+unsigned OCUVectorComponent::getEncodedElementAccess() const {
+  const char *compStr = Accessor.getName();
+  unsigned length = strlen(compStr);
+
+  unsigned Result = 0;
+  
+  while (length--) {
+    Result <<= 2;
+    int Idx = OCUVectorType::getAccessorIdx(compStr[length]);
+    assert(Idx != -1 && "Invalid accessor letter");
+    Result |= Idx;
+  }
+  return Result;
+}
+
diff --git a/include/clang/AST/Expr.h b/include/clang/AST/Expr.h
index 1b5dbe7..c2f147b 100644
--- a/include/clang/AST/Expr.h
+++ b/include/clang/AST/Expr.h
@@ -494,6 +494,18 @@
   /// repeated.
   bool containsDuplicateComponents() const;
   
+  /// getEncodedElementAccess - Encode the elements accessed into a bit vector.
+  /// The encoding currently uses 2-bit bitfields, but clients should use the
+  /// accessors below to access them.
+  ///
+  unsigned getEncodedElementAccess() const;
+  
+  /// getAccessedFieldNo - Given an encoded value and a result number, return
+  /// the input field number being accessed.
+  static unsigned getAccessedFieldNo(unsigned Idx, unsigned EncodedVal) {
+    return (EncodedVal >> (Idx*2)) & 3;
+  }
+  
   virtual SourceRange getSourceRange() const {
     return SourceRange(getBase()->getLocStart(), AccessorLoc);
   }
diff --git a/include/clang/AST/Type.h b/include/clang/AST/Type.h
index 9c169d5..008b914 100644
--- a/include/clang/AST/Type.h
+++ b/include/clang/AST/Type.h
@@ -544,12 +544,15 @@
     case 'q': return 3;
     }
   };
+  
+  static int getAccessorIdx(char c) {
+    if (int idx = getPointAccessorIdx(c)+1) return idx-1;
+    if (int idx = getColorAccessorIdx(c)+1) return idx-1;
+    return getTextureAccessorIdx(c);
+  }
+  
   bool isAccessorWithinNumElements(char c) const {
-    if (int idx = getPointAccessorIdx(c)+1)
-      return unsigned(idx-1) < NumElements;
-    if (int idx = getColorAccessorIdx(c)+1)
-      return unsigned(idx-1) < NumElements;
-    if (int idx = getTextureAccessorIdx(c)+1)
+    if (int idx = getAccessorIdx(c)+1)
       return unsigned(idx-1) < NumElements;
     return false;
   }
