xref: /llvm-project/flang/test/Lower/format-statement.f90 (revision 1fd72321a48d76ae884adb132a109817eee981a0)
1d8222d91SValentin Clement! RUN: bbc %s -o - | FileCheck %s
2d8222d91SValentin Clement
3d8222d91SValentin Clement! CHECK-LABEL: func @_QPformatassign
4d8222d91SValentin Clementsubroutine formatAssign(flag1, flag2, flag3)
5d8222d91SValentin Clement    real :: pi
6d8222d91SValentin Clement    integer :: label
7d8222d91SValentin Clement    logical :: flag1, flag2, flag3
8d8222d91SValentin Clement
9d8222d91SValentin Clement    ! CHECK-DAG: %[[ONE:.*]] = arith.constant 100 : i32
10d8222d91SValentin Clement    ! CHECK-DAG: %[[TWO:.*]] = arith.constant 200 : i32
11d8222d91SValentin Clement    if (flag1) then
12d8222d91SValentin Clement       assign 100 to label
13d8222d91SValentin Clement    else
14d8222d91SValentin Clement       assign 200 to label
15d8222d91SValentin Clement    end if
16d8222d91SValentin Clement
17d8222d91SValentin Clement    ! CHECK: cond_br %{{.*}}, ^bb[[BLK1:.*]], ^bb[[BLK2:.*]]
18d8222d91SValentin Clement    ! CHECK: ^bb[[BLK1]]:
19d8222d91SValentin Clement    ! CHECK: fir.store %[[ONE]]
20d8222d91SValentin Clement    ! CHECK: br ^bb[[END_BLOCK:.*]]
21d8222d91SValentin Clement    ! CHECK: ^bb[[BLK2]]:
22d8222d91SValentin Clement    ! CHECK: fir.store %[[TWO]]
23d8222d91SValentin Clement    ! CHECK: br ^bb[[END_BLOCK]]
24d8222d91SValentin Clement    ! CHECK: ^bb[[END_BLOCK]]
25*1fd72321SV Donaldson    ! CHECK: fir.call @{{.*}}ReportFatalUserError
26*1fd72321SV Donaldson    ! CHECK: fir.unreachable
27d8222d91SValentin Clement    ! CHECK: fir.call @{{.*}}BeginExternalFormattedOutput
28d8222d91SValentin Clement    ! CHECK: fir.call @{{.*}}OutputAscii
29d8222d91SValentin Clement    ! CHECK: fir.call @{{.*}}OutputReal32
30d8222d91SValentin Clement    ! CHECK: fir.call @{{.*}}EndIoStatement
31d8222d91SValentin Clement    pi = 3.141592653589
32d8222d91SValentin Clement    write(*, label) " PI=", pi
33*1fd72321SV Donaldson    ! CHECK: fir.call @{{.*}}ReportFatalUserError
34*1fd72321SV Donaldson    ! CHECK: fir.unreachable
35d8222d91SValentin Clement    ! CHECK: fir.call @{{.*}}BeginExternalFormattedOutput
36d8222d91SValentin Clement    ! CHECK: fir.call @{{.*}}OutputAscii
37d8222d91SValentin Clement    ! CHECK: fir.call @{{.*}}OutputReal32
38d8222d91SValentin Clement    ! CHECK: fir.call @{{.*}}EndIoStatement
39d8222d91SValentin Clement    if (flag2) write(*, label) "2PI=", 2*pi
40d8222d91SValentin Clement    if (flag1 .and. flag2 .and. flag3) then
41d8222d91SValentin Clement       assign 100 to label
42d8222d91SValentin Clement    else
43d8222d91SValentin Clement       assign 200 to label
44d8222d91SValentin Clement    end if
45d8222d91SValentin Clement    if (flag3) then
46*1fd72321SV Donaldson      ! CHECK: fir.call @{{.*}}ReportFatalUserError
47*1fd72321SV Donaldson      ! CHECK: fir.unreachable
48d8222d91SValentin Clement      ! CHECK: fir.call @{{.*}}BeginExternalFormattedOutput
49d8222d91SValentin Clement      ! CHECK: fir.call @{{.*}}OutputAscii
50d8222d91SValentin Clement      ! CHECK: fir.call @{{.*}}OutputReal32
51d8222d91SValentin Clement      ! CHECK: fir.call @{{.*}}EndIoStatement
52d8222d91SValentin Clement      write(*, label) "3PI=", 3*pi
53d8222d91SValentin Clement    endif
54d8222d91SValentin Clement
55d8222d91SValentin Clement100 format (A, F10.3)
56d8222d91SValentin Clement200 format (A,E8.1)
57d8222d91SValentin Clement300 format (A, E4.2)
58d8222d91SValentin Clement
59d8222d91SValentin Clementend subroutine
60d8222d91SValentin Clement
61d8222d91SValentin Clement! CHECK-LABEL: func @_QQmain
62d8222d91SValentin Clement  call formatAssign(.true., .true., .true.)
63d8222d91SValentin Clement  print*
64d8222d91SValentin Clement  call formatAssign(.true., .false., .true.)
65d8222d91SValentin Clementend
66