mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-15 16:09:57 +00:00
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'. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231697 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5e261ee7b0
commit
fe8490c22e
@ -14,6 +14,8 @@
|
||||
#ifndef LLVM_LIB_TARGET_MSP430_MCTARGETDESC_MSP430MCTARGETDESC_H
|
||||
#define LLVM_LIB_TARGET_MSP430_MCTARGETDESC_MSP430MCTARGETDESC_H
|
||||
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
|
||||
namespace llvm {
|
||||
class Target;
|
||||
|
||||
|
@ -14,6 +14,8 @@
|
||||
#ifndef LLVM_LIB_TARGET_NVPTX_MCTARGETDESC_NVPTXMCTARGETDESC_H
|
||||
#define LLVM_LIB_TARGET_NVPTX_MCTARGETDESC_NVPTXMCTARGETDESC_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
namespace llvm {
|
||||
class Target;
|
||||
|
||||
|
@ -16,6 +16,7 @@
|
||||
#ifndef LLVM_LIB_TARGET_R600_MCTARGETDESC_AMDGPUMCTARGETDESC_H
|
||||
#define LLVM_LIB_TARGET_R600_MCTARGETDESC_AMDGPUMCTARGETDESC_H
|
||||
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
|
||||
namespace llvm {
|
||||
|
@ -14,6 +14,8 @@
|
||||
#ifndef LLVM_LIB_TARGET_XCORE_MCTARGETDESC_XCOREMCTARGETDESC_H
|
||||
#define LLVM_LIB_TARGET_XCORE_MCTARGETDESC_XCOREMCTARGETDESC_H
|
||||
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
|
||||
namespace llvm {
|
||||
class Target;
|
||||
|
||||
|
@ -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];
|
||||
// Open enumeration. Use a 64-bit underlying type.
|
||||
OS << "enum : uint64_t {\n";
|
||||
|
||||
// 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];
|
||||
|
||||
// For each record
|
||||
for (unsigned i = 0; i < N;) {
|
||||
// Next record
|
||||
Record *Def = DefList[i];
|
||||
// Get and emit name
|
||||
OS << " " << Def->getName();
|
||||
|
||||
// Get and emit name
|
||||
OS << " " << Def->getName();
|
||||
// If bit flags then emit expression (1 << i)
|
||||
if (isBits) OS << " = " << " 1ULL << " << i;
|
||||
|
||||
// If bit flags then emit expression (1 << i)
|
||||
if (isBits) OS << " = " << " 1ULL << " << i;
|
||||
// Depending on 'if more in the list' emit comma
|
||||
if (++i < N) OS << ",";
|
||||
|
||||
// Depending on 'if more in the list' emit comma
|
||||
if (++i < N) OS << ",";
|
||||
|
||||
OS << "\n";
|
||||
}
|
||||
|
||||
// Close enumeration
|
||||
OS << "};\n";
|
||||
OS << "\n";
|
||||
}
|
||||
|
||||
// Close enumeration
|
||||
OS << "};\n";
|
||||
|
||||
OS << "}\n";
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user