From 89275300d861aef73225428c95fdb069de36186d Mon Sep 17 00:00:00 2001 From: Valentin Clement Date: Tue, 1 Feb 2022 15:26:47 +0100 Subject: [PATCH] [flang] Add lowering for basic empty SUBROUTINE This patch adds the ability to lower an empty subroutine. Reviewed By: kiranchandramohan Differential Revision: https://reviews.llvm.org/D118695 --- flang/lib/Lower/Bridge.cpp | 16 +++++++++++++--- flang/test/Lower/basic-subroutine.f90 | 13 +++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 flang/test/Lower/basic-subroutine.f90 diff --git a/flang/lib/Lower/Bridge.cpp b/flang/lib/Lower/Bridge.cpp index 3645152..fdd4225 100644 --- a/flang/lib/Lower/Bridge.cpp +++ b/flang/lib/Lower/Bridge.cpp @@ -175,6 +175,8 @@ public: setCurrentPosition(Fortran::lower::pft::stmtSourceLoc(funit.endStmt)); if (funit.isMainProgram()) genExitRoutine(); + else + genFIRProcedureExit(funit, funit.getSubprogramSymbol()); funit.finalBlock = nullptr; LLVM_DEBUG(llvm::dbgs() << "*** Lowering result:\n\n" << *builder->getFunction() << '\n'); @@ -240,6 +242,15 @@ private: } void genFIR(const Fortran::parser::EndProgramStmt &) { genExitRoutine(); } + void genFIRProcedureExit(Fortran::lower::pft::FunctionLikeUnit &funit, + const Fortran::semantics::Symbol &symbol) { + if (Fortran::semantics::IsFunction(symbol)) { + TODO(toLocation(), "Function lowering"); + } else { + genExitRoutine(); + } + } + void genFIR(const Fortran::parser::CallStmt &stmt) { TODO(toLocation(), "CallStmt lowering"); } @@ -606,9 +617,8 @@ private: TODO(toLocation(), "EndSelectStmt lowering"); } - void genFIR(const Fortran::parser::EndSubroutineStmt &) { - TODO(toLocation(), "EndSubroutineStmt lowering"); - } + // Nop statements - No code, or code is generated at the construct level. + void genFIR(const Fortran::parser::EndSubroutineStmt &) {} // nop void genFIR(const Fortran::parser::EntryStmt &) { TODO(toLocation(), "EntryStmt lowering"); diff --git a/flang/test/Lower/basic-subroutine.f90 b/flang/test/Lower/basic-subroutine.f90 new file mode 100644 index 0000000..aaa37d7 --- /dev/null +++ b/flang/test/Lower/basic-subroutine.f90 @@ -0,0 +1,13 @@ +! RUN: bbc %s --pft-test | FileCheck %s +! RUN: bbc %s -o "-" -emit-fir | FileCheck %s --check-prefix=FIR + +subroutine sub1() +end subroutine + +! CHECK: 1 Subroutine sub1: subroutine sub1() +! CHECK: 1 EndSubroutineStmt: end subroutine +! CHECK: End Subroutine sub1 + +! FIR-LABEL: func @_QPsub1() { +! FIR: return +! FIR: } -- 2.7.4