96 lines · plain
1! RUN: bbc -emit-fir -hlfir=false -o - %s | FileCheck %s2 3! CHECK-LABEL: func @_QQmain4program p5 ! 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) = 33312 ! CHECK: fir.load [[N]]13 ! CHECK: addi {{.*}} %c514 ! CHECK: fir.store %{{[0-9]*}} to [[B:%[0-9]+]]15 ! CHECK: [[C:%[0-9]+]] = fir.coordinate_of [[T]]16 ! CHECK: fir.call @_QPfoo17 ! 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]*}}, %c121 ! CHECK: fir.store %{{[0-9]*}} to [[N]]22 a = a + 123 ! CHECK: fir.load [[C]]24 ! CHECK: addi %{{[0-9]*}}, %c125 ! CHECK: fir.store %{{[0-9]*}} to [[C]]26 c = c + 127 ! CHECK: fir.load [[N]]28 ! CHECK: addi %{{[0-9]*}}, %c129 ! CHECK: fir.store %{{[0-9]*}} to [[N]]30 n = n + 131 ! 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 738 end associate39 40 call nest41 42 do i=1,443 associate (x=>i)44 ! CHECK: [[IVAL:%[0-9]+]] = fir.load [[I]] : !fir.ref<i32>45 ! CHECK: [[TWO:%.*]] = arith.constant 2 : i3246 ! CHECK: arith.cmpi eq, [[IVAL]], [[TWO]] : i3247 ! CHECK: ^bb48 if (x==2) goto 949 ! CHECK: [[IVAL:%[0-9]+]] = fir.load [[I]] : !fir.ref<i32>50 ! CHECK: [[THREE:%.*]] = arith.constant 3 : i3251 ! CHECK: arith.cmpi eq, [[IVAL]], [[THREE]] : i3252 ! CHECK: ^bb53 ! CHECK: fir.call @_FortranAStopStatementText54 ! CHECK: fir.unreachable55 ! CHECK: ^bb56 if (x==3) stop 'Halt'57 ! CHECK: fir.call @_FortranAioOutputAscii58 print*, "ok"59 9 end associate60 enddo61end62 63! CHECK-LABEL: func @_QPfoo64integer function foo(x)65 integer x66 integer, save :: i = 067 i = i + x68 foo = i69end function foo70 71! CHECK-LABEL: func @_QPnest(72subroutine nest73 integer, parameter :: n = 1074 integer :: a(5), b(n)75 associate (s => sequence(size(a)))76 a = s77 associate(t => sequence(n))78 b = t79 ! 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 984 end associate85 a = a * a86 end associate87 ! CHECK: br [[BB3]]88 ! CHECK: [[BB3]]:899 print *, sum(a), sum(b) ! expect: 55 5590contains91 function sequence(n)92 integer sequence(n)93 sequence = [(i,i=1,n)]94 end function95end subroutine nest96