Specialize I-Class instructions better so that we have less work to do in codegen.
authorNate Begeman <natebegeman@mac.com>
Wed, 9 Jun 2010 05:11:55 +0000 (05:11 +0000)
committerNate Begeman <natebegeman@mac.com>
Wed, 9 Jun 2010 05:11:55 +0000 (05:11 +0000)
Parenthesize macro args

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@105682 91177308-0d34-0410-b5e6-96231b3b80d8

utils/TableGen/NeonEmitter.cpp

index 1aafff9cf53a3ab9ec5b7b083702709d3096ba6b..8b90bb18c1f5349a09bd04600f6a47df4635ffca 100644 (file)
@@ -310,10 +310,14 @@ static std::string BuiltinTypeString(const char mod, StringRef typestr,
       return quad ? "V48c" : "V24c";
     if (mod == '4')
       return quad ? "V64c" : "V32c";
-    if (mod == 'f')
+    if (mod == 'f' || (ck == ClassI && type == 'f'))
       return quad ? "V4f" : "V2f";
-    if (mod == 'x' || mod == 'u')
+    if (ck == ClassI && type == 's')
+      return quad ? "V8s" : "V4s";
+    if (ck == ClassI && type == 'i')
       return quad ? "V4i" : "V2i";
+    if (ck == ClassI && type == 'l')
+      return quad ? "V2LLi" : "V1LLi";
     
     return quad ? "V16c" : "V8c";
   }    
@@ -325,9 +329,16 @@ static std::string BuiltinTypeString(const char mod, StringRef typestr,
     return quad ? "V16cV16cV16c" : "V8cV8cV8c";
   if (mod == '4')
     return quad ? "V16cV16cV16cV16c" : "V8cV8cV8cV8c";
-  if (mod == 'f')
-    return quad ? "V4f" : "V2f";
 
+  if (mod == 'f' || (ck == ClassI && type == 'f'))
+    return quad ? "V4f" : "V2f";
+  if (ck == ClassI && type == 's')
+    return quad ? "V8s" : "V4s";
+  if (ck == ClassI && type == 'i')
+    return quad ? "V4i" : "V2i";
+  if (ck == ClassI && type == 'l')
+    return quad ? "V2LLi" : "V1LLi";
+  
   return quad ? "V16c" : "V8c";
 }
 
@@ -658,7 +669,12 @@ static std::string GenBuiltin(const std::string &name, const std::string &proto,
       continue;
     }
     
+    // Parenthesize the args from the macro.
+    if (define)
+      s.push_back('(');
     s.push_back(arg);
+    if (define)
+      s.push_back(')');
     
     if (structTypes && proto[i] != 's' && proto[i] != 'i' && proto[i] != 'l' &&
         proto[i] != 'p' && proto[i] != 'c') {