-
Notifications
You must be signed in to change notification settings - Fork 14.4k
[flang][tco] Add -emit-final-mlir flag #146533
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Add a flag to tco for emitting the final MLIR, prior to lowering to LLVM IR. This is intended to produce output that can be passed directly to mlir-translate. Signed-off-by: Kajetan Puchalski <[email protected]>
I can also rename to just |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Great to see this, I'm sure I won't be the only one who can save time not having to dump mlir after every pass. I think the name is good.
Please could you add a test that uses this flag and checks that what it gets is LLVM dialect MLIR.
I'll add some other reviewers who often work on LLVMIR codegen as they may also find this useful.
@llvm/pr-subscribers-flang-driver Author: Kajetan Puchalski (mrkajetanp) ChangesAdd a flag to tco for emitting the final MLIR, prior to lowering to LLVM IR. This is intended to produce output that can be passed directly to mlir-translate. Full diff: https://github.com/llvm/llvm-project/pull/146533.diff 2 Files Affected:
diff --git a/flang/test/Driver/tco-emit-final-mlir.fir b/flang/test/Driver/tco-emit-final-mlir.fir
new file mode 100644
index 0000000000000..75f8f153127af
--- /dev/null
+++ b/flang/test/Driver/tco-emit-final-mlir.fir
@@ -0,0 +1,19 @@
+// Test tco's -emit-final-mlir option.
+
+// RUN: tco -emit-final-mlir %s 2>&1 | FileCheck %s
+
+// Check that the FIR file is translated into the LLVM IR
+// MLIR dialect, but not into LLVM IR itself.
+
+// CHECK-NOT: func.func
+// CHECK-LABEL: llvm.func @_QPfoo()
+// CHECK-NOT: fir.alloca
+// CHECK: %[[VAL_0:.*]] = llvm.mlir.constant(1 : i64) : i64
+// CHECK: %[[VAL_1:.*]] = llvm.alloca %[[VAL_0]] x i32 : (i64) -> !llvm.ptr
+// CHECK: llvm.return
+// CHECK-NOT: func.func
+
+func.func @_QPfoo() {
+ %1 = fir.alloca i32
+ return
+}
diff --git a/flang/tools/tco/tco.cpp b/flang/tools/tco/tco.cpp
index eaf4bae088454..806cd3148d09f 100644
--- a/flang/tools/tco/tco.cpp
+++ b/flang/tools/tco/tco.cpp
@@ -70,6 +70,11 @@ static cl::opt<bool> codeGenLLVM(
cl::desc("Run only CodeGen passes and translate FIR to LLVM IR"),
cl::init(false));
+static cl::opt<bool> emitFinalMLIR(
+ "emit-final-mlir",
+ cl::desc("Only translate FIR to MLIR, do not lower to LLVM IR"),
+ cl::init(false));
+
#include "flang/Optimizer/Passes/CommandLineOpts.h"
#include "flang/Optimizer/Passes/Pipelines.h"
@@ -149,13 +154,15 @@ compileFIR(const mlir::PassPipelineCLParser &passPipeline) {
fir::registerDefaultInlinerPass(config);
fir::createMLIRToLLVMPassPipeline(pm, config);
}
- fir::addLLVMDialectToLLVMPass(pm, out.os());
+ if (!emitFinalMLIR)
+ fir::addLLVMDialectToLLVMPass(pm, out.os());
}
// run the pass manager
if (mlir::succeeded(pm.run(*owningRef))) {
// passes ran successfully, so keep the output
- if ((emitFir || passPipeline.hasAnyOccurrences()) && !codeGenLLVM)
+ if ((emitFir || passPipeline.hasAnyOccurrences() || emitFinalMLIR) &&
+ !codeGenLLVM)
printModule(*owningRef, out.os());
out.keep();
return mlir::success();
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you, LGTM!
Thanks for the patch, LGTM! |
Add a flag to tco for emitting the final MLIR, prior to lowering to LLVM IR. This is intended to produce output that can be passed directly to mlir-translate. --------- Signed-off-by: Kajetan Puchalski <[email protected]>
Add a flag to tco for emitting the final MLIR, prior to lowering to LLVM IR. This is intended to produce output that can be passed directly to mlir-translate. --------- Signed-off-by: Kajetan Puchalski <[email protected]>
Add a flag to tco for emitting the final MLIR, prior to lowering to LLVM IR. This is intended to produce output that can be passed directly to mlir-translate.