Slide 1

Slide 1 text

IMPLEMENTING FORTRAN STANDARDESE WITHIN LFORTRAN ROHIT GOSWAMI .and. ONDŘEJ ČERTÍK Created: 2021-09-24 Fri 01:14

Slide 2

Slide 2 text

BRIEF INTRODUCTION 3

Slide 3

Slide 3 text

HELLO! Find me here: Who? Rohit Goswami MInstP Doctoral Researcher, University of Iceland, Faculty of Physical Sciences https://rgoswami.me 4

Slide 4

Slide 4 text

LOGISTICS All contents are Slides are in presentations/fortranCon2021/gsocLFortran hosted on GitHub Questions are welcome anytime 5

Slide 5

Slide 5 text

LFORTRAN 7

Slide 6

Slide 6 text

INTRODUCTION Language Files Lines Code Comments Blanks C 3 1023 694 191 138 C Header 57 14237 11416 1041 1780 CMake 11 430 361 16 53 C++ 54 30745 26911 1560 2274 C++ Header 1 8938 8297 348 293 FORTRAN 20 1738 1344 174 220 Python 2 224 191 4 29 Total 148 57335 49214 3334 4787 8

Slide 7

Slide 7 text

STRUCTURE

Slide 8

Slide 8 text

FEATURES Runtime Libraries Pure Fortran | Impure ASR Guarantees compilation –> Wrappers Parser Currently almost all of F2018; including F77 LLVM Canonical backend, includes compile time evaluated expressions Jupyter Native execution as a kernel 10

Slide 9

Slide 9 text

REPRESENTATIONS 12

Slide 10

Slide 10 text

READING CODE I __attribute__((externally_visible)) main (integer(kind=4) argc, character(kind=1) * * argv) {integer(kind=4) D.3878; static integer(kind=4) options.1[7] = {2116, 4095, 0, 1, 1, 0, 31}; _gfortran_set_args (argc, argv); _gfortran_set_options (7, &options.1[0]); MAIN__ (); D.3878 = 0; return D.3878;} MAIN__ () {static integer(kind=4) i = 3; {struct __st_parameter_dt dt_parm.0; try {dt_parm.0.common.filename = &"hi.f90"[1]{lb: 1 sz: 1}; dt_parm.0.common.line = 3; dt_parm.0.common.flags = 128; dt_parm.0.common.unit = 6; _gfortran_st_write (&dt_parm.0); _gfortran_transfer_integer_write (&dt_parm.0, &i, 4); _gfortran_transfer_character_write (&dt_parm.0, &"Hello World"[1]{lb: 1 sz: 1}, 1 _gfortran_st_write_done (&dt_parm.0);} finally {dt_parm.0 = {CLOBBER};}}} GIMPLE is an internal gfortran representation… 13

Slide 11

Slide 11 text

READING CODE II AST on the left ASR on the right 14

Slide 12

Slide 12 text

READING CODE III program main integer :: i=3 print*, i, "Hello World" end program lfortran has a nicer intermediate structure conda create -n lf conda activate lf conda install lfortran \ -c conda-forge lfortran --show-asr hi.f90 15

Slide 13

Slide 13 text

FORTRAN AND STANDARDESE The ASR can be used to implement the standard verbatim 17

Slide 14

Slide 14 text

REAL DEFINITION

Slide 15

Slide 15 text

REAL ARGUMENTS if (func_name == "real") { if (args.n == 1) { ASR::expr_t* real_expr = args[0]; int real_kind = LFortran::ASRUtils::extract_kind_from_ttype_t (func_type); if (LFortran::ASR::is_a(*func_type)) { if (real_kind == 4){ float rr = ASR::down_cast (LFortran::ASRUtils::expr_value(real_expr))->m_r; value = ASR::down_cast (ASR::make_ConstantReal_t(al, x.base.base.loc, rr, func_type)); } else { double rr = ASR::down_cast (LFortran::ASRUtils::expr_value(real_expr))->m_r; value = ASR::down_cast (ASR::make_ConstantReal_t(al, x.base.base.loc, rr, func_type)); } } // TODO: Handle BOZ later } else { throw SemanticError("REAL must have only one argument", x.base.base.loc); } 19

Slide 16

Slide 16 text

INTEGER ARGUMENTS else if (LFortran::ASR::is_a(*func_type)) { if (real_kind == 4){ int64_t rv = ASR::down_cast( LFortran::ASRUtils::expr_value(real_expr))->m_n; float rr = static_cast(rv); value = ASR::down_cast (ASR::make_ConstantReal_t(al, x.base.base.loc, rr, func_type)); } else { double rr = static_cast(ASR::down_cast (LFortran::ASRUtils:: expr_value(real_expr))->m_n); value = ASR::down_cast (ASR::make_ConstantReal_t (al, x.base.base.loc, rr, func_type)); } } 20

Slide 17

Slide 17 text

CONCLUSIONS 22

Slide 18

Slide 18 text

OMITTED TOPICS Details here

Slide 19

Slide 19 text

THE END 25

Slide 20

Slide 20 text

ACKNOWLEDGEMENTS as my supervisor, as my co-supervisor, and my committee member at Los Alamos National Laboratory ( , and ) Family, pets, Groupmembers, audience Prof. Hannes Jónsson Prof. Birgir Hrafnkelsson Dr. Elvar Jonsson Dr. Ondřej Čertík Quansight Labs Dr. Ralf Gommers Dr. Melissa Weber Mendonça Dr. Pearu Peterson 26

Slide 21

Slide 21 text

THANKS! 27