| ! RUN: bbc %s -o - | FileCheck %s |
| |
| ! CHECK-LABEL: func @_QPformatassign |
| subroutine formatAssign(flag1, flag2, flag3) |
| real :: pi |
| integer :: label |
| logical :: flag1, flag2, flag3 |
| |
| ! CHECK-DAG: %[[ONE:.*]] = arith.constant 100 : i32 |
| ! CHECK-DAG: %[[TWO:.*]] = arith.constant 200 : i32 |
| if (flag1) then |
| assign 100 to label |
| else |
| assign 200 to label |
| end if |
| |
| ! CHECK: cond_br %{{.*}}, ^bb[[BLK1:.*]], ^bb[[BLK2:.*]] |
| ! CHECK: ^bb[[BLK1]]: |
| ! CHECK: fir.store %[[ONE]] |
| ! CHECK: br ^bb[[END_BLOCK:.*]] |
| ! CHECK: ^bb[[BLK2]]: |
| ! CHECK: fir.store %[[TWO]] |
| ! CHECK: br ^bb[[END_BLOCK]] |
| ! CHECK: ^bb[[END_BLOCK]] |
| ! CHECK: fir.call @{{.*}}ReportFatalUserError |
| ! CHECK: fir.unreachable |
| ! CHECK: fir.call @{{.*}}BeginExternalFormattedOutput |
| ! CHECK: fir.call @{{.*}}OutputAscii |
| ! CHECK: fir.call @{{.*}}OutputReal32 |
| ! CHECK: fir.call @{{.*}}EndIoStatement |
| pi = 3.141592653589 |
| write(*, label) " PI=", pi |
| ! CHECK: fir.call @{{.*}}ReportFatalUserError |
| ! CHECK: fir.unreachable |
| ! CHECK: fir.call @{{.*}}BeginExternalFormattedOutput |
| ! CHECK: fir.call @{{.*}}OutputAscii |
| ! CHECK: fir.call @{{.*}}OutputReal32 |
| ! CHECK: fir.call @{{.*}}EndIoStatement |
| if (flag2) write(*, label) "2PI=", 2*pi |
| if (flag1 .and. flag2 .and. flag3) then |
| assign 100 to label |
| else |
| assign 200 to label |
| end if |
| if (flag3) then |
| ! CHECK: fir.call @{{.*}}ReportFatalUserError |
| ! CHECK: fir.unreachable |
| ! CHECK: fir.call @{{.*}}BeginExternalFormattedOutput |
| ! CHECK: fir.call @{{.*}}OutputAscii |
| ! CHECK: fir.call @{{.*}}OutputReal32 |
| ! CHECK: fir.call @{{.*}}EndIoStatement |
| write(*, label) "3PI=", 3*pi |
| endif |
| |
| 100 format (A, F10.3) |
| 200 format (A,E8.1) |
| 300 format (A, E4.2) |
| |
| end subroutine |
| |
| ! CHECK-LABEL: func @_QQmain |
| call formatAssign(.true., .true., .true.) |
| print* |
| call formatAssign(.true., .false., .true.) |
| end |