aboutsummaryrefslogtreecommitdiff
path: root/flang/lib/FrontendTool
diff options
context:
space:
mode:
authorAndrzej Warzynski <andrzej.warzynski@arm.com>2022-02-24 17:34:27 +0000
committerAndrzej Warzynski <andrzej.warzynski@arm.com>2022-03-09 15:48:09 +0000
commit38101b4e95aa4983b7acf1e6351309db9ce5761b (patch)
tree104565d5c4188f2bafcfc5043c9877d5bddfa4af /flang/lib/FrontendTool
parent3dd7877b27dcd0d2b8e0d3a3ac156390248fe612 (diff)
downloadllvm-38101b4e95aa4983b7acf1e6351309db9ce5761b.zip
llvm-38101b4e95aa4983b7acf1e6351309db9ce5761b.tar.gz
llvm-38101b4e95aa4983b7acf1e6351309db9ce5761b.tar.bz2
[flang][driver] Add support for -S and implement -c/-emit-obj
This patch adds support for: * `-S` in Flang's compiler and frontend drivers, and implements: * `-emit-obj` in Flang's frontend driver and `-c` in Flang's compiler driver (this is consistent with Clang). (these options were already available before, but only as placeholders). The semantics of these options in Clang and Flang are identical. The `EmitObjAction` frontend action is renamed as `BackendAction`. This new name more accurately reflects the fact that this action will primarily run the code-gen/backend pipeline in LLVM. It also makes more sense as an action implementing both `-emit-obj` and `-S` (originally, it was just `-emit-obj`). `tripleName` from FirContext.cpp is deleted and, when a target triple is required, `mlir::LLVM::LLVMDialect::getTargetTripleAttrName()` is used instead. In practice, this means that `fir.triple` is replaced with `llvm.target_triple`. The former was effectively ignored. The latter is used when lowering from the LLVM dialect in MLIR to LLVM IR (i.e. it's embedded in the generated LLVM IR module). The driver can then re-use it when configuring the backend. With this change, the LLVM IR files generated by e.g. `tco` will from now on contain the correct target triple. The code-gen.f90 test is replaced with code-gen-x86.f90 and code-gen-aarch64.f90. With 2 seperate files we can verify that `--target` is correctly taken into account. LIT configuration is updated to enable e.g.: ``` ! REQUIRES: aarch64-registered-target ``` Differential Revision: https://reviews.llvm.org/D120568
Diffstat (limited to 'flang/lib/FrontendTool')
-rw-r--r--flang/lib/FrontendTool/ExecuteCompilerInvocation.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/flang/lib/FrontendTool/ExecuteCompilerInvocation.cpp b/flang/lib/FrontendTool/ExecuteCompilerInvocation.cpp
index d97833b..4e8c225 100644
--- a/flang/lib/FrontendTool/ExecuteCompilerInvocation.cpp
+++ b/flang/lib/FrontendTool/ExecuteCompilerInvocation.cpp
@@ -38,7 +38,11 @@ static std::unique_ptr<FrontendAction> CreateFrontendBaseAction(
case EmitLLVM:
return std::make_unique<EmitLLVMAction>();
case EmitObj:
- return std::make_unique<EmitObjAction>();
+ return std::make_unique<BackendAction>(
+ BackendAction::BackendActionTy::Backend_EmitObj);
+ case EmitAssembly:
+ return std::make_unique<BackendAction>(
+ BackendAction::BackendActionTy::Backend_EmitAssembly);
case DebugUnparse:
return std::make_unique<DebugUnparseAction>();
case DebugUnparseNoSema: