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
30 lines
1.0 KiB
Fortran
30 lines
1.0 KiB
Fortran
! Verify that the driver correctly processes `-fsyntax-only`.
|
|
!
|
|
! By default, the compiler driver (`flang`) will create actions/phases to
|
|
! generate machine code (i.e. object files). The `-fsyntax-only` flag is a
|
|
! "phase-control" flag that controls this behavior and makes the driver stop
|
|
! once the semantic checks have been run. The frontend driver (`flang -fc1`)
|
|
! runs `-fsyntax-only` by default (i.e. that's the default action), so the flag
|
|
! can be skipped.
|
|
|
|
!-----------
|
|
! RUN LINES
|
|
!-----------
|
|
! RUN: %flang -fsyntax-only %s 2>&1 | FileCheck %s --allow-empty
|
|
! RUN: %flang_fc1 %s 2>&1 | FileCheck %s --allow-empty
|
|
|
|
! RUN: rm -rf %t/non-existent-dir/
|
|
! RUN: not %flang -c %s -o %t/non-existent-dir/syntax-only.o 2>&1 | FileCheck %s --check-prefix=NO_FSYNTAX_ONLY
|
|
! RUN: not %flang_fc1 -emit-obj %s -o %t/non-existent-dir/syntax-only.o 2>&1 | FileCheck %s --check-prefix=NO_FSYNTAX_ONLY
|
|
|
|
!-----------------
|
|
! EXPECTED OUTPUT
|
|
!-----------------
|
|
! CHECK-NOT: error
|
|
! NO_FSYNTAX_ONLY: error: failed to create the output file
|
|
|
|
!-------
|
|
! INPUT
|
|
!-------
|
|
end program
|