MLIR 22.0.0git
mlir::LLVM::ModuleToObject Class Reference

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"

Inheritance diagram for mlir::LLVM::ModuleToObject:

Public Member Functions

 ModuleToObject (Operation &module, StringRef triple, StringRef chip, StringRef features={}, int optLevel=3, function_ref< void(llvm::Module &)> initialLlvmIRCallback={}, function_ref< void(llvm::Module &)> linkedLlvmIRCallback={}, function_ref< void(llvm::Module &)> optimizedLlvmIRCallback={}, function_ref< void(StringRef)> isaCallback={})
virtual ~ModuleToObject ()
OperationgetOperation ()
 Returns the operation being serialized.
virtual std::optional< SmallVector< char, 0 > > run ()
 Runs the serialization pipeline, returning std::nullopt on error.

Static Public Member Functions

static FailureOr< SmallString< 0 > > translateModuleToISA (llvm::Module &llvmModule, llvm::TargetMachine &targetMachine, function_ref< InFlightDiagnostic()> emitError)
 Translate LLVM module to textual ISA.

Protected Member Functions

virtual void setDataLayoutAndTriple (llvm::Module &module)
 Hook for computing the Datalayout.
virtual std::optional< SmallVector< std::unique_ptr< llvm::Module > > > loadBitcodeFiles (llvm::Module &module)
 Hook for loading bitcode files, returns std::nullopt on failure.
virtual LogicalResult handleBitcodeFile (llvm::Module &module)
 Hook for performing additional actions on a loaded bitcode file.
virtual void handleModulePreLink (llvm::Module &module)
 Hook for performing additional actions on the llvmModule pre linking.
virtual void handleModulePostLink (llvm::Module &module)
 Hook for performing additional actions on the llvmModule post linking.
virtual FailureOr< SmallVector< char, 0 > > moduleToObject (llvm::Module &llvmModule)
 Serializes the LLVM IR bitcode to an object file, by default it serializes to LLVM bitcode.
FailureOr< llvm::TargetMachine * > getOrCreateTargetMachine ()
 Create the target machine based on the target triple and chip.
std::unique_ptr< llvm::Module > loadBitcodeFile (llvm::LLVMContext &context, StringRef path)
 Loads a bitcode file from path.
LogicalResult loadBitcodeFilesFromList (llvm::LLVMContext &context, ArrayRef< Attribute > librariesToLink, SmallVector< std::unique_ptr< llvm::Module > > &llvmModules, bool failureOnError=true)
 Loads multiple bitcode files.
std::unique_ptr< llvm::Module > translateToLLVMIR (llvm::LLVMContext &llvmContext)
 Translates the operation to LLVM IR.
LogicalResult linkFiles (llvm::Module &module, SmallVector< std::unique_ptr< llvm::Module > > &&libs)
 Link the llvmModule to other bitcode file.
virtual LogicalResult optimizeModule (llvm::Module &module, int optL)
 Optimize the module.

Protected Attributes

Operationmodule
 Module to transform to a binary object.
StringRef triple
 Target triple.
StringRef chip
 Target chip.
StringRef features
 Target features.
int optLevel
 Optimization level.
function_ref< void(llvm::Module &)> initialLlvmIRCallback
 Callback invoked with the initial LLVM IR for the device module.
function_ref< void(llvm::Module &)> linkedLlvmIRCallback
 Callback invoked with LLVM IR for the device module after linking the device libraries.
function_ref< void(llvm::Module &)> optimizedLlvmIRCallback
 Callback invoked with LLVM IR for the device module after LLVM optimizations but before codegen.
function_ref< void(StringRef)> isaCallback
 Callback invoked with the target ISA for the device, for example PTX assembly.

Detailed Description

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.

Constructor & Destructor Documentation

◆ ModuleToObject()

ModuleToObject::ModuleToObject ( Operation & module,
StringRef triple,
StringRef chip,
StringRef features = {},
int optLevel = 3,
function_ref< void(llvm::Module &)> initialLlvmIRCallback = {},
function_ref< void(llvm::Module &)> linkedLlvmIRCallback = {},
function_ref< void(llvm::Module &)> optimizedLlvmIRCallback = {},
function_ref< void(StringRef)> isaCallback = {} )

◆ ~ModuleToObject()

ModuleToObject::~ModuleToObject ( )
virtualdefault

References mlir::emitError(), and module.

Member Function Documentation

◆ getOperation()

◆ getOrCreateTargetMachine()

FailureOr< llvm::TargetMachine * > ModuleToObject::getOrCreateTargetMachine ( )
protected

Create the target machine based on the target triple and chip.

This can fail if the target is not available.

Definition at line 53 of file ModuleToObject.cpp.

References chip, mlir::Operation::emitError(), features, getOperation(), target, and triple.

Referenced by mlir::ROCDL::SerializeGPUModuleBase::moduleToObjectImpl(), optimizeModule(), and setDataLayoutAndTriple().

◆ handleBitcodeFile()

virtual LogicalResult mlir::LLVM::ModuleToObject::handleBitcodeFile ( llvm::Module & module)
inlineprotectedvirtual

Hook for performing additional actions on a loaded bitcode file.

Reimplemented in mlir::ROCDL::SerializeGPUModuleBase.

Definition at line 66 of file ModuleToObject.h.

References module, and success().

Referenced by loadBitcodeFile(), and loadBitcodeFilesFromList().

◆ handleModulePostLink()

virtual void mlir::LLVM::ModuleToObject::handleModulePostLink ( llvm::Module & module)
inlineprotectedvirtual

Hook for performing additional actions on the llvmModule post linking.

Definition at line 74 of file ModuleToObject.h.

References module.

Referenced by run().

◆ handleModulePreLink()

virtual void mlir::LLVM::ModuleToObject::handleModulePreLink ( llvm::Module & module)
inlineprotectedvirtual

Hook for performing additional actions on the llvmModule pre linking.

Reimplemented in mlir::ROCDL::SerializeGPUModuleBase.

Definition at line 71 of file ModuleToObject.h.

References module.

Referenced by run().

◆ linkFiles()

LogicalResult ModuleToObject::linkFiles ( llvm::Module & module,
SmallVector< std::unique_ptr< llvm::Module > > && libs )
protected

Link the llvmModule to other bitcode file.

Definition at line 149 of file ModuleToObject.cpp.

References mlir::Operation::emitError(), getOperation(), module, and success().

Referenced by run().

◆ loadBitcodeFile()

std::unique_ptr< llvm::Module > ModuleToObject::loadBitcodeFile ( llvm::LLVMContext & context,
StringRef path )
protected

Loads a bitcode file from path.

Definition at line 76 of file ModuleToObject.cpp.

References mlir::Operation::emitError(), getOperation(), and handleBitcodeFile().

Referenced by loadBitcodeFilesFromList().

◆ loadBitcodeFiles()

virtual std::optional< SmallVector< std::unique_ptr< llvm::Module > > > mlir::LLVM::ModuleToObject::loadBitcodeFiles ( llvm::Module & module)
inlineprotectedvirtual

Hook for loading bitcode files, returns std::nullopt on failure.

Reimplemented in mlir::NVVM::SerializeGPUModuleBase, mlir::ROCDL::SerializeGPUModuleBase, and mlir::xevm::SerializeGPUModuleBase.

Definition at line 61 of file ModuleToObject.h.

References module.

Referenced by run().

◆ loadBitcodeFilesFromList()

LogicalResult ModuleToObject::loadBitcodeFilesFromList ( llvm::LLVMContext & context,
ArrayRef< Attribute > librariesToLink,
SmallVector< std::unique_ptr< llvm::Module > > & llvmModules,
bool failureOnError = true )
protected

◆ moduleToObject()

FailureOr< SmallVector< char, 0 > > ModuleToObject::moduleToObject ( llvm::Module & llvmModule)
protectedvirtual

Serializes the LLVM IR bitcode to an object file, by default it serializes to LLVM bitcode.

Definition at line 237 of file ModuleToObject.cpp.

Referenced by mlir::ROCDL::SerializeGPUModuleBase::moduleToObjectImpl(), and run().

◆ optimizeModule()

LogicalResult ModuleToObject::optimizeModule ( llvm::Module & module,
int optL )
protectedvirtual

◆ run()

std::optional< SmallVector< char, 0 > > ModuleToObject::run ( )
virtual

◆ setDataLayoutAndTriple()

void ModuleToObject::setDataLayoutAndTriple ( llvm::Module & module)
protectedvirtual

Hook for computing the Datalayout.

Definition at line 225 of file ModuleToObject.cpp.

References getOrCreateTargetMachine(), and module.

Referenced by mlir::ROCDL::SerializeGPUModuleBase::handleBitcodeFile(), and run().

◆ translateModuleToISA()

FailureOr< SmallString< 0 > > ModuleToObject::translateModuleToISA ( llvm::Module & llvmModule,
llvm::TargetMachine & targetMachine,
function_ref< InFlightDiagnostic()> emitError )
static

Translate LLVM module to textual ISA.

Definition at line 206 of file ModuleToObject.cpp.

References mlir::emitError().

Referenced by mlir::ROCDL::SerializeGPUModuleBase::moduleToObjectImpl().

◆ translateToLLVMIR()

std::unique_ptr< llvm::Module > ModuleToObject::translateToLLVMIR ( llvm::LLVMContext & llvmContext)
protected

Translates the operation to LLVM IR.

Definition at line 144 of file ModuleToObject.cpp.

References getOperation(), and mlir::translateModuleToLLVMIR().

Referenced by run().

Member Data Documentation

◆ chip

StringRef mlir::LLVM::ModuleToObject::chip
protected

◆ features

StringRef mlir::LLVM::ModuleToObject::features
protected

Target features.

Definition at line 118 of file ModuleToObject.h.

Referenced by getOrCreateTargetMachine(), and ModuleToObject().

◆ initialLlvmIRCallback

function_ref<void(llvm::Module &)> mlir::LLVM::ModuleToObject::initialLlvmIRCallback
protected

Callback invoked with the initial LLVM IR for the device module.

Definition at line 124 of file ModuleToObject.h.

Referenced by ModuleToObject(), and run().

◆ isaCallback

function_ref<void(StringRef)> mlir::LLVM::ModuleToObject::isaCallback
protected

Callback invoked with the target ISA for the device, for example PTX assembly.

Definition at line 136 of file ModuleToObject.h.

Referenced by ModuleToObject().

◆ linkedLlvmIRCallback

function_ref<void(llvm::Module &)> mlir::LLVM::ModuleToObject::linkedLlvmIRCallback
protected

Callback invoked with LLVM IR for the device module after linking the device libraries.

Definition at line 128 of file ModuleToObject.h.

Referenced by ModuleToObject(), and run().

◆ module

◆ optimizedLlvmIRCallback

function_ref<void(llvm::Module &)> mlir::LLVM::ModuleToObject::optimizedLlvmIRCallback
protected

Callback invoked with LLVM IR for the device module after LLVM optimizations but before codegen.

Definition at line 132 of file ModuleToObject.h.

Referenced by ModuleToObject(), and run().

◆ optLevel

int mlir::LLVM::ModuleToObject::optLevel
protected

Optimization level.

Definition at line 121 of file ModuleToObject.h.

Referenced by ModuleToObject(), optimizeModule(), and run().

◆ triple

StringRef mlir::LLVM::ModuleToObject::triple
protected

The documentation for this class was generated from the following files: