brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.0 KiB · f6fae11 Raw
162 lines · plain
1! RUN: bbc --use-desc-for-alloc=false -emit-fir -hlfir=false %s -o - | FileCheck %s2 3! CHECK-LABEL: system_clock_test4subroutine system_clock_test()5  integer(4) :: c6  integer(8) :: m7  real :: r8  ! CHECK-DAG: %[[c:.*]] = fir.alloca i32 {bindc_name = "c"9  ! CHECK-DAG: %[[m:.*]] = fir.alloca i64 {bindc_name = "m"10  ! CHECK-DAG: %[[r:.*]] = fir.alloca f32 {bindc_name = "r"11  ! CHECK: %[[c4:.*]] = arith.constant 4 : i3212  ! CHECK: %[[Count:.*]] = fir.call @_FortranASystemClockCount(%[[c4]]) {{.*}}: (i32) -> i6413  ! CHECK: %[[Count1:.*]] = fir.convert %[[Count]] : (i64) -> i3214  ! CHECK: fir.store %[[Count1]] to %[[c]] : !fir.ref<i32>15  ! CHECK: %[[c8:.*]] = arith.constant 8 : i3216  ! CHECK: %[[Rate:.*]] = fir.call @_FortranASystemClockCountRate(%[[c8]]) {{.*}}: (i32) -> i6417  ! CHECK: %[[Rate1:.*]] = fir.convert %[[Rate]] : (i64) -> f3218  ! CHECK: fir.store %[[Rate1]] to %[[r]] : !fir.ref<f32>19  ! CHECK: %[[c8_2:.*]] = arith.constant 8 : i3220  ! CHECK: %[[Max:.*]] = fir.call @_FortranASystemClockCountMax(%[[c8_2]]) {{.*}}: (i32) -> i6421  ! CHECK: fir.store %[[Max]] to %[[m]] : !fir.ref<i64>22  call system_clock(c, r, m)23! print*, c, r, m24  ! CHECK-NOT: fir.call25  ! CHECK: %[[c8_3:.*]] = arith.constant 8 : i3226  ! CHECK: %[[Rate:.*]] = fir.call @_FortranASystemClockCountRate(%[[c8_3]]) {{.*}}: (i32) -> i6427  ! CHECK: fir.store %[[Rate]] to %[[m]] : !fir.ref<i64>28  call system_clock(count_rate=m)29  ! CHECK-NOT: fir.call30! print*, m31end subroutine32 33! CHECK-LABEL: @_QPss34subroutine ss(count)35  ! CHECK:   %[[V_1:[0-9]+]] = fir.alloca !fir.heap<i64> {uniq_name = "_QFssEcount_max.addr"}36  ! CHECK:   %[[V_2:[0-9]+]] = fir.zero_bits !fir.heap<i64>37  ! CHECK:   fir.store %[[V_2]] to %[[V_1]] : !fir.ref<!fir.heap<i64>>38  ! CHECK:   %[[V_4:[0-9]+]] = fir.alloca !fir.ptr<i64> {uniq_name = "_QFssEcount_rate.addr"}39  ! CHECK:   %[[V_5:[0-9]+]] = fir.zero_bits !fir.ptr<i64>40  ! CHECK:   fir.store %[[V_5]] to %[[V_4]] : !fir.ref<!fir.ptr<i64>>41  ! CHECK:   %[[V_6:[0-9]+]] = fir.alloca i64 {bindc_name = "count_rate_", fir.target, uniq_name = "_QFssEcount_rate_"}42  ! CHECK:   %[[V_7:[0-9]+]] = fir.convert %[[V_6]] : (!fir.ref<i64>) -> !fir.ptr<i64>43  ! CHECK:   fir.store %[[V_7]] to %[[V_4]] : !fir.ref<!fir.ptr<i64>>44  ! CHECK:   %[[V_8:[0-9]+]] = fir.allocmem i64 {fir.must_be_heap = true, uniq_name = "_QFssEcount_max.alloc"}45  ! CHECK:   fir.store %[[V_8]] to %[[V_1]] : !fir.ref<!fir.heap<i64>>46  ! CHECK:   %[[V_9:[0-9]+]] = fir.load %[[V_4]] : !fir.ref<!fir.ptr<i64>>47  ! CHECK:   %[[V_10:[0-9]+]] = fir.load %[[V_1]] : !fir.ref<!fir.heap<i64>>48  ! CHECK:   %[[V_11:[0-9]+]] = fir.is_present %arg0 : (!fir.ref<i64>) -> i149  ! CHECK:   fir.if %[[V_11]] {50  ! CHECK:     %[[V_29:[0-9]+]] = fir.call @_FortranASystemClockCount(%c8{{.*}}_i32) {{.*}}: (i32) -> i6451  ! CHECK:     fir.store %[[V_29]] to %arg0 : !fir.ref<i64>52  ! CHECK:   }53  ! CHECK:   %[[V_12:[0-9]+]] = fir.convert %[[V_9]] : (!fir.ptr<i64>) -> i6454  ! CHECK:   %[[V_13:[0-9]+]] = arith.cmpi ne, %[[V_12]], %c0{{.*}} : i6455  ! CHECK:   fir.if %[[V_13]] {56  ! CHECK:     %[[V_29:[0-9]+]] = fir.call @_FortranASystemClockCountRate(%c8{{.*}}_i32) {{.*}}: (i32) -> i6457  ! CHECK:     fir.store %[[V_29]] to %[[V_9]] : !fir.ptr<i64>58  ! CHECK:   }59  ! CHECK:   %[[V_14:[0-9]+]] = fir.convert %[[V_10]] : (!fir.heap<i64>) -> i6460  ! CHECK:   %[[V_15:[0-9]+]] = arith.cmpi ne, %[[V_14]], %c0{{.*}} : i6461  ! CHECK:   fir.if %[[V_15]] {62  ! CHECK:     %[[V_29]] = fir.call @_FortranASystemClockCountMax(%c8{{.*}}_i32) {{.*}}: (i32) -> i6463  ! CHECK:     fir.store %[[V_29]] to %[[V_10]] : !fir.heap<i64>64  ! CHECK:   }65  ! CHECK:   %[[V_16:[0-9]+]] = fir.is_present %arg0 : (!fir.ref<i64>) -> i166  ! CHECK:   fir.if %[[V_16]] {67  ! CHECK:     %[[V_31:[0-9]+]] = fir.call @_FortranAioBeginExternalListOutput68  ! CHECK:     %[[V_32:[0-9]+]] = fir.load %arg0 : !fir.ref<i64>69  ! CHECK:     %[[V_33:[0-9]+]] = fir.call @_FortranAioOutputInteger64(%[[V_31]], %[[V_32]]) {{.*}}: (!fir.ref<i8>, i64) -> i170  ! CHECK:     %[[V_34:[0-9]+]] = fir.load %[[V_4]] : !fir.ref<!fir.ptr<i64>>71  ! CHECK:     %[[V_35:[0-9]+]] = fir.load %[[V_34]] : !fir.ptr<i64>72  ! CHECK:     %[[V_36:[0-9]+]] = fir.call @_FortranAioOutputInteger64(%[[V_31]], %[[V_35]]) {{.*}}: (!fir.ref<i8>, i64) -> i173  ! CHECK:     %[[V_37:[0-9]+]] = fir.load %[[V_1]] : !fir.ref<!fir.heap<i64>>74  ! CHECK:     %[[V_38:[0-9]+]] = fir.load %[[V_37]] : !fir.heap<i64>75  ! CHECK:     %[[V_39:[0-9]+]] = fir.call @_FortranAioOutputInteger64(%[[V_31]], %[[V_38]]) {{.*}}: (!fir.ref<i8>, i64) -> i176  ! CHECK:     %[[V_40:[0-9]+]] = fir.call @_FortranAioEndIoStatement(%[[V_31]]) {{.*}}: (!fir.ref<i8>) -> i3277  ! CHECK:   } else {78  ! CHECK:     %[[V_29:[0-9]+]] = fir.load %[[V_4]] : !fir.ref<!fir.ptr<i64>>79  ! CHECK:     %[[V_30:[0-9]+]] = fir.load %[[V_1]] : !fir.ref<!fir.heap<i64>>80  ! CHECK:     %[[V_31:[0-9]+]] = fir.convert %[[V_29]] : (!fir.ptr<i64>) -> i6481  ! CHECK:     %[[V_32:[0-9]+]] = arith.cmpi ne, %[[V_31]], %c0{{.*}} : i6482  ! CHECK:     fir.if %[[V_32]] {83  ! CHECK:       %[[V_45:[0-9]+]] = fir.call @_FortranASystemClockCountRate(%c8{{.*}}_i32) {{.*}}: (i32) -> i6484  ! CHECK:       fir.store %[[V_45]] to %[[V_29]] : !fir.ptr<i64>85  ! CHECK:     }86  ! CHECK:     %[[V_33:[0-9]+]] = fir.convert %[[V_30]] : (!fir.heap<i64>) -> i6487  ! CHECK:     %[[V_34:[0-9]+]] = arith.cmpi ne, %[[V_33]], %c0{{.*}} : i6488  ! CHECK:     fir.if %[[V_34]] {89  ! CHECK:       %[[V_45]] = fir.call @_FortranASystemClockCountMax(%c8{{.*}}_i32) {{.*}}: (i32) -> i6490  ! CHECK:       fir.store %[[V_45]] to %[[V_30]] : !fir.heap<i64>91  ! CHECK:     }92  ! CHECK:     %[[V_37:[0-9]+]] = fir.call @_FortranAioBeginExternalListOutput93  ! CHECK:     %[[V_38:[0-9]+]] = fir.load %[[V_4]] : !fir.ref<!fir.ptr<i64>>94  ! CHECK:     %[[V_39:[0-9]+]] = fir.load %[[V_38]] : !fir.ptr<i64>95  ! CHECK:     %[[V_40:[0-9]+]] = fir.call @_FortranAioOutputInteger64(%[[V_37]], %[[V_39]]) {{.*}}: (!fir.ref<i8>, i64) -> i196  ! CHECK:     %[[V_41:[0-9]+]] = fir.load %[[V_1]] : !fir.ref<!fir.heap<i64>>97  ! CHECK:     %[[V_42:[0-9]+]] = fir.load %[[V_41]] : !fir.heap<i64>98  ! CHECK:     %[[V_43:[0-9]+]] = fir.call @_FortranAioOutputInteger64(%[[V_37]], %[[V_42]]) {{.*}}: (!fir.ref<i8>, i64) -> i199  ! CHECK:     %[[V_44:[0-9]+]] = fir.call @_FortranAioEndIoStatement(%[[V_37]]) {{.*}}: (!fir.ref<i8>) -> i32100  ! CHECK:   }101  ! CHECK:   %[[V_17:[0-9]+]] = fir.is_present %arg0 : (!fir.ref<i64>) -> i1102  ! CHECK:   fir.if %[[V_17]] {103  ! CHECK:     %[[C_0:c[0-9a-z_]+]] = arith.constant 0 : i64104  ! CHECK:     fir.store %[[C_0]] to %arg0 : !fir.ref<i64>105  ! CHECK:   }106  ! CHECK:   %[[V_18:[0-9]+]] = fir.zero_bits !fir.ptr<i64>107  ! CHECK:   fir.store %[[V_18]] to %[[V_4]] : !fir.ref<!fir.ptr<i64>>108  ! CHECK:   %[[V_19:[0-9]+]] = fir.load %[[V_1]] : !fir.ref<!fir.heap<i64>>109  ! CHECK:   fir.freemem %[[V_19]] : !fir.heap<i64>110  ! CHECK:   %[[V_20:[0-9]+]] = fir.zero_bits !fir.heap<i64>111  ! CHECK:   fir.store %[[V_20]] to %[[V_1]] : !fir.ref<!fir.heap<i64>>112  ! CHECK:   %[[V_21:[0-9]+]] = fir.load %[[V_4]] : !fir.ref<!fir.ptr<i64>>113  ! CHECK:   %[[V_22:[0-9]+]] = fir.load %[[V_1]] : !fir.ref<!fir.heap<i64>>114  ! CHECK:   %[[V_23:[0-9]+]] = fir.is_present %arg0 : (!fir.ref<i64>) -> i1115  ! CHECK:   fir.if %[[V_23]] {116  ! CHECK:     %[[V_29]] = fir.call @_FortranASystemClockCount(%c8{{.*}}_i32) {{.*}}: (i32) -> i64117  ! CHECK:     fir.store %[[V_29]] to %arg0 : !fir.ref<i64>118  ! CHECK:   }119  ! CHECK:   %[[V_24:[0-9]+]] = fir.convert %[[V_21]] : (!fir.ptr<i64>) -> i64120  ! CHECK:   %[[V_25:[0-9]+]] = arith.cmpi ne, %[[V_24]], %c0{{.*}} : i64121  ! CHECK:   fir.if %[[V_25]] {122  ! CHECK:     %[[V_29]] = fir.call @_FortranASystemClockCountRate(%c8{{.*}}_i32) {{.*}}: (i32) -> i64123  ! CHECK:     fir.store %[[V_29]] to %[[V_21]] : !fir.ptr<i64>124  ! CHECK:   }125  ! CHECK:   %[[V_26:[0-9]+]] = fir.convert %[[V_22]] : (!fir.heap<i64>) -> i64126  ! CHECK:   %[[V_27:[0-9]+]] = arith.cmpi ne, %[[V_26]], %c0{{.*}} : i64127  ! CHECK:   fir.if %[[V_27]] {128  ! CHECK:     %[[V_29]] = fir.call @_FortranASystemClockCountMax(%c8{{.*}}_i32) {{.*}}: (i32) -> i64129  ! CHECK:     fir.store %[[V_29]] to %[[V_22]] : !fir.heap<i64>130  ! CHECK:   }131  ! CHECK:   %[[V_28:[0-9]+]] = fir.is_present %arg0 : (!fir.ref<i64>) -> i1132  ! CHECK:   fir.if %[[V_28]] {133  ! CHECK:     %[[V_31]] = fir.call @_FortranAioBeginExternalListOutput134  ! CHECK:     %[[V_32]] = fir.load %arg0 : !fir.ref<i64>135  ! CHECK:     %[[V_33]] = fir.call @_FortranAioOutputInteger64(%[[V_31]], %[[V_32]]) {{.*}}: (!fir.ref<i8>, i64) -> i1136  ! CHECK:     %[[V_34]] = fir.call @_FortranAioEndIoStatement(%[[V_31]]) {{.*}}: (!fir.ref<i8>) -> i32137  ! CHECK:   }138  ! CHECK:   return139  ! CHECK: }140 141  integer(8), optional :: count142  integer(8), target :: count_rate_143  integer(8), pointer :: count_rate144  integer(8), allocatable :: count_max145 146  count_rate => count_rate_147  allocate(count_max)148  call system_clock(count, count_rate, count_max)149  if (present(count)) then150    print*, count, count_rate, count_max151  else152    call system_clock(count_rate=count_rate, count_max=count_max)153    print*, count_rate, count_max154  endif155 156  if (present(count)) count = 0157  count_rate => null()158  deallocate(count_max)159  call system_clock(count, count_rate, count_max)160  if (present(count)) print*, count161end162