make tblgen autogenerate the nocapture intrinsics for 
llvm.memcpy/memset/memmove.  This allows removal of some 
hackish code from basicaa.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62071 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/utils/TableGen/IntrinsicEmitter.cpp b/utils/TableGen/IntrinsicEmitter.cpp
index 34bf768..eda55e1 100644
--- a/utils/TableGen/IntrinsicEmitter.cpp
+++ b/utils/TableGen/IntrinsicEmitter.cpp
@@ -423,8 +423,7 @@
   OS << "    break;\n";
   OS << "  }\n";
   OS << "  AttributeWithIndex AWI[" << MaxArgAttrs+1 << "];\n";
-  OS << "  AWI[0] = AttributeWithIndex::get(~0, Attr);\n";
-  OS << "  unsigned NumAttrs = 1;\n";
+  OS << "  unsigned NumAttrs = 0;\n";
   OS << "  switch (id) {\n";
   OS << "  default: break;\n";
   
@@ -441,17 +440,33 @@
 
     unsigned NumArgsWithAttrs = 0;
 
-    // FIXME: EMIT ATTRS
+    while (!ArgAttrs.empty()) {
+      unsigned ArgNo = ArgAttrs[0].first;
+      
+      OS << "    AWI[" << NumArgsWithAttrs++ << "] = AttributeWithIndex::get("
+         << ArgNo+1 << ", 0";
+
+      while (!ArgAttrs.empty() && ArgAttrs[0].first == ArgNo) {
+        switch (ArgAttrs[0].second) {
+        default: assert(0 && "Unknown arg attribute");
+        case CodeGenIntrinsic::NoCapture:
+          OS << "|Attribute::NoCapture";
+          break;
+        }
+        ArgAttrs.erase(ArgAttrs.begin());
+      }
+      OS << ");\n";
+    }
     
-    
-    OS << "    NumAttrs = " << NumArgsWithAttrs+1 << ";\n";
+    OS << "    NumAttrs = " << NumArgsWithAttrs << ";\n";
     OS << "    break;\n";
   }
   
   OS << "  }\n";
-  OS << "  return AttrListPtr::get(AWI, NumAttrs);\n";
+  OS << "  AWI[NumAttrs] = AttributeWithIndex::get(~0, Attr);\n";
+  OS << "  return AttrListPtr::get(AWI, NumAttrs+1);\n";
   OS << "}\n";
-  OS << "#endif\n\n";
+  OS << "#endif // GET_INTRINSIC_ATTRIBUTES\n\n";
 }
 
 void IntrinsicEmitter::