1! RUN: bbc -emit-fir -hlfir=false -o - %s | FileCheck %s 2 3! CHECK-LABEL: func @_QQmain 4program p 5 ! CHECK-DAG: [[I:%[0-9]+]] = fir.alloca i32 {{{.*}}uniq_name = "_QFEi"} 6 ! CHECK-DAG: [[N:%[0-9]+]] = fir.alloca i32 {{{.*}}uniq_name = "_QFEn"} 7 ! CHECK: [[T:%[0-9]+]] = fir.alloca !fir.array<3xi32> {bindc_name = "t", uniq_name = "_QFEt"} 8 integer :: n, foo, t(3) 9 ! CHECK: [[N]] 10 ! CHECK-COUNT-3: fir.coordinate_of [[T]] 11 n = 100; t(1) = 111; t(2) = 222; t(3) = 333 12 ! CHECK: fir.load [[N]] 13 ! CHECK: addi {{.*}} %c5 14 ! CHECK: fir.store %{{[0-9]*}} to [[B:%[0-9]+]] 15 ! CHECK: [[C:%[0-9]+]] = fir.coordinate_of [[T]] 16 ! CHECK: fir.call @_QPfoo 17 ! CHECK: fir.store %{{[0-9]*}} to [[D:%[0-9]+]] 18 associate (a => n, b => n+5, c => t(2), d => foo(7)) 19 ! CHECK: fir.load [[N]] 20 ! CHECK: addi %{{[0-9]*}}, %c1 21 ! CHECK: fir.store %{{[0-9]*}} to [[N]] 22 a = a + 1 23 ! CHECK: fir.load [[C]] 24 ! CHECK: addi %{{[0-9]*}}, %c1 25 ! CHECK: fir.store %{{[0-9]*}} to [[C]] 26 c = c + 1 27 ! CHECK: fir.load [[N]] 28 ! CHECK: addi %{{[0-9]*}}, %c1 29 ! CHECK: fir.store %{{[0-9]*}} to [[N]] 30 n = n + 1 31 ! CHECK: fir.load [[N]] 32 ! CHECK: fir.embox [[T]] 33 ! CHECK: fir.load [[N]] 34 ! CHECK: fir.load [[B]] 35 ! CHECK: fir.load [[C]] 36 ! CHECK: fir.load [[D]] 37 print*, n, t, a, b, c, d ! expect: 102 111 223 333 102 105 223 7 38 end associate 39 40 call nest 41 42 do i=1,4 43 associate (x=>i) 44 ! CHECK: [[IVAL:%[0-9]+]] = fir.load [[I]] : !fir.ref<i32> 45 ! CHECK: [[TWO:%.*]] = arith.constant 2 : i32 46 ! CHECK: arith.cmpi eq, [[IVAL]], [[TWO]] : i32 47 ! CHECK: ^bb 48 if (x==2) goto 9 49 ! CHECK: [[IVAL:%[0-9]+]] = fir.load [[I]] : !fir.ref<i32> 50 ! CHECK: [[THREE:%.*]] = arith.constant 3 : i32 51 ! CHECK: arith.cmpi eq, [[IVAL]], [[THREE]] : i32 52 ! CHECK: ^bb 53 ! CHECK: fir.call @_FortranAStopStatementText 54 ! CHECK: fir.unreachable 55 ! CHECK: ^bb 56 if (x==3) stop 'Halt' 57 ! CHECK: fir.call @_FortranAioOutputAscii 58 print*, "ok" 59 9 end associate 60 enddo 61end 62 63! CHECK-LABEL: func @_QPfoo 64integer function foo(x) 65 integer x 66 integer, save :: i = 0 67 i = i + x 68 foo = i 69end function foo 70 71! CHECK-LABEL: func @_QPnest( 72subroutine nest 73 integer, parameter :: n = 10 74 integer :: a(5), b(n) 75 associate (s => sequence(size(a))) 76 a = s 77 associate(t => sequence(n)) 78 b = t 79 ! CHECK: cond_br %{{.*}}, [[BB1:\^bb[0-9]]], [[BB2:\^bb[0-9]]] 80 ! CHECK: [[BB1]]: 81 ! CHECK: br [[BB3:\^bb[0-9]]] 82 ! CHECK: [[BB2]]: 83 if (a(1) > b(1)) goto 9 84 end associate 85 a = a * a 86 end associate 87 ! CHECK: br [[BB3]] 88 ! CHECK: [[BB3]]: 899 print *, sum(a), sum(b) ! expect: 55 55 90contains 91 function sequence(n) 92 integer sequence(n) 93 sequence = [(i,i=1,n)] 94 end function 95end subroutine nest 96