[PATCH] D146075: [flang][driver][openmp] Write MLIR for -save-temps
Andrzej Warzynski via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Mar 21 10:03:38 PDT 2023
awarzynski added a comment.
Thanks for the updates!
I advice against using UPPER case in filenames. Please bear in mind that on Windows and MacOS filenames are case insensitive. It's just less hassle to stick to lower case.
================
Comment at: flang/lib/Frontend/FrontendActions.cpp:79
+ llvm::StringRef outputTag) {
+ if (!ci.getCodeGenOpts().SaveTempsDir.has_value())
+ return true;
----------------
This is confusing - `-save-temps` should work even when no directory is specified.
================
Comment at: flang/lib/Frontend/FrontendActions.cpp:82-83
+
+ const std::string &compilerOutFile = ci.getFrontendOpts().outputFile;
+ const std::string &dir = ci.getCodeGenOpts().SaveTempsDir.value();
+ std::string outDir =
----------------
Please use LLVM's containers instead (e.g. `SmallString` or `StringRef`)
================
Comment at: flang/lib/Frontend/FrontendActions.cpp:86-87
+ llvm::StringSwitch<std::string>(dir)
+ .Case("cwd", "")
+ .Case("obj", llvm::sys::path::parent_path(compilerOutFile).str())
+ .Default(dir);
----------------
Could you test both variants?
================
Comment at: flang/lib/Frontend/FrontendActions.cpp:96-100
+ std::string outFile = input.substr(0, input.find_last_of('.'))
+ .str()
+ .append("-")
+ .append(outputTag.str())
+ .append(".mlir");
----------------
Please use hooks from [[ https://github.com/llvm/llvm-project/blob/3b1951aceb8c58acd3d5c5ba2d042ad3d03c13c4/llvm/include/llvm/Support/Path.h#L213-L229 | Path.h ]] for path manipulation.
================
Comment at: flang/lib/Frontend/FrontendActions.cpp:103
+ std::error_code ec;
+ llvm::ToolOutputFile out(outDir + outFile, ec, llvm::sys::fs::OF_Text);
+ if (ec)
----------------
Why not just [[ https://github.com/llvm/llvm-project/blob/3b1951aceb8c58acd3d5c5ba2d042ad3d03c13c4/flang/lib/Frontend/FrontendActions.cpp#L793 | print ]] the MLIR module?
================
Comment at: flang/lib/Frontend/FrontendActions.cpp:624
+ // LLVMIR.mlir: This is 2nd -save-temps file created for mlir
+ if (!saveMLIRTempFile(ci.getInvocation(), *mlirModule, getCurrentFile(),
----------------
IMHO, the fact that this is the 2nd file is not that relevant (what people start printing more files and this becomes the 3rd file?). But I would appreciate a comment explaining that this is the "LLVM IR MLIR file" (i.e. the MLIR file just before lowering to LLVM IR). Similar comment for FIR.mlir.
================
Comment at: flang/lib/Frontend/FrontendActions.cpp:628
+ unsigned diagID = ci.getDiagnostics().getCustomDiagID(
+ clang::DiagnosticsEngine::Error, "Saving MLIR temp file failed");
+ ci.getDiagnostics().Report(diagID);
----------------
Could you add a test for this diagnostic? You could try by specifying an invalid output dir.
================
Comment at: flang/test/Driver/save-temps.f90:14
! CHECK-NEXT: "-o" "save-temps.o"
! CHECK-NEXT: "-o" "a.out"
----------------
Why are there no MLIR files here? Same comment for other invocations.
================
Comment at: flang/test/Driver/save-temps.f90:61
+! RUN: rm -rf %t && mkdir -p %t
+! RUN: %flang_fc1 -emit-llvm-bc -save-temps=obj -o %t/out.bc %s 2>&1
+! RUN: FileCheck %s -input-file=%t/save-temps-FIR.mlir -check-prefix=MLIR-FIR
----------------
What happens in this case: `-save-temps`? (no dir is specified)
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D146075/new/
https://reviews.llvm.org/D146075
More information about the cfe-commits
mailing list