One Hat Cyber Team
Your IP :
216.73.216.216
Server IP :
194.44.31.54
Server :
Linux zen.imath.kiev.ua 4.18.0-553.77.1.el8_10.x86_64 #1 SMP Fri Oct 3 14:30:23 UTC 2025 x86_64
Server Software :
Apache/2.4.37 (Rocky Linux) OpenSSL/1.1.1k
PHP Version :
5.6.40
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
usr
/
include
/
clang
/
CodeGen
/
View File Name :
CodeGenAction.h
//===--- CodeGenAction.h - LLVM Code Generation Frontend Action -*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_CODEGEN_CODEGENACTION_H #define LLVM_CLANG_CODEGEN_CODEGENACTION_H #include "clang/Frontend/FrontendAction.h" #include <memory> namespace llvm { class LLVMContext; class Module; } namespace clang { class BackendConsumer; class CodeGenerator; class CodeGenAction : public ASTFrontendAction { private: // Let BackendConsumer access LinkModule. friend class BackendConsumer; /// Info about module to link into a module we're generating. struct LinkModule { /// The module to link in. std::unique_ptr<llvm::Module> Module; /// If true, we set attributes on Module's functions according to our /// CodeGenOptions and LangOptions, as though we were generating the /// function ourselves. bool PropagateAttrs; /// If true, we use LLVM module internalizer. bool Internalize; /// Bitwise combination of llvm::LinkerFlags used when we link the module. unsigned LinkFlags; }; unsigned Act; std::unique_ptr<llvm::Module> TheModule; /// Bitcode modules to link in to our module. SmallVector<LinkModule, 4> LinkModules; llvm::LLVMContext *VMContext; bool OwnsVMContext; std::unique_ptr<llvm::Module> loadModule(llvm::MemoryBufferRef MBRef); /// Load bitcode modules to link into our module from the options. bool loadLinkModules(CompilerInstance &CI); protected: bool BeginSourceFileAction(CompilerInstance &CI) override; /// Create a new code generation action. If the optional \p _VMContext /// parameter is supplied, the action uses it without taking ownership, /// otherwise it creates a fresh LLVM context and takes ownership. CodeGenAction(unsigned _Act, llvm::LLVMContext *_VMContext = nullptr); bool hasIRSupport() const override; std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI, StringRef InFile) override; void ExecuteAction() override; void EndSourceFileAction() override; public: ~CodeGenAction() override; /// Take the generated LLVM module, for use after the action has been run. /// The result may be null on failure. std::unique_ptr<llvm::Module> takeModule(); /// Take the LLVM context used by this action. llvm::LLVMContext *takeLLVMContext(); CodeGenerator *getCodeGenerator() const; BackendConsumer *BEConsumer = nullptr; }; class EmitAssemblyAction : public CodeGenAction { virtual void anchor(); public: EmitAssemblyAction(llvm::LLVMContext *_VMContext = nullptr); }; class EmitBCAction : public CodeGenAction { virtual void anchor(); public: EmitBCAction(llvm::LLVMContext *_VMContext = nullptr); }; class EmitLLVMAction : public CodeGenAction { virtual void anchor(); public: EmitLLVMAction(llvm::LLVMContext *_VMContext = nullptr); }; class EmitLLVMOnlyAction : public CodeGenAction { virtual void anchor(); public: EmitLLVMOnlyAction(llvm::LLVMContext *_VMContext = nullptr); }; class EmitCodeGenOnlyAction : public CodeGenAction { virtual void anchor(); public: EmitCodeGenOnlyAction(llvm::LLVMContext *_VMContext = nullptr); }; class EmitObjAction : public CodeGenAction { virtual void anchor(); public: EmitObjAction(llvm::LLVMContext *_VMContext = nullptr); }; } #endif