fortran66のブログ

fortran について書きます。

メモ帳 flang llvm 解説記事

斯様な記事が出ていますが、コンパイラドライバの解説のようで煩雑です。

Walk-through flang – Part 1 | Think In Geek
Walk-through flang – Part 2 | Think In Geek
Walk-through flang – Part 3 | Think In Geek
Walk-through flang – Part 4 | Think In Geek

flang 実行例

github.com

flang では、代入時の reallocation は、F95 的振る舞いがデフォルト設定のようです。自動 reallocation のためには -Mallocatable=03 のオプションが必要です。 

プログラム例

パスカルの三角形の偶奇性によりシェルピンスキーの三角形を書きます。

    program pascal
      implicit none
      integer, parameter :: n = 32
      integer, allocatable :: pas(:)
      integer :: i
      character (len = 132) :: fmt
      pas = [1]
      do i = 1, n
        write(fmt, *) '(t', n - i + 1, ', *(i2))'
        print fmt, mod(pas, 2)
        pas = [pas, 0] + [0, pas]
      end do
    end program pascal
O@VM10:~$ flang -Mallocatable=03 pascal.f90
O@VM10:~$ ./a.out
                                1
                               1 1
                              1 0 1
                             1 1 1 1
                            1 0 0 0 1
                           1 1 0 0 1 1
                          1 0 1 0 1 0 1
                         1 1 1 1 1 1 1 1
                        1 0 0 0 0 0 0 0 1
                       1 1 0 0 0 0 0 0 1 1
                      1 0 1 0 0 0 0 0 1 0 1
                     1 1 1 1 0 0 0 0 1 1 1 1
                    1 0 0 0 1 0 0 0 1 0 0 0 1
                   1 1 0 0 1 1 0 0 1 1 0 0 1 1
                  1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
                 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
                1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
               1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
              1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
             1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
            1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1
           1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1
          1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1
         1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
        1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
       1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
      1 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1
     1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
    1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1
   1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
  1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1