diff options
Diffstat (limited to 'clang/lib/CodeGen/CGCUDARuntime.h')
-rw-r--r-- | clang/lib/CodeGen/CGCUDARuntime.h | 39 |
1 files changed, 33 insertions, 6 deletions
diff --git a/clang/lib/CodeGen/CGCUDARuntime.h b/clang/lib/CodeGen/CGCUDARuntime.h index e548a3a546d4..19e70a2022a5 100644 --- a/clang/lib/CodeGen/CGCUDARuntime.h +++ b/clang/lib/CodeGen/CGCUDARuntime.h @@ -25,6 +25,7 @@ class GlobalVariable; namespace clang { class CUDAKernelCallExpr; +class NamedDecl; class VarDecl; namespace CodeGen { @@ -41,9 +42,30 @@ protected: public: // Global variable properties that must be passed to CUDA runtime. - enum DeviceVarFlags { - ExternDeviceVar = 0x01, // extern - ConstantDeviceVar = 0x02, // __constant__ + class DeviceVarFlags { + public: + enum DeviceVarKind { + Variable, // Variable + Surface, // Builtin surface + Texture, // Builtin texture + }; + + 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) {} @@ -56,7 +78,11 @@ public: /// Emits a kernel launch stub. virtual void emitDeviceStub(CodeGenFunction &CGF, FunctionArgList &Args) = 0; virtual void registerDeviceVar(const VarDecl *VD, llvm::GlobalVariable &Var, - unsigned Flags) = 0; + bool Extern, bool Constant) = 0; + virtual void registerDeviceSurf(const VarDecl *VD, llvm::GlobalVariable &Var, + bool Extern, int Type) = 0; + virtual void registerDeviceTex(const VarDecl *VD, llvm::GlobalVariable &Var, + bool Extern, int Type, bool Normalized) = 0; /// Constructs and returns a module initialization function or nullptr if it's /// not needed. Must be called after all kernels have been emitted. @@ -66,8 +92,9 @@ public: /// Must be called after ModuleCtorFunction virtual llvm::Function *makeModuleDtorFunction() = 0; - /// Construct and return the stub name of a kernel. - virtual std::string getDeviceStubName(llvm::StringRef Name) const = 0; + /// Returns function or variable name on device side even if the current + /// compilation is for host. + virtual std::string getDeviceSideName(const NamedDecl *ND) = 0; }; /// Creates an instance of a CUDA runtime class. |