Skip to content

Commit

Permalink
Fix GCC warning on enum class bitfield. NFC.
Browse files Browse the repository at this point in the history
  • Loading branch information
darkbuck committed Mar 28, 2020
1 parent d2dd0fa commit cb63893
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 17 deletions.
29 changes: 15 additions & 14 deletions clang/lib/CodeGen/CGCUDANV.cpp
Expand Up @@ -466,35 +466,36 @@ llvm::Function *CGNVCUDARuntime::makeRegisterGlobalsFn() {
for (auto &&Info : DeviceVars) {
llvm::GlobalVariable *Var = Info.Var;
llvm::Constant *VarName = makeConstantString(getDeviceSideName(Info.D));
switch (Info.Flags.Kind) {
switch (Info.Flags.getKind()) {
case DeviceVarFlags::Variable: {
uint64_t VarSize =
CGM.getDataLayout().getTypeAllocSize(Var->getValueType());
llvm::Value *Args[] = {&GpuBinaryHandlePtr,
Builder.CreateBitCast(Var, VoidPtrTy),
VarName,
VarName,
llvm::ConstantInt::get(IntTy, Info.Flags.Extern),
llvm::ConstantInt::get(IntTy, VarSize),
llvm::ConstantInt::get(IntTy, Info.Flags.Constant),
llvm::ConstantInt::get(IntTy, 0)};
llvm::Value *Args[] = {
&GpuBinaryHandlePtr,
Builder.CreateBitCast(Var, VoidPtrTy),
VarName,
VarName,
llvm::ConstantInt::get(IntTy, Info.Flags.isExtern()),
llvm::ConstantInt::get(IntTy, VarSize),
llvm::ConstantInt::get(IntTy, Info.Flags.isConstant()),
llvm::ConstantInt::get(IntTy, 0)};
Builder.CreateCall(RegisterVar, Args);
break;
}
case DeviceVarFlags::Surface:
Builder.CreateCall(
RegisterSurf,
{&GpuBinaryHandlePtr, Builder.CreateBitCast(Var, VoidPtrTy), VarName,
VarName, llvm::ConstantInt::get(IntTy, Info.Flags.SurfTexType),
llvm::ConstantInt::get(IntTy, Info.Flags.Extern)});
VarName, llvm::ConstantInt::get(IntTy, Info.Flags.getSurfTexType()),
llvm::ConstantInt::get(IntTy, Info.Flags.isExtern())});
break;
case DeviceVarFlags::Texture:
Builder.CreateCall(
RegisterTex,
{&GpuBinaryHandlePtr, Builder.CreateBitCast(Var, VoidPtrTy), VarName,
VarName, llvm::ConstantInt::get(IntTy, Info.Flags.SurfTexType),
llvm::ConstantInt::get(IntTy, Info.Flags.Normalized),
llvm::ConstantInt::get(IntTy, Info.Flags.Extern)});
VarName, llvm::ConstantInt::get(IntTy, Info.Flags.getSurfTexType()),
llvm::ConstantInt::get(IntTy, Info.Flags.isNormalized()),
llvm::ConstantInt::get(IntTy, Info.Flags.isExtern())});
break;
}
}
Expand Down
19 changes: 16 additions & 3 deletions clang/lib/CodeGen/CGCUDARuntime.h
Expand Up @@ -42,17 +42,30 @@ class CGCUDARuntime {

public:
// Global variable properties that must be passed to CUDA runtime.
struct DeviceVarFlags {
enum DeviceVarKind : unsigned {
class DeviceVarFlags {
public:
enum DeviceVarKind {
Variable, // Variable
Surface, // Builtin surface
Texture, // Builtin texture
};
DeviceVarKind Kind : 2;

private:
unsigned Kind : 2;
unsigned Extern : 1;
unsigned Constant : 1; // Constant variable.
unsigned Normalized : 1; // Normalized texture.
int SurfTexType; // Type of surface/texutre.

public:
DeviceVarFlags(DeviceVarKind K, bool E, bool C, bool N, int T)
: Kind(K), Extern(E), Constant(C), Normalized(N), SurfTexType(T) {}

DeviceVarKind getKind() const { return static_cast<DeviceVarKind>(Kind); }
bool isExtern() const { return Extern; }
bool isConstant() const { return Constant; }
bool isNormalized() const { return Normalized; }
int getSurfTexType() const { return SurfTexType; }
};

CGCUDARuntime(CodeGenModule &CGM) : CGM(CGM) {}
Expand Down

0 comments on commit cb63893

Please sign in to comment.