Skip to content

Commit 70fab97

Browse files
Renaud-KjeanPerier
authored andcommitted
Adding ability to customize the printer of the LLVMIRLoweringPass
1 parent 311dfeb commit 70fab97

File tree

2 files changed

+16
-6
lines changed

2 files changed

+16
-6
lines changed

flang/include/flang/Optimizer/CodeGen/CodeGen.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
#include "mlir/IR/BuiltinOps.h"
1313
#include "mlir/Pass/Pass.h"
1414
#include "mlir/Pass/PassRegistry.h"
15+
#include "llvm/IR/Module.h"
16+
#include "llvm/Support/raw_ostream.h"
1517
#include <memory>
1618

1719
namespace fir {
@@ -36,9 +38,13 @@ std::unique_ptr<mlir::OperationPass<mlir::ModuleOp>> createFirTargetRewritePass(
3638
/// Convert FIR to the LLVM IR dialect
3739
std::unique_ptr<mlir::Pass> createFIRToLLVMPass();
3840

41+
using LLVMIRLoweringPrinter =
42+
std::function<void(llvm::Module &, llvm::raw_ostream &)>;
3943
/// Convert the LLVM IR dialect to LLVM-IR proper
40-
std::unique_ptr<mlir::Pass>
41-
createLLVMDialectToLLVMPass(llvm::raw_ostream &output);
44+
std::unique_ptr<mlir::Pass> createLLVMDialectToLLVMPass(
45+
llvm::raw_ostream &output,
46+
LLVMIRLoweringPrinter printer =
47+
[](llvm::Module &M, llvm::raw_ostream &out) { M.print(out, nullptr); });
4248

4349
// declarative passes
4450
#define GEN_PASS_REGISTRATION

flang/lib/Optimizer/CodeGen/CodeGen.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2926,7 +2926,9 @@ class FIRToLLVMLowering : public fir::FIRToLLVMLoweringBase<FIRToLLVMLowering> {
29262926
struct LLVMIRLoweringPass
29272927
: public mlir::PassWrapper<LLVMIRLoweringPass,
29282928
mlir::OperationPass<mlir::ModuleOp>> {
2929-
LLVMIRLoweringPass(raw_ostream &output) : output{output} {}
2929+
using Printer = fir::LLVMIRLoweringPrinter;
2930+
LLVMIRLoweringPass(raw_ostream &output, Printer p)
2931+
: output{output}, printer{p} {}
29302932

29312933
mlir::ModuleOp getModule() { return getOperation(); }
29322934

@@ -2936,7 +2938,7 @@ struct LLVMIRLoweringPass
29362938
LLVMContext llvmCtx;
29372939
if (auto llvmModule = mlir::translateModuleToLLVMIR(
29382940
getModule(), llvmCtx, optName ? *optName : "FIRModule")) {
2939-
llvmModule->print(output, nullptr);
2941+
printer(*llvmModule, output);
29402942
return;
29412943
}
29422944

@@ -2946,6 +2948,7 @@ struct LLVMIRLoweringPass
29462948

29472949
private:
29482950
raw_ostream &output;
2951+
Printer printer;
29492952
};
29502953

29512954
} // namespace
@@ -2955,6 +2958,7 @@ std::unique_ptr<mlir::Pass> fir::createFIRToLLVMPass() {
29552958
}
29562959

29572960
std::unique_ptr<mlir::Pass>
2958-
fir::createLLVMDialectToLLVMPass(raw_ostream &output) {
2959-
return std::make_unique<LLVMIRLoweringPass>(output);
2961+
fir::createLLVMDialectToLLVMPass(raw_ostream &output,
2962+
fir::LLVMIRLoweringPrinter printer) {
2963+
return std::make_unique<LLVMIRLoweringPass>(output, printer);
29602964
}

0 commit comments

Comments
 (0)