[cfe-commits] r45191 - /cfe/trunk/Sema/SemaDecl.cpp

Anders Carlsson andersca at mac.com
Tue Dec 18 22:16:30 PST 2007


Author: andersca
Date: Wed Dec 19 00:16:30 2007
New Revision: 45191

URL: http://llvm.org/viewvc/llvm-project?rev=45191&view=rev
Log:
Normalize attribute names if possible so we won't have to do two strcmps for every attribute.

Modified:
    cfe/trunk/Sema/SemaDecl.cpp

Modified: cfe/trunk/Sema/SemaDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Sema/SemaDecl.cpp?rev=45191&r1=45190&r2=45191&view=diff

==============================================================================
--- cfe/trunk/Sema/SemaDecl.cpp (original)
+++ cfe/trunk/Sema/SemaDecl.cpp Wed Dec 19 00:16:30 2007
@@ -1650,8 +1650,17 @@
 }
 
 void Sema::HandleDeclAttribute(Decl *New, AttributeList *rawAttr) {
-  if (!strcmp(rawAttr->getAttributeName()->getName(), "vector_size") ||
-      !strcmp(rawAttr->getAttributeName()->getName(), "__vector_size__")) {
+  const char *attrName = rawAttr->getAttributeName()->getName();
+  unsigned attrLen = rawAttr->getAttributeName()->getLength();
+  
+  // Normalize the attribute name, __foo__ becomes foo.
+  if (attrLen > 4 && attrName[0] == '_' && attrName[1] == '_' &&
+      attrName[attrLen - 2] == '_' && attrName[attrLen - 1] == '-') {
+    attrName += 2;
+    attrLen -= 4;
+  }
+    
+  if (attrLen == 11 && !memcmp(attrName, "vector_size", 11)) {
     if (ValueDecl *vDecl = dyn_cast<ValueDecl>(New)) {
       QualType newType = HandleVectorTypeAttribute(vDecl->getType(), rawAttr);
       if (!newType.isNull()) // install the new vector type into the decl
@@ -1663,9 +1672,7 @@
       if (!newType.isNull()) // install the new vector type into the decl
         tDecl->setUnderlyingType(newType);
     }
-  }
-  if (!strcmp(rawAttr->getAttributeName()->getName(), "ocu_vector_type") ||
-      !strcmp(rawAttr->getAttributeName()->getName(), "__ocu_vector_type__")) {
+  } else if (attrLen == 15 && !memcmp(attrName, "ocu_vector_type", 15)) {
     if (TypedefDecl *tDecl = dyn_cast<TypedefDecl>(New))
       HandleOCUVectorTypeAttribute(tDecl, rawAttr);
     else





More information about the cfe-commits mailing list