mirror of
https://github.com/intel/llvm.git
synced 2026-01-26 03:56:16 +08:00
[mlir] Add loop codegen options to some LLVM dialect ops.
Add a Loop Option attribute and generate llvm metadata attached to branch instructions to control code generation. Reviewed By: ftynse, mehdi_amini Differential Revision: https://reviews.llvm.org/D96820
This commit is contained in:
committed by
Alex Zinenko
parent
90b7825598
commit
4a2930f495
@@ -593,7 +593,7 @@ LogicalResult ModuleTranslation::convertDialectAttributes(Operation *op) {
|
||||
/// Check whether the module contains only supported ops directly in its body.
|
||||
static LogicalResult checkSupportedModuleOps(Operation *m) {
|
||||
for (Operation &o : getModuleBody(m).getOperations())
|
||||
if (!isa<LLVM::LLVMFuncOp, LLVM::GlobalOp>(&o) &&
|
||||
if (!isa<LLVM::LLVMFuncOp, LLVM::GlobalOp, LLVM::MetadataOp>(&o) &&
|
||||
!o.hasTrait<OpTrait::IsTerminator>())
|
||||
return o.emitOpError("unsupported module-level operation");
|
||||
return success();
|
||||
@@ -633,6 +633,29 @@ LogicalResult ModuleTranslation::convertFunctions() {
|
||||
return success();
|
||||
}
|
||||
|
||||
llvm::MDNode *
|
||||
ModuleTranslation::getAccessGroup(Operation &opInst,
|
||||
SymbolRefAttr accessGroupRef) const {
|
||||
auto metadataName = accessGroupRef.getRootReference();
|
||||
auto accessGroupName = accessGroupRef.getLeafReference();
|
||||
auto metadataOp = SymbolTable::lookupNearestSymbolFrom<LLVM::MetadataOp>(
|
||||
opInst.getParentOp(), metadataName);
|
||||
auto *accessGroupOp =
|
||||
SymbolTable::lookupNearestSymbolFrom(metadataOp, accessGroupName);
|
||||
return accessGroupMetadataMapping.lookup(accessGroupOp);
|
||||
}
|
||||
|
||||
LogicalResult ModuleTranslation::createAccessGroupMetadata() {
|
||||
mlirModule->walk([&](LLVM::MetadataOp metadatas) {
|
||||
metadatas.walk([&](LLVM::AccessGroupMetadataOp op) {
|
||||
llvm::LLVMContext &ctx = llvmModule->getContext();
|
||||
llvm::MDNode *accessGroup = llvm::MDNode::getDistinct(ctx, {});
|
||||
accessGroupMetadataMapping.insert({op, accessGroup});
|
||||
});
|
||||
});
|
||||
return success();
|
||||
}
|
||||
|
||||
llvm::Type *ModuleTranslation::convertType(Type type) {
|
||||
return typeTranslator.translateType(type);
|
||||
}
|
||||
@@ -697,6 +720,8 @@ mlir::translateModuleToLLVMIR(Operation *module, llvm::LLVMContext &llvmContext,
|
||||
return nullptr;
|
||||
if (failed(translator.convertGlobals()))
|
||||
return nullptr;
|
||||
if (failed(translator.createAccessGroupMetadata()))
|
||||
return nullptr;
|
||||
if (failed(translator.convertFunctions()))
|
||||
return nullptr;
|
||||
if (llvm::verifyModule(*translator.llvmModule, &llvm::errs()))
|
||||
|
||||
Reference in New Issue
Block a user