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 20namespace clang { 21 22class IncrementalCUDADeviceParser : public IncrementalParser { 23public: 24 IncrementalCUDADeviceParser( 25 Interpreter &Interp, std::unique_ptr<CompilerInstance> Instance, 26 IncrementalParser &HostParser, llvm::LLVMContext &LLVMCtx, 27 llvm::IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> VFS, 28 llvm::Error &Err); 29 30 llvm::Expected<PartialTranslationUnit &> 31 Parse(llvm::StringRef Input) override; 32 33 // Generate PTX for the last PTU 34 llvm::Expected<llvm::StringRef> GeneratePTX(); 35 36 // Generate fatbinary contents in memory 37 llvm::Error GenerateFatbinary(); 38 39 ~IncrementalCUDADeviceParser(); 40 41protected: 42 IncrementalParser &HostParser; 43 int SMVersion; 44 llvm::SmallString<1024> PTXCode; 45 llvm::SmallVector<char, 1024> FatbinContent; 46 llvm::IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> VFS; 47}; 48 49} // namespace clang 50 51#endif // LLVM_CLANG_LIB_INTERPRETER_DEVICE_OFFLOAD_H 52