Skip to content

Commit db01b12

Browse files
clementvalschweitzpgijeanPerier
committed
[flang] Lower PAUSE statement
Lower the PAUSE statement to a runtime call. This patch is part of the upstreaming effort from fir-dev branch. Reviewed By: kiranchandramohan, schweitz Differential Revision: https://reviews.llvm.org/D118699 Co-authored-by: Eric Schweitz <[email protected]> Co-authored-by: Jean Perier <[email protected]>
1 parent e80c529 commit db01b12

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

flang/lib/Lower/Bridge.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -547,7 +547,7 @@ class FirConverter : public Fortran::lower::AbstractConverter {
547547
}
548548

549549
void genFIR(const Fortran::parser::PauseStmt &stmt) {
550-
TODO(toLocation(), "PauseStmt lowering");
550+
genPauseStatement(*this, stmt);
551551
}
552552

553553
void genFIR(const Fortran::parser::FailImageStmt &stmt) {

flang/lib/Lower/Runtime.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,3 +68,13 @@ void Fortran::lower::genStopStatement(
6868
builder.create<fir::CallOp>(loc, callee, operands);
6969
genUnreachable(builder, loc);
7070
}
71+
72+
void Fortran::lower::genPauseStatement(
73+
Fortran::lower::AbstractConverter &converter,
74+
const Fortran::parser::PauseStmt &) {
75+
fir::FirOpBuilder &builder = converter.getFirOpBuilder();
76+
mlir::Location loc = converter.getCurrentLocation();
77+
mlir::FuncOp callee =
78+
fir::runtime::getRuntimeFunc<mkRTKey(PauseStatement)>(loc, builder);
79+
builder.create<fir::CallOp>(loc, callee, llvm::None);
80+
}

flang/test/Lower/pause-statement.f90

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
! RUN: bbc %s -emit-fir --canonicalize -o - | FileCheck %s
2+
3+
! CHECK-LABEL pause_test
4+
subroutine pause_test()
5+
! CHECK: fir.call @_Fortran{{.*}}PauseStatement()
6+
! CHECK-NEXT: return
7+
pause
8+
end subroutine

0 commit comments

Comments
 (0)