Add support for attribute groups in the value enumerator.

Attribute groups are essentially all AttributeSets which are used by the
program. Enumerate them here.

llvm-svn: 174844
diff --git a/llvm/lib/Bitcode/Writer/ValueEnumerator.cpp b/llvm/lib/Bitcode/Writer/ValueEnumerator.cpp
index b2f7875..9f7e17b 100644
--- a/llvm/lib/Bitcode/Writer/ValueEnumerator.cpp
+++ b/llvm/lib/Bitcode/Writer/ValueEnumerator.cpp
@@ -427,6 +427,16 @@
     Attribute.push_back(PAL);
     Entry = Attribute.size();
   }
+
+  // Do lookups for all attribute groups.
+  for (unsigned i = 0, e = PAL.getNumSlots(); i != e; ++i) {
+    AttributeSet AS = PAL.getSlotAttributes(i);
+    unsigned &Entry = AttributeSetMap[AS];
+    if (Entry == 0) {
+      AttributeSets.push_back(AS);
+      Entry = AttributeSets.size();
+    }
+  }
 }
 
 void ValueEnumerator::incorporateFunction(const Function &F) {