[llvm-commits] [llvm] r120695 - /llvm/trunk/utils/TableGen/NeonEmitter.cpp

Bob Wilson bob.wilson at apple.com
Wed Dec 1 23:44:23 PST 2010


Author: bwilson
Date: Thu Dec  2 01:44:23 2010
New Revision: 120695

URL: http://llvm.org/viewvc/llvm-project?rev=120695&view=rev
Log:
Simplify code in Neon intrinsics.  No functional changes intended.
For most intrinsics, there is no need to allocate a temporary to hold the
result value; just return it directly.

Modified:
    llvm/trunk/utils/TableGen/NeonEmitter.cpp

Modified: llvm/trunk/utils/TableGen/NeonEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/NeonEmitter.cpp?rev=120695&r1=120694&r2=120695&view=diff
==============================================================================
--- llvm/trunk/utils/TableGen/NeonEmitter.cpp (original)
+++ llvm/trunk/utils/TableGen/NeonEmitter.cpp Thu Dec  2 01:44:23 2010
@@ -547,103 +547,101 @@
   std::string ts = TypeString(proto[0], typestr);
   std::string s;
   if (op == OpHi || op == OpLo) {
-    s = "union { " + ts + " r; double d; } u; u.d";
+    s = "union { " + ts + " r; double d; } u; u.d = ";
   } else {
-    s = ts + " r; r";
+    s = "return ";
   }
   
-  s += " = ";
-
   switch(op) {
   case OpAdd:
-    s += "a + b";
+    s += "a + b;";
     break;
   case OpSub:
-    s += "a - b";
+    s += "a - b;";
     break;
   case OpMulN:
-    s += "a * " + Duplicate(nElts, typestr, "b");
+    s += "a * " + Duplicate(nElts, typestr, "b") + ";";
     break;
   case OpMul:
-    s += "a * b";
+    s += "a * b;";
     break;
   case OpMlaN:
-    s += "a + (b * " + Duplicate(nElts, typestr, "c") + ")";
+    s += "a + (b * " + Duplicate(nElts, typestr, "c") + ");";
     break;
   case OpMla:
-    s += "a + (b * c)";
+    s += "a + (b * c);";
     break;
   case OpMlsN:
-    s += "a - (b * " + Duplicate(nElts, typestr, "c") + ")";
+    s += "a - (b * " + Duplicate(nElts, typestr, "c") + ");";
     break;
   case OpMls:
-    s += "a - (b * c)";
+    s += "a - (b * c);";
     break;
   case OpEq:
-    s += "(" + ts + ")(a == b)";
+    s += "(" + ts + ")(a == b);";
     break;
   case OpGe:
-    s += "(" + ts + ")(a >= b)";
+    s += "(" + ts + ")(a >= b);";
     break;
   case OpLe:
-    s += "(" + ts + ")(a <= b)";
+    s += "(" + ts + ")(a <= b);";
     break;
   case OpGt:
-    s += "(" + ts + ")(a > b)";
+    s += "(" + ts + ")(a > b);";
     break;
   case OpLt:
-    s += "(" + ts + ")(a < b)";
+    s += "(" + ts + ")(a < b);";
     break;
   case OpNeg:
-    s += " -a";
+    s += " -a;";
     break;
   case OpNot:
-    s += " ~a";
+    s += " ~a;";
     break;
   case OpAnd:
-    s += "a & b";
+    s += "a & b;";
     break;
   case OpOr:
-    s += "a | b";
+    s += "a | b;";
     break;
   case OpXor:
-    s += "a ^ b";
+    s += "a ^ b;";
     break;
   case OpAndNot:
-    s += "a & ~b";
+    s += "a & ~b;";
     break;
   case OpOrNot:
-    s += "a | ~b";
+    s += "a | ~b;";
     break;
   case OpCast:
-    s += "(" + ts + ")a";
+    s += "(" + ts + ")a;";
     break;
   case OpConcat:
     s += "(" + ts + ")__builtin_shufflevector((int64x1_t)a";
-    s += ", (int64x1_t)b, 0, 1)";
+    s += ", (int64x1_t)b, 0, 1);";
     break;
   case OpHi:
-    s += "(((float64x2_t)a)[1])";
+    s += "(((float64x2_t)a)[1]);";
     break;
   case OpLo:
-    s += "(((float64x2_t)a)[0])";
+    s += "(((float64x2_t)a)[0]);";
     break;
   case OpDup:
-    s += Duplicate(nElts, typestr, "a");
+    s += Duplicate(nElts, typestr, "a") + ";";
     break;
   case OpSelect:
     // ((0 & 1) | (~0 & 2))
     s += "(" + ts + ")";
     ts = TypeString(proto[1], typestr);
     s += "((a & (" + ts + ")b) | ";
-    s += "(~a & (" + ts + ")c))";
+    s += "(~a & (" + ts + ")c));";
     break;
   case OpRev16:
     s += "__builtin_shufflevector(a, a";
     for (unsigned i = 2; i <= nElts; i += 2)
       for (unsigned j = 0; j != 2; ++j)
         s += ", " + utostr(i - j - 1);
-    s += ")";
+    s += ");";
     break;
   case OpRev32: {
     unsigned WordElts = nElts >> (1 + (int)quad);
@@ -651,7 +649,7 @@
     for (unsigned i = WordElts; i <= nElts; i += WordElts)
       for (unsigned j = 0; j != WordElts; ++j)
         s += ", " + utostr(i - j - 1);
-    s += ")";
+    s += ");";
     break;
   }
   case OpRev64: {
@@ -660,7 +658,7 @@
     for (unsigned i = DblWordElts; i <= nElts; i += DblWordElts)
       for (unsigned j = 0; j != DblWordElts; ++j)
         s += ", " + utostr(i - j - 1);
-    s += ")";
+    s += ");";
     break;
   }
   default:
@@ -668,9 +666,7 @@
     break;
   }
   if (op == OpHi || op == OpLo)
-    s += "; return u.r;";
-  else
-    s += "; return r;";
+    s += " return u.r;";
   return s;
 }
 
@@ -761,7 +757,7 @@
     } else if (sret) {
       s += ts + " r; ";
     } else {
-      s += ts + " r; r = (" + ts + ")";
+      s += "return (" + ts + ")";
     }
   }
   
@@ -842,13 +838,11 @@
   
   s += ");";
 
-  if (proto[0] != 'v') {
-    if (define) {
-      if (sret)
-        s += " r;";
-    } else {
+  if (proto[0] != 'v' && sret) {
+    if (define)
+      s += " r;";
+    else
       s += " return r;";
-    }
   }
   return s;
 }





More information about the llvm-commits mailing list