xref: /llvm-project/clang/lib/Interpreter/DeviceOffload.h (revision a72d7eea5413444249670579fecea6823fb3c564)
1 //===----------- DeviceOffload.h - Device Offloading ------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file implements classes required for offloading to CUDA devices.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #ifndef LLVM_CLANG_LIB_INTERPRETER_DEVICE_OFFLOAD_H
14 #define LLVM_CLANG_LIB_INTERPRETER_DEVICE_OFFLOAD_H
15 
16 #include "IncrementalParser.h"
17 #include "llvm/Support/FileSystem.h"
18 #include "llvm/Support/VirtualFileSystem.h"
19 
20 namespace clang {
21 struct PartialTranslationUnit;
22 class CompilerInstance;
23 class CodeGenOptions;
24 class TargetOptions;
25 
26 class IncrementalCUDADeviceParser : public IncrementalParser {
27   const std::list<PartialTranslationUnit> &PTUs;
28 
29 public:
30   IncrementalCUDADeviceParser(
31       std::unique_ptr<CompilerInstance> DeviceInstance,
32       CompilerInstance &HostInstance,
33       llvm::IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> VFS,
34       llvm::Error &Err, const std::list<PartialTranslationUnit> &PTUs);
35 
36   llvm::Expected<TranslationUnitDecl *> Parse(llvm::StringRef Input) override;
37 
38   // Generate PTX for the last PTU.
39   llvm::Expected<llvm::StringRef> GeneratePTX();
40 
41   // Generate fatbinary contents in memory
42   llvm::Error GenerateFatbinary();
43 
44   ~IncrementalCUDADeviceParser();
45 
46 protected:
47   std::unique_ptr<CompilerInstance> DeviceCI;
48   int SMVersion;
49   llvm::SmallString<1024> PTXCode;
50   llvm::SmallVector<char, 1024> FatbinContent;
51   llvm::IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> VFS;
52   CodeGenOptions &CodeGenOpts; // Intentionally a reference.
53   const TargetOptions &TargetOpts;
54 };
55 
56 } // namespace clang
57 
58 #endif // LLVM_CLANG_LIB_INTERPRETER_DEVICE_OFFLOAD_H
59