Clang Project

clang_source_code/include/clang/CodeGen/BackendUtil.h
1//===--- BackendUtil.h - LLVM Backend Utilities -----------------*- 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#ifndef LLVM_CLANG_CODEGEN_BACKENDUTIL_H
10#define LLVM_CLANG_CODEGEN_BACKENDUTIL_H
11
12#include "clang/Basic/LLVM.h"
13#include "llvm/IR/ModuleSummaryIndex.h"
14#include <memory>
15
16namespace llvm {
17  class BitcodeModule;
18  template <typename T> class Expected;
19  class Module;
20  class MemoryBufferRef;
21}
22
23namespace clang {
24  class DiagnosticsEngine;
25  class HeaderSearchOptions;
26  class CodeGenOptions;
27  class TargetOptions;
28  class LangOptions;
29
30  enum BackendAction {
31    Backend_EmitAssembly,  ///< Emit native assembly files
32    Backend_EmitBC,        ///< Emit LLVM bitcode files
33    Backend_EmitLL,        ///< Emit human-readable LLVM assembly
34    Backend_EmitNothing,   ///< Don't emit anything (benchmarking mode)
35    Backend_EmitMCNull,    ///< Run CodeGen, but don't emit anything
36    Backend_EmitObj        ///< Emit native object files
37  };
38
39  void EmitBackendOutput(DiagnosticsEngine &Diagsconst HeaderSearchOptions &,
40                         const CodeGenOptions &CGOpts,
41                         const TargetOptions &TOptsconst LangOptions &LOpts,
42                         const llvm::DataLayout &TDescllvm::Module *M,
43                         BackendAction Action,
44                         std::unique_ptr<raw_pwrite_streamOS);
45
46  void EmbedBitcode(llvm::Module *Mconst CodeGenOptions &CGOpts,
47                    llvm::MemoryBufferRef Buf);
48
49  llvm::Expected<llvm::BitcodeModule>
50  FindThinLTOModule(llvm::MemoryBufferRef MBRef);
51  llvm::BitcodeModule *
52  FindThinLTOModule(llvm::MutableArrayRef<llvm::BitcodeModuleBMs);
53}
54
55#endif
56