Skip to content

Commit 481e5da

Browse files
committed
[CIR] Inject AIE dialects into CIR lowering passes
The CIR lowering passes are aware of AIE dialects when going to LLVM dialect or MLIR standard dialects from aie-opt or aie-translate. Also expose the --cir-to-llvm pass to aie-opt.
1 parent 4e9f5e0 commit 481e5da

File tree

3 files changed

+31
-1
lines changed

3 files changed

+31
-1
lines changed

lib/CIR/CIRToAIEPasses.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -890,6 +890,8 @@ struct CIRToAIEInlineKernelLambda
890890
.failed())
891891
call.emitError("CIRToAIEInlineKernelLambdaBase not able to "
892892
"inline the lambda call");
893+
// Only erase the call since the callee could be used in another
894+
// context. Rely later on --symbol-dce pass.
893895
call.erase();
894896
}
895897

tools/aie-opt/aie-opt.cpp

+21-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
#ifdef CLANGIR_MLIR_FRONTEND
2929
#include "clang/CIR/Dialect/IR/CIRDialect.h"
3030
#include "clang/CIR/Dialect/Passes.h"
31+
#include "clang/CIR/LowerToLLVM.h"
32+
#include "clang/CIR/LowerToMLIR.h"
3133
#include "clang/CIR/Passes.h"
3234
#endif
3335

@@ -104,9 +106,13 @@ int main(int argc, char **argv) {
104106
mlir::registerPass([]() -> std::unique_ptr<mlir::Pass> {
105107
return cir::createConvertCIRToMLIRPass();
106108
});
109+
mlir::registerPass([]() -> std::unique_ptr<mlir::Pass> {
110+
return cir::direct::createConvertCIRToLLVMPass();
111+
});
107112

108113
mlir::PassPipelineRegistration<mlir::EmptyPipelineOptions> pipeline(
109-
"cir-to-llvm", "", [](mlir::OpPassManager &pm) {
114+
"cir-to-llvm", "Full pass pipeline from CIR to LLVM MLIR dialect",
115+
[](mlir::OpPassManager &pm) {
110116
cir::direct::populateCIRToLLVMPasses(pm, /* useCCLowering */ true);
111117
});
112118

@@ -119,6 +125,20 @@ int main(int argc, char **argv) {
119125
});
120126

121127
mlir::registerTransformsPasses();
128+
129+
cir::runAtStartOfConvertCIRToMLIRPass([](mlir::ConversionTarget ct) {
130+
ct.addLegalDialect<xilinx::AIE::AIEDialect, xilinx::AIEX::AIEXDialect,
131+
xilinx::aievec::aie1::AIEVecAIE1Dialect,
132+
xilinx::aievec::AIEVecDialect>();
133+
ct.addLegalOp<mlir::UnrealizedConversionCastOp>();
134+
});
135+
136+
cir::direct::runAtStartOfConvertCIRToLLVMPass([](mlir::ConversionTarget ct) {
137+
ct.addLegalDialect<xilinx::AIE::AIEDialect, xilinx::AIEX::AIEXDialect,
138+
xilinx::aievec::aie1::AIEVecAIE1Dialect,
139+
xilinx::aievec::AIEVecDialect>();
140+
ct.addLegalOp<mlir::UnrealizedConversionCastOp>();
141+
});
122142
#endif
123143

124144
return failed(

tools/aie-translate/aie-translate.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,14 @@ int main(int argc, char **argv) {
110110
ct.addLegalDialect<xilinx::AIE::AIEDialect, xilinx::AIEX::AIEXDialect,
111111
xilinx::aievec::aie1::AIEVecAIE1Dialect,
112112
xilinx::aievec::AIEVecDialect>();
113+
ct.addLegalOp<mlir::UnrealizedConversionCastOp>();
114+
});
115+
116+
cir::direct::runAtStartOfConvertCIRToLLVMPass([](mlir::ConversionTarget ct) {
117+
ct.addLegalDialect<xilinx::AIE::AIEDialect, xilinx::AIEX::AIEXDialect,
118+
xilinx::aievec::aie1::AIEVecAIE1Dialect,
119+
xilinx::aievec::AIEVecDialect>();
120+
ct.addLegalOp<mlir::UnrealizedConversionCastOp>();
113121
});
114122
#endif
115123
registerToLLVMIRTranslation();

0 commit comments

Comments
 (0)