MLIR
18.0.0git
|
Utility base class for transforming operations into binary objects, by default it returns the serialized LLVM bitcode for the module. More...
#include "mlir/Target/LLVM/ModuleToObject.h"
Public Member Functions | |
ModuleToObject (Operation &module, StringRef triple, StringRef chip, StringRef features={}, int optLevel=3) | |
virtual | ~ModuleToObject () |
Operation & | getOperation () |
Returns the operation being serialized. More... | |
virtual std::optional< SmallVector< char, 0 > > | run () |
Runs the serialization pipeline, returning std::nullopt on error. More... | |
Protected Member Functions | |
virtual void | setDataLayoutAndTriple (llvm::Module &module) |
Hook for computing the Datalayout. More... | |
virtual std::optional< SmallVector< std::unique_ptr< llvm::Module > > > | loadBitcodeFiles (llvm::Module &module) |
Hook for loading bitcode files, returns std::nullopt on failure. More... | |
virtual LogicalResult | handleBitcodeFile (llvm::Module &module) |
Hook for performing additional actions on a loaded bitcode file. More... | |
virtual void | handleModulePreLink (llvm::Module &module) |
Hook for performing additional actions on the llvmModule pre linking. More... | |
virtual void | handleModulePostLink (llvm::Module &module) |
Hook for performing additional actions on the llvmModule post linking. More... | |
virtual std::optional< SmallVector< char, 0 > > | moduleToObject (llvm::Module &llvmModule) |
Serializes the LLVM IR bitcode to an object file, by default it serializes to LLVM bitcode. More... | |
std::optional< llvm::TargetMachine * > | getOrCreateTargetMachine () |
Create the target machine based on the target triple and chip. More... | |
std::unique_ptr< llvm::Module > | loadBitcodeFile (llvm::LLVMContext &context, StringRef path) |
Loads a bitcode file from path. More... | |
LogicalResult | loadBitcodeFilesFromList (llvm::LLVMContext &context, ArrayRef< std::string > fileList, SmallVector< std::unique_ptr< llvm::Module >> &llvmModules, bool failureOnError=true) |
Loads multiple bitcode files. More... | |
std::unique_ptr< llvm::Module > | translateToLLVMIR (llvm::LLVMContext &llvmContext) |
Translates the operation to LLVM IR. More... | |
LogicalResult | linkFiles (llvm::Module &module, SmallVector< std::unique_ptr< llvm::Module >> &&libs) |
Link the llvmModule to other bitcode file. More... | |
virtual LogicalResult | optimizeModule (llvm::Module &module, int optL) |
Optimize the module. More... | |
Static Protected Member Functions | |
static std::optional< std::string > | translateToISA (llvm::Module &llvmModule, llvm::TargetMachine &targetMachine) |
Utility function for translating to ISA, returns std::nullopt on failure. More... | |
Protected Attributes | |
Operation & | module |
Module to transform to a binary object. More... | |
StringRef | triple |
Target triple. More... | |
StringRef | chip |
Target chip. More... | |
StringRef | features |
Target features. More... | |
int | optLevel |
Optimization level. More... | |
Utility base class for transforming operations into binary objects, by default it returns the serialized LLVM bitcode for the module.
The operations being transformed must be translatable into LLVM IR.
Definition at line 30 of file ModuleToObject.h.
ModuleToObject::ModuleToObject | ( | Operation & | module, |
StringRef | triple, | ||
StringRef | chip, | ||
StringRef | features = {} , |
||
int | optLevel = 3 |
||
) |
Definition at line 37 of file ModuleToObject.cpp.
|
virtualdefault |
Operation & ModuleToObject::getOperation | ( | ) |
Returns the operation being serialized.
Definition at line 44 of file ModuleToObject.cpp.
References module.
Referenced by mlir::NVVM::SerializeGPUModuleBase::appendStandardLibs(), mlir::ROCDL::SerializeGPUModuleBase::appendStandardLibs(), mlir::ROCDL::SerializeGPUModuleBase::assembleIsa(), mlir::ROCDL::SerializeGPUModuleBase::getCommonBitcodeLibs(), getOrCreateTargetMachine(), linkFiles(), loadBitcodeFile(), loadBitcodeFilesFromList(), optimizeModule(), run(), and translateToLLVMIR().
|
protected |
Create the target machine based on the target triple and chip.
This can fail if the target is not available.
Definition at line 47 of file ModuleToObject.cpp.
References chip, mlir::Operation::emitError(), features, getOperation(), and triple.
Referenced by mlir::ROCDL::SerializeGPUModuleBase::handleModulePreLink(), optimizeModule(), and setDataLayoutAndTriple().
|
inlineprotectedvirtual |
Hook for performing additional actions on a loaded bitcode file.
Reimplemented in mlir::ROCDL::SerializeGPUModuleBase.
Definition at line 55 of file ModuleToObject.h.
References mlir::success().
Referenced by loadBitcodeFile().
|
inlineprotectedvirtual |
Hook for performing additional actions on the llvmModule post linking.
Definition at line 63 of file ModuleToObject.h.
Referenced by run().
|
inlineprotectedvirtual |
Hook for performing additional actions on the llvmModule pre linking.
Reimplemented in mlir::ROCDL::SerializeGPUModuleBase.
Definition at line 60 of file ModuleToObject.h.
Referenced by run().
|
protected |
Link the llvmModule to other bitcode file.
Definition at line 111 of file ModuleToObject.cpp.
References mlir::Operation::emitError(), mlir::failure(), getOperation(), module, and mlir::success().
Referenced by run().
|
protected |
Loads a bitcode file from path.
Definition at line 69 of file ModuleToObject.cpp.
References mlir::Operation::emitError(), mlir::failed(), getOperation(), and handleBitcodeFile().
Referenced by loadBitcodeFilesFromList().
|
inlineprotectedvirtual |
Hook for loading bitcode files, returns std::nullopt on failure.
Reimplemented in mlir::ROCDL::SerializeGPUModuleBase, and mlir::NVVM::SerializeGPUModuleBase.
Definition at line 50 of file ModuleToObject.h.
Referenced by run().
|
protected |
Loads multiple bitcode files.
Definition at line 84 of file ModuleToObject.cpp.
References mlir::Operation::emitError(), mlir::failure(), getOperation(), loadBitcodeFile(), and mlir::success().
Referenced by mlir::NVVM::SerializeGPUModuleBase::loadBitcodeFiles(), and mlir::ROCDL::SerializeGPUModuleBase::loadBitcodeFiles().
|
protectedvirtual |
Serializes the LLVM IR bitcode to an object file, by default it serializes to LLVM bitcode.
Definition at line 200 of file ModuleToObject.cpp.
Referenced by run().
|
protectedvirtual |
Optimize the module.
Definition at line 140 of file ModuleToObject.cpp.
References mlir::Operation::emitError(), getOperation(), getOrCreateTargetMachine(), mlir::makeOptimizingTransformer(), module, optLevel, mlir::success(), and triple.
Referenced by run().
|
virtual |
Runs the serialization pipeline, returning std::nullopt
on error.
Definition at line 208 of file ModuleToObject.cpp.
References mlir::Operation::emitError(), mlir::failed(), getOperation(), handleModulePostLink(), handleModulePreLink(), linkFiles(), loadBitcodeFiles(), moduleToObject(), optimizeModule(), optLevel, setDataLayoutAndTriple(), and translateToLLVMIR().
|
protectedvirtual |
Hook for computing the Datalayout.
Definition at line 188 of file ModuleToObject.cpp.
References getOrCreateTargetMachine(), and module.
Referenced by run().
|
staticprotected |
Utility function for translating to ISA, returns std::nullopt
on failure.
Definition at line 170 of file ModuleToObject.cpp.
|
protected |
Translates the operation to LLVM IR.
Definition at line 106 of file ModuleToObject.cpp.
References getOperation(), and mlir::translateModuleToLLVMIR().
Referenced by run().
|
protected |
Target chip.
Definition at line 109 of file ModuleToObject.h.
Referenced by mlir::ROCDL::SerializeGPUModuleBase::appendStandardLibs(), mlir::ROCDL::SerializeGPUModuleBase::assembleIsa(), and getOrCreateTargetMachine().
|
protected |
Target features.
Definition at line 112 of file ModuleToObject.h.
Referenced by mlir::ROCDL::SerializeGPUModuleBase::assembleIsa(), and getOrCreateTargetMachine().
|
protected |
Module to transform to a binary object.
Definition at line 103 of file ModuleToObject.h.
Referenced by mlir::ROCDL::SerializeGPUModuleBase::addControlVariables(), getOperation(), mlir::ROCDL::SerializeGPUModuleBase::handleBitcodeFile(), mlir::ROCDL::SerializeGPUModuleBase::handleModulePreLink(), linkFiles(), mlir::NVVM::SerializeGPUModuleBase::loadBitcodeFiles(), mlir::ROCDL::SerializeGPUModuleBase::loadBitcodeFiles(), optimizeModule(), and setDataLayoutAndTriple().
|
protected |
Optimization level.
Definition at line 115 of file ModuleToObject.h.
Referenced by optimizeModule(), and run().
|
protected |
Target triple.
Definition at line 106 of file ModuleToObject.h.
Referenced by mlir::ROCDL::SerializeGPUModuleBase::assembleIsa(), getOrCreateTargetMachine(), and optimizeModule().