aboutsummaryrefslogtreecommitdiff
path: root/llvm/utils/TableGen/SubtargetEmitter.cpp
diff options
context:
space:
mode:
authorReid Kleckner <reid@kleckner.net>2015-03-09 20:23:14 +0000
committerReid Kleckner <reid@kleckner.net>2015-03-09 20:23:14 +0000
commit294fa7aa9dedc25450bfba4a9aff6d267c9d19b6 (patch)
treee3a72d826d044345dbcf7f6a06003d8b0631844e /llvm/utils/TableGen/SubtargetEmitter.cpp
parent7bd1f7cb585fc66c65120d114abc02b91156398f (diff)
downloadllvm-294fa7aa9dedc25450bfba4a9aff6d267c9d19b6.zip
llvm-294fa7aa9dedc25450bfba4a9aff6d267c9d19b6.tar.gz
llvm-294fa7aa9dedc25450bfba4a9aff6d267c9d19b6.tar.bz2
TableGen: Use 'enum : uint64_t' for feature flags to fix -Wmicrosoft
clang-cl would warn that this value is not representable in 'int': enum { FeatureX = 1ULL << 31 }; All MS enums are 'ints' unless otherwise specified, so we have to use an explicit type. The AMDGPU target just hit 32 features, triggering this warning. Now that we have C++11 strong enum types, we can also eliminate the 'const uint64_t' codepath from tablegen and just use 'enum : uint64_t'. llvm-svn: 231697
Diffstat (limited to 'llvm/utils/TableGen/SubtargetEmitter.cpp')
-rw-r--r--llvm/utils/TableGen/SubtargetEmitter.cpp45
1 files changed, 16 insertions, 29 deletions
diff --git a/llvm/utils/TableGen/SubtargetEmitter.cpp b/llvm/utils/TableGen/SubtargetEmitter.cpp
index d8cf0d1..3403afb 100644
--- a/llvm/utils/TableGen/SubtargetEmitter.cpp
+++ b/llvm/utils/TableGen/SubtargetEmitter.cpp
@@ -128,42 +128,29 @@ void SubtargetEmitter::Enumeration(raw_ostream &OS,
OS << "namespace " << Target << " {\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];
-
- // Get and emit name and expression (1 << i)
- OS << " const uint64_t " << Def->getName() << " = 1ULL << " << i << ";\n";
- }
- } else {
- // Open enumeration
- OS << "enum {\n";
-
- // For each record
- for (unsigned i = 0; i < N;) {
- // Next record
- Record *Def = DefList[i];
+ // Open enumeration. Use a 64-bit underlying type.
+ OS << "enum : uint64_t {\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";
}