[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:
		
							parent
							
								
									e80c52986e
								
							
						
					
					
						commit
						db01b123d0
					
				| 
						 | 
				
			
			@ -547,7 +547,7 @@ private:
 | 
			
		|||
  }
 | 
			
		||||
 | 
			
		||||
  void genFIR(const Fortran::parser::PauseStmt &stmt) {
 | 
			
		||||
    TODO(toLocation(), "PauseStmt lowering");
 | 
			
		||||
    genPauseStatement(*this, stmt);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void genFIR(const Fortran::parser::FailImageStmt &stmt) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -68,3 +68,13 @@ void Fortran::lower::genStopStatement(
 | 
			
		|||
  builder.create<fir::CallOp>(loc, callee, operands);
 | 
			
		||||
  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);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
		Loading…
	
		Reference in New Issue