[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 <eschweitz@nvidia.com>
Co-authored-by: Jean Perier <jperier@nvidia.com>
This commit is contained in:
Valentin Clement 2022-02-02 08:15:26 +01:00
parent e80c52986e
commit db01b123d0
No known key found for this signature in database
GPG Key ID: 086D54783C928776
3 changed files with 19 additions and 1 deletions

View File

@ -547,7 +547,7 @@ private:
} }
void genFIR(const Fortran::parser::PauseStmt &stmt) { void genFIR(const Fortran::parser::PauseStmt &stmt) {
TODO(toLocation(), "PauseStmt lowering"); genPauseStatement(*this, stmt);
} }
void genFIR(const Fortran::parser::FailImageStmt &stmt) { void genFIR(const Fortran::parser::FailImageStmt &stmt) {

View File

@ -68,3 +68,13 @@ void Fortran::lower::genStopStatement(
builder.create<fir::CallOp>(loc, callee, operands); builder.create<fir::CallOp>(loc, callee, operands);
genUnreachable(builder, loc); genUnreachable(builder, loc);
} }
void Fortran::lower::genPauseStatement(
Fortran::lower::AbstractConverter &converter,
const Fortran::parser::PauseStmt &) {
fir::FirOpBuilder &builder = converter.getFirOpBuilder();
mlir::Location loc = converter.getCurrentLocation();
mlir::FuncOp callee =
fir::runtime::getRuntimeFunc<mkRTKey(PauseStatement)>(loc, builder);
builder.create<fir::CallOp>(loc, callee, llvm::None);
}

View File

@ -0,0 +1,8 @@
! RUN: bbc %s -emit-fir --canonicalize -o - | FileCheck %s
! CHECK-LABEL pause_test
subroutine pause_test()
! CHECK: fir.call @_Fortran{{.*}}PauseStatement()
! CHECK-NEXT: return
pause
end subroutine