[llvm-commits] [llvm] r147491 - /llvm/trunk/utils/TableGen/SubtargetEmitter.cpp

Jakob Stoklund Olesen stoklund at 2pi.dk
Tue Jan 3 15:04:28 PST 2012


Author: stoklund
Date: Tue Jan  3 17:04:28 2012
New Revision: 147491

URL: http://llvm.org/viewvc/llvm-project?rev=147491&view=rev
Log:
Don't use enums larger than 1 << 31 for target features.

Patch by Andy Zhang!

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

Modified: llvm/trunk/utils/TableGen/SubtargetEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/SubtargetEmitter.cpp?rev=147491&r1=147490&r2=147491&view=diff
==============================================================================
--- llvm/trunk/utils/TableGen/SubtargetEmitter.cpp (original)
+++ llvm/trunk/utils/TableGen/SubtargetEmitter.cpp Tue Jan  3 17:04:28 2012
@@ -39,28 +39,41 @@
 
   OS << "namespace " << Target << " {\n";
 
-  // Open enumeration
-  OS << "enum {\n";
+  // For bit flag enumerations with more than 32 items, emit constants.
+  // Emit an enum for everything else.
+  if (isBits && N > 32) {
+    // For each record
+    for (unsigned i = 0; i < N; i++) {
+      // Next record
+      Record *Def = DefList[i];
 
-  // For each record
-  for (unsigned i = 0; i < N;) {
-    // Next record
-    Record *Def = DefList[i];
+      // Get and emit name and expression (1 << i)
+      OS << "  const uint64_t " << Def->getName() << " = 1ULL << " << i << ";\n";
+    }
+  } else {
+    // Open enumeration
+    OS << "enum {\n";
 
-    // Get and emit name
-    OS << "  " << Def->getName();
+    // For each record
+    for (unsigned i = 0; i < N;) {
+      // Next record
+      Record *Def = DefList[i];
 
-    // If bit flags then emit expression (1 << i)
-    if (isBits)  OS << " = " << " 1ULL << " << i;
+      // Get and emit name
+      OS << "  " << Def->getName();
 
-    // Depending on 'if more in the list' emit comma
-    if (++i < N) OS << ",";
+      // If bit flags then emit expression (1 << i)
+      if (isBits)  OS << " = " << " 1ULL << " << i;
 
-    OS << "\n";
-  }
+      // Depending on 'if more in the list' emit comma
+      if (++i < N) OS << ",";
 
-  // Close enumeration
-  OS << "};\n";
+      OS << "\n";
+    }
+
+    // Close enumeration
+    OS << "};\n";
+  }
 
   OS << "}\n";
 }





More information about the llvm-commits mailing list