1! RUN: bbc %s -o "-" -emit-fir -hlfir=false | FileCheck %s 2 3subroutine sub1() 4end 5! CHECK-LABEL: func @_QPsub1() 6 7subroutine sub2() 8 call sub1() 9end 10 11! CHECK-LABEL: func @_QPsub2() 12! CHECK: fir.call @_QPsub1() {{.*}}: () -> () 13 14subroutine sub3(a, b) 15 integer :: a 16 real :: b 17end 18 19! CHECK-LABEL: func @_QPsub3( 20! CHECK-SAME: %{{.*}}: !fir.ref<i32> {fir.bindc_name = "a"}, 21! CHECK-SAME: %{{.*}}: !fir.ref<f32> {fir.bindc_name = "b"}) 22 23subroutine sub4() 24 call sub3(2, 3.0) 25end 26 27! CHECK-LABEL: func @_QPsub4() { 28! CHECK-DAG: %[[REAL_VALUE:.*]] = fir.alloca f32 {adapt.valuebyref} 29! CHECK-DAG: %[[INT_VALUE:.*]] = fir.alloca i32 {adapt.valuebyref} 30! CHECK: %[[C2:.*]] = arith.constant 2 : i32 31! CHECK: fir.store %[[C2]] to %[[INT_VALUE]] : !fir.ref<i32> 32! CHECK: %[[C3:.*]] = arith.constant 3.000000e+00 : f32 33! CHECK: fir.store %[[C3]] to %[[REAL_VALUE]] : !fir.ref<f32> 34! CHECK: fir.call @_QPsub3(%[[INT_VALUE]], %[[REAL_VALUE]]) {{.*}}: (!fir.ref<i32>, !fir.ref<f32>) -> () 35 36subroutine call_fct1() 37 real :: a, b, c 38 c = fct1(a, b) 39end 40 41! CHECK-LABEL: func @_QPcall_fct1() 42! CHECK: %[[A:.*]] = fir.alloca f32 {bindc_name = "a", uniq_name = "_QFcall_fct1Ea"} 43! CHECK: %[[B:.*]] = fir.alloca f32 {bindc_name = "b", uniq_name = "_QFcall_fct1Eb"} 44! CHECK: %[[C:.*]] = fir.alloca f32 {bindc_name = "c", uniq_name = "_QFcall_fct1Ec"} 45! CHECK: %[[RES:.*]] = fir.call @_QPfct1(%[[A]], %[[B]]) {{.*}}: (!fir.ref<f32>, !fir.ref<f32>) -> f32 46! CHECK: fir.store %[[RES]] to %[[C]] : !fir.ref<f32> 47! CHECK: return 48 49! CHECK: func private @_QPfct1(!fir.ref<f32>, !fir.ref<f32>) -> f32 50