1! RUN: bbc -emit-fir -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.address_of(@_QFEt) : !fir.ref<!fir.array<3xi32>> 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 associate (x=>i) 43 ! CHECK: [[IVAL:%[0-9]+]] = fir.load [[I]] : !fir.ref<i32> 44 ! CHECK: [[TWO:%.*]] = arith.constant 2 : i32 45 ! CHECK: arith.cmpi eq, [[IVAL]], [[TWO]] : i32 46 ! CHECK: ^bb 47 if (x==2) goto 9 48 ! CHECK: [[IVAL:%[0-9]+]] = fir.load [[I]] : !fir.ref<i32> 49 ! CHECK: [[THREE:%.*]] = arith.constant 3 : i32 50 ! CHECK: arith.cmpi eq, [[IVAL]], [[THREE]] : i32 51 ! CHECK: ^bb 52 ! CHECK: fir.call @_FortranAStopStatementText 53 ! CHECK: fir.unreachable 54 ! CHECK: ^bb 55 if (x==3) stop 'Halt' 56 ! CHECK: fir.call @_FortranAioOutputAscii 57 print*, "ok" 58 9 end associate 59end 60 61! CHECK-LABEL: func @_QPfoo 62integer function foo(x) 63 integer x 64 integer, save :: i = 0 65 i = i + x 66 foo = i 67end function foo 68 69! CHECK-LABEL: func @_QPnest( 70subroutine nest 71 integer, parameter :: n = 10 72 integer :: a(5), b(n) 73 associate (s => sequence(size(a))) 74 a = s 75 associate(t => sequence(n)) 76 b = t 77 ! CHECK: cond_br %{{.*}}, [[BB1:\^bb[0-9]]], [[BB2:\^bb[0-9]]] 78 ! CHECK: [[BB1]]: 79 ! CHECK: br [[BB3:\^bb[0-9]]] 80 ! CHECK: [[BB2]]: 81 if (a(1) > b(1)) goto 9 82 end associate 83 a = a * a 84 end associate 85 ! CHECK: br [[BB3]] 86 ! CHECK: [[BB3]]: 879 print *, sum(a), sum(b) ! expect: 55 55 88contains 89 function sequence(n) 90 integer sequence(n) 91 sequence = [(i,i=1,n)] 92 end function 93end subroutine nest 94