19a7b363eSSlava Zakharin! Check that the implied-do index value is converted to proper type. 2*f35f863aSjeanPerier! RUN: bbc -emit-fir -hlfir=false -o - %s | FileCheck %s 39a7b363eSSlava Zakharin 49a7b363eSSlava Zakharinfunction test1(k) 59a7b363eSSlava Zakharin integer*1 :: k 69a7b363eSSlava Zakharin integer*1 :: test1(4) 79a7b363eSSlava Zakharin test1 = ([(i*k, integer(8)::i=1,4)]) 89a7b363eSSlava Zakharinend function test1 99a7b363eSSlava Zakharin! CHECK-LABEL: func.func @_QPtest1( 109a7b363eSSlava Zakharin! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<i8> {fir.bindc_name = "k"}) -> !fir.array<4xi8> { 119a7b363eSSlava Zakharin! CHECK: %[[VAL_1:.*]] = fir.alloca index {bindc_name = ".buff.pos"} 129a7b363eSSlava Zakharin! CHECK: %[[VAL_2:.*]] = fir.alloca index {bindc_name = ".buff.size"} 139a7b363eSSlava Zakharin! CHECK: %[[VAL_3:.*]] = arith.constant 4 : index 149a7b363eSSlava Zakharin! CHECK: %[[VAL_4:.*]] = fir.alloca !fir.array<4xi8> {bindc_name = "test1", uniq_name = "_QFtest1Etest1"} 159a7b363eSSlava Zakharin! CHECK: %[[VAL_5:.*]] = fir.shape %[[VAL_3]] : (index) -> !fir.shape<1> 169a7b363eSSlava Zakharin! CHECK: %[[VAL_6:.*]] = fir.array_load %[[VAL_4]](%[[VAL_5]]) : (!fir.ref<!fir.array<4xi8>>, !fir.shape<1>) -> !fir.array<4xi8> 179a7b363eSSlava Zakharin! CHECK: %[[VAL_7:.*]] = arith.constant 0 : index 189a7b363eSSlava Zakharin! CHECK: fir.store %[[VAL_7]] to %[[VAL_1]] : !fir.ref<index> 199a7b363eSSlava Zakharin! CHECK: %[[VAL_8:.*]] = fir.allocmem !fir.array<4xi64> 209a7b363eSSlava Zakharin! CHECK: %[[VAL_9:.*]] = arith.constant 4 : index 219a7b363eSSlava Zakharin! CHECK: fir.store %[[VAL_9]] to %[[VAL_2]] : !fir.ref<index> 229a7b363eSSlava Zakharin! CHECK: %[[VAL_10:.*]] = arith.constant 1 : i64 239a7b363eSSlava Zakharin! CHECK: %[[VAL_11:.*]] = fir.convert %[[VAL_10]] : (i64) -> index 249a7b363eSSlava Zakharin! CHECK: %[[VAL_12:.*]] = arith.constant 4 : i64 259a7b363eSSlava Zakharin! CHECK: %[[VAL_13:.*]] = fir.convert %[[VAL_12]] : (i64) -> index 269a7b363eSSlava Zakharin! CHECK: %[[VAL_14:.*]] = arith.constant 1 : i64 279a7b363eSSlava Zakharin! CHECK: %[[VAL_15:.*]] = fir.convert %[[VAL_14]] : (i64) -> index 289a7b363eSSlava Zakharin! CHECK: %[[VAL_16:.*]] = fir.do_loop %[[VAL_17:.*]] = %[[VAL_11]] to %[[VAL_13]] step %[[VAL_15]] iter_args(%[[VAL_18:.*]] = %[[VAL_8]]) -> (!fir.heap<!fir.array<4xi64>>) { 299a7b363eSSlava Zakharin! CHECK: %[[VAL_19:.*]] = fir.convert %[[VAL_17]] : (index) -> i64 309a7b363eSSlava Zakharin! CHECK: %[[VAL_20:.*]] = fir.load %[[VAL_0]] : !fir.ref<i8> 319a7b363eSSlava Zakharin! CHECK: %[[VAL_21:.*]] = fir.convert %[[VAL_20]] : (i8) -> i64 329a7b363eSSlava Zakharin! CHECK: %[[VAL_22:.*]] = arith.muli %[[VAL_19]], %[[VAL_21]] : i64 339a7b363eSSlava Zakharin! CHECK: %[[VAL_23:.*]] = arith.constant 1 : index 349a7b363eSSlava Zakharin! CHECK: %[[VAL_24:.*]] = fir.zero_bits !fir.ref<!fir.array<4xi64>> 359a7b363eSSlava Zakharin! CHECK: %[[VAL_25:.*]] = fir.coordinate_of %[[VAL_24]], %[[VAL_23]] : (!fir.ref<!fir.array<4xi64>>, index) -> !fir.ref<i64> 369a7b363eSSlava Zakharin! CHECK: %[[VAL_26:.*]] = fir.convert %[[VAL_25]] : (!fir.ref<i64>) -> index 379a7b363eSSlava Zakharin! CHECK: %[[VAL_27:.*]] = fir.load %[[VAL_1]] : !fir.ref<index> 389a7b363eSSlava Zakharin! CHECK: %[[VAL_28:.*]] = fir.load %[[VAL_2]] : !fir.ref<index> 399a7b363eSSlava Zakharin! CHECK: %[[VAL_29:.*]] = arith.constant 1 : index 409a7b363eSSlava Zakharin! CHECK: %[[VAL_30:.*]] = arith.addi %[[VAL_27]], %[[VAL_29]] : index 419a7b363eSSlava Zakharin! CHECK: %[[VAL_31:.*]] = arith.cmpi sle, %[[VAL_28]], %[[VAL_30]] : index 429a7b363eSSlava Zakharin! CHECK: %[[VAL_32:.*]] = fir.if %[[VAL_31]] -> (!fir.heap<!fir.array<4xi64>>) { 439a7b363eSSlava Zakharin! CHECK: %[[VAL_33:.*]] = arith.constant 2 : index 449a7b363eSSlava Zakharin! CHECK: %[[VAL_34:.*]] = arith.muli %[[VAL_30]], %[[VAL_33]] : index 459a7b363eSSlava Zakharin! CHECK: fir.store %[[VAL_34]] to %[[VAL_2]] : !fir.ref<index> 469a7b363eSSlava Zakharin! CHECK: %[[VAL_35:.*]] = arith.muli %[[VAL_34]], %[[VAL_26]] : index 479a7b363eSSlava Zakharin! CHECK: %[[VAL_36:.*]] = fir.convert %[[VAL_18]] : (!fir.heap<!fir.array<4xi64>>) -> !fir.ref<i8> 489a7b363eSSlava Zakharin! CHECK: %[[VAL_37:.*]] = fir.convert %[[VAL_35]] : (index) -> i64 499a7b363eSSlava Zakharin! CHECK: %[[VAL_38:.*]] = fir.call @realloc(%[[VAL_36]], %[[VAL_37]]) fastmath<contract> : (!fir.ref<i8>, i64) -> !fir.ref<i8> 509a7b363eSSlava Zakharin! CHECK: %[[VAL_39:.*]] = fir.convert %[[VAL_38]] : (!fir.ref<i8>) -> !fir.heap<!fir.array<4xi64>> 519a7b363eSSlava Zakharin! CHECK: fir.result %[[VAL_39]] : !fir.heap<!fir.array<4xi64>> 529a7b363eSSlava Zakharin! CHECK: } else { 539a7b363eSSlava Zakharin! CHECK: fir.result %[[VAL_18]] : !fir.heap<!fir.array<4xi64>> 549a7b363eSSlava Zakharin! CHECK: } 559a7b363eSSlava Zakharin! CHECK: %[[VAL_40:.*]] = fir.coordinate_of %[[VAL_41:.*]], %[[VAL_27]] : (!fir.heap<!fir.array<4xi64>>, index) -> !fir.ref<i64> 569a7b363eSSlava Zakharin! CHECK: fir.store %[[VAL_22]] to %[[VAL_40]] : !fir.ref<i64> 579a7b363eSSlava Zakharin! CHECK: fir.store %[[VAL_30]] to %[[VAL_1]] : !fir.ref<index> 589a7b363eSSlava Zakharin! CHECK: fir.result %[[VAL_41]] : !fir.heap<!fir.array<4xi64>> 599a7b363eSSlava Zakharin! CHECK: } 609a7b363eSSlava Zakharin! CHECK: %[[VAL_42:.*]] = fir.load %[[VAL_1]] : !fir.ref<index> 619a7b363eSSlava Zakharin! CHECK: %[[VAL_43:.*]] = fir.shape %[[VAL_42]] : (index) -> !fir.shape<1> 629a7b363eSSlava Zakharin! CHECK: %[[VAL_44:.*]] = fir.array_load %[[VAL_45:.*]](%[[VAL_43]]) : (!fir.heap<!fir.array<4xi64>>, !fir.shape<1>) -> !fir.array<4xi64> 639a7b363eSSlava Zakharin! CHECK: %[[VAL_46:.*]] = arith.constant 1 : index 649a7b363eSSlava Zakharin! CHECK: %[[VAL_47:.*]] = arith.constant 0 : index 659a7b363eSSlava Zakharin! CHECK: %[[VAL_48:.*]] = arith.subi %[[VAL_3]], %[[VAL_46]] : index 669a7b363eSSlava Zakharin! CHECK: %[[VAL_49:.*]] = fir.do_loop %[[VAL_50:.*]] = %[[VAL_47]] to %[[VAL_48]] step %[[VAL_46]] unordered iter_args(%[[VAL_51:.*]] = %[[VAL_6]]) -> (!fir.array<4xi8>) { 679a7b363eSSlava Zakharin! CHECK: %[[VAL_52:.*]] = fir.array_fetch %[[VAL_44]], %[[VAL_50]] : (!fir.array<4xi64>, index) -> i64 689a7b363eSSlava Zakharin! CHECK: %[[VAL_53:.*]] = fir.no_reassoc %[[VAL_52]] : i64 699a7b363eSSlava Zakharin! CHECK: %[[VAL_54:.*]] = fir.convert %[[VAL_53]] : (i64) -> i8 709a7b363eSSlava Zakharin! CHECK: %[[VAL_55:.*]] = fir.array_update %[[VAL_51]], %[[VAL_54]], %[[VAL_50]] : (!fir.array<4xi8>, i8, index) -> !fir.array<4xi8> 719a7b363eSSlava Zakharin! CHECK: fir.result %[[VAL_55]] : !fir.array<4xi8> 729a7b363eSSlava Zakharin! CHECK: } 739a7b363eSSlava Zakharin! CHECK: fir.array_merge_store %[[VAL_6]], %[[VAL_56:.*]] to %[[VAL_4]] : !fir.array<4xi8>, !fir.array<4xi8>, !fir.ref<!fir.array<4xi8>> 749a7b363eSSlava Zakharin! CHECK: fir.freemem %[[VAL_45]] : !fir.heap<!fir.array<4xi64>> 759a7b363eSSlava Zakharin! CHECK: %[[VAL_57:.*]] = fir.load %[[VAL_4]] : !fir.ref<!fir.array<4xi8>> 769a7b363eSSlava Zakharin! CHECK: return %[[VAL_57]] : !fir.array<4xi8> 779a7b363eSSlava Zakharin! CHECK: } 789a7b363eSSlava Zakharin 799a7b363eSSlava Zakharinfunction test2(k) 809a7b363eSSlava Zakharin integer*2 :: k 819a7b363eSSlava Zakharin integer*2 :: test2(4) 829a7b363eSSlava Zakharin test2 = ([(i*k, integer(8)::i=1,4)]) 839a7b363eSSlava Zakharinend function test2 849a7b363eSSlava Zakharin! CHECK-LABEL: func.func @_QPtest2( 859a7b363eSSlava Zakharin! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<i16> {fir.bindc_name = "k"}) -> !fir.array<4xi16> { 869a7b363eSSlava Zakharin! CHECK: %[[VAL_1:.*]] = fir.alloca index {bindc_name = ".buff.pos"} 879a7b363eSSlava Zakharin! CHECK: %[[VAL_2:.*]] = fir.alloca index {bindc_name = ".buff.size"} 889a7b363eSSlava Zakharin! CHECK: %[[VAL_3:.*]] = arith.constant 4 : index 899a7b363eSSlava Zakharin! CHECK: %[[VAL_4:.*]] = fir.alloca !fir.array<4xi16> {bindc_name = "test2", uniq_name = "_QFtest2Etest2"} 909a7b363eSSlava Zakharin! CHECK: %[[VAL_5:.*]] = fir.shape %[[VAL_3]] : (index) -> !fir.shape<1> 919a7b363eSSlava Zakharin! CHECK: %[[VAL_6:.*]] = fir.array_load %[[VAL_4]](%[[VAL_5]]) : (!fir.ref<!fir.array<4xi16>>, !fir.shape<1>) -> !fir.array<4xi16> 929a7b363eSSlava Zakharin! CHECK: %[[VAL_7:.*]] = arith.constant 0 : index 939a7b363eSSlava Zakharin! CHECK: fir.store %[[VAL_7]] to %[[VAL_1]] : !fir.ref<index> 949a7b363eSSlava Zakharin! CHECK: %[[VAL_8:.*]] = fir.allocmem !fir.array<4xi64> 959a7b363eSSlava Zakharin! CHECK: %[[VAL_9:.*]] = arith.constant 4 : index 969a7b363eSSlava Zakharin! CHECK: fir.store %[[VAL_9]] to %[[VAL_2]] : !fir.ref<index> 979a7b363eSSlava Zakharin! CHECK: %[[VAL_10:.*]] = arith.constant 1 : i64 989a7b363eSSlava Zakharin! CHECK: %[[VAL_11:.*]] = fir.convert %[[VAL_10]] : (i64) -> index 999a7b363eSSlava Zakharin! CHECK: %[[VAL_12:.*]] = arith.constant 4 : i64 1009a7b363eSSlava Zakharin! CHECK: %[[VAL_13:.*]] = fir.convert %[[VAL_12]] : (i64) -> index 1019a7b363eSSlava Zakharin! CHECK: %[[VAL_14:.*]] = arith.constant 1 : i64 1029a7b363eSSlava Zakharin! CHECK: %[[VAL_15:.*]] = fir.convert %[[VAL_14]] : (i64) -> index 1039a7b363eSSlava Zakharin! CHECK: %[[VAL_16:.*]] = fir.do_loop %[[VAL_17:.*]] = %[[VAL_11]] to %[[VAL_13]] step %[[VAL_15]] iter_args(%[[VAL_18:.*]] = %[[VAL_8]]) -> (!fir.heap<!fir.array<4xi64>>) { 1049a7b363eSSlava Zakharin! CHECK: %[[VAL_19:.*]] = fir.convert %[[VAL_17]] : (index) -> i64 1059a7b363eSSlava Zakharin! CHECK: %[[VAL_20:.*]] = fir.load %[[VAL_0]] : !fir.ref<i16> 1069a7b363eSSlava Zakharin! CHECK: %[[VAL_21:.*]] = fir.convert %[[VAL_20]] : (i16) -> i64 1079a7b363eSSlava Zakharin! CHECK: %[[VAL_22:.*]] = arith.muli %[[VAL_19]], %[[VAL_21]] : i64 1089a7b363eSSlava Zakharin! CHECK: %[[VAL_23:.*]] = arith.constant 1 : index 1099a7b363eSSlava Zakharin! CHECK: %[[VAL_24:.*]] = fir.zero_bits !fir.ref<!fir.array<4xi64>> 1109a7b363eSSlava Zakharin! CHECK: %[[VAL_25:.*]] = fir.coordinate_of %[[VAL_24]], %[[VAL_23]] : (!fir.ref<!fir.array<4xi64>>, index) -> !fir.ref<i64> 1119a7b363eSSlava Zakharin! CHECK: %[[VAL_26:.*]] = fir.convert %[[VAL_25]] : (!fir.ref<i64>) -> index 1129a7b363eSSlava Zakharin! CHECK: %[[VAL_27:.*]] = fir.load %[[VAL_1]] : !fir.ref<index> 1139a7b363eSSlava Zakharin! CHECK: %[[VAL_28:.*]] = fir.load %[[VAL_2]] : !fir.ref<index> 1149a7b363eSSlava Zakharin! CHECK: %[[VAL_29:.*]] = arith.constant 1 : index 1159a7b363eSSlava Zakharin! CHECK: %[[VAL_30:.*]] = arith.addi %[[VAL_27]], %[[VAL_29]] : index 1169a7b363eSSlava Zakharin! CHECK: %[[VAL_31:.*]] = arith.cmpi sle, %[[VAL_28]], %[[VAL_30]] : index 1179a7b363eSSlava Zakharin! CHECK: %[[VAL_32:.*]] = fir.if %[[VAL_31]] -> (!fir.heap<!fir.array<4xi64>>) { 1189a7b363eSSlava Zakharin! CHECK: %[[VAL_33:.*]] = arith.constant 2 : index 1199a7b363eSSlava Zakharin! CHECK: %[[VAL_34:.*]] = arith.muli %[[VAL_30]], %[[VAL_33]] : index 1209a7b363eSSlava Zakharin! CHECK: fir.store %[[VAL_34]] to %[[VAL_2]] : !fir.ref<index> 1219a7b363eSSlava Zakharin! CHECK: %[[VAL_35:.*]] = arith.muli %[[VAL_34]], %[[VAL_26]] : index 1229a7b363eSSlava Zakharin! CHECK: %[[VAL_36:.*]] = fir.convert %[[VAL_18]] : (!fir.heap<!fir.array<4xi64>>) -> !fir.ref<i8> 1239a7b363eSSlava Zakharin! CHECK: %[[VAL_37:.*]] = fir.convert %[[VAL_35]] : (index) -> i64 1249a7b363eSSlava Zakharin! CHECK: %[[VAL_38:.*]] = fir.call @realloc(%[[VAL_36]], %[[VAL_37]]) fastmath<contract> : (!fir.ref<i8>, i64) -> !fir.ref<i8> 1259a7b363eSSlava Zakharin! CHECK: %[[VAL_39:.*]] = fir.convert %[[VAL_38]] : (!fir.ref<i8>) -> !fir.heap<!fir.array<4xi64>> 1269a7b363eSSlava Zakharin! CHECK: fir.result %[[VAL_39]] : !fir.heap<!fir.array<4xi64>> 1279a7b363eSSlava Zakharin! CHECK: } else { 1289a7b363eSSlava Zakharin! CHECK: fir.result %[[VAL_18]] : !fir.heap<!fir.array<4xi64>> 1299a7b363eSSlava Zakharin! CHECK: } 1309a7b363eSSlava Zakharin! CHECK: %[[VAL_40:.*]] = fir.coordinate_of %[[VAL_41:.*]], %[[VAL_27]] : (!fir.heap<!fir.array<4xi64>>, index) -> !fir.ref<i64> 1319a7b363eSSlava Zakharin! CHECK: fir.store %[[VAL_22]] to %[[VAL_40]] : !fir.ref<i64> 1329a7b363eSSlava Zakharin! CHECK: fir.store %[[VAL_30]] to %[[VAL_1]] : !fir.ref<index> 1339a7b363eSSlava Zakharin! CHECK: fir.result %[[VAL_41]] : !fir.heap<!fir.array<4xi64>> 1349a7b363eSSlava Zakharin! CHECK: } 1359a7b363eSSlava Zakharin! CHECK: %[[VAL_42:.*]] = fir.load %[[VAL_1]] : !fir.ref<index> 1369a7b363eSSlava Zakharin! CHECK: %[[VAL_43:.*]] = fir.shape %[[VAL_42]] : (index) -> !fir.shape<1> 1379a7b363eSSlava Zakharin! CHECK: %[[VAL_44:.*]] = fir.array_load %[[VAL_45:.*]](%[[VAL_43]]) : (!fir.heap<!fir.array<4xi64>>, !fir.shape<1>) -> !fir.array<4xi64> 1389a7b363eSSlava Zakharin! CHECK: %[[VAL_46:.*]] = arith.constant 1 : index 1399a7b363eSSlava Zakharin! CHECK: %[[VAL_47:.*]] = arith.constant 0 : index 1409a7b363eSSlava Zakharin! CHECK: %[[VAL_48:.*]] = arith.subi %[[VAL_3]], %[[VAL_46]] : index 1419a7b363eSSlava Zakharin! CHECK: %[[VAL_49:.*]] = fir.do_loop %[[VAL_50:.*]] = %[[VAL_47]] to %[[VAL_48]] step %[[VAL_46]] unordered iter_args(%[[VAL_51:.*]] = %[[VAL_6]]) -> (!fir.array<4xi16>) { 1429a7b363eSSlava Zakharin! CHECK: %[[VAL_52:.*]] = fir.array_fetch %[[VAL_44]], %[[VAL_50]] : (!fir.array<4xi64>, index) -> i64 1439a7b363eSSlava Zakharin! CHECK: %[[VAL_53:.*]] = fir.no_reassoc %[[VAL_52]] : i64 1449a7b363eSSlava Zakharin! CHECK: %[[VAL_54:.*]] = fir.convert %[[VAL_53]] : (i64) -> i16 1459a7b363eSSlava Zakharin! CHECK: %[[VAL_55:.*]] = fir.array_update %[[VAL_51]], %[[VAL_54]], %[[VAL_50]] : (!fir.array<4xi16>, i16, index) -> !fir.array<4xi16> 1469a7b363eSSlava Zakharin! CHECK: fir.result %[[VAL_55]] : !fir.array<4xi16> 1479a7b363eSSlava Zakharin! CHECK: } 1489a7b363eSSlava Zakharin! CHECK: fir.array_merge_store %[[VAL_6]], %[[VAL_56:.*]] to %[[VAL_4]] : !fir.array<4xi16>, !fir.array<4xi16>, !fir.ref<!fir.array<4xi16>> 1499a7b363eSSlava Zakharin! CHECK: fir.freemem %[[VAL_45]] : !fir.heap<!fir.array<4xi64>> 1509a7b363eSSlava Zakharin! CHECK: %[[VAL_57:.*]] = fir.load %[[VAL_4]] : !fir.ref<!fir.array<4xi16>> 1519a7b363eSSlava Zakharin! CHECK: return %[[VAL_57]] : !fir.array<4xi16> 1529a7b363eSSlava Zakharin! CHECK: } 1539a7b363eSSlava Zakharin 1549a7b363eSSlava Zakharinfunction test3(k) 1559a7b363eSSlava Zakharin integer*4 :: k 1569a7b363eSSlava Zakharin integer*4 :: test3(4) 1579a7b363eSSlava Zakharin test3 = ([(i*k, integer(8)::i=1,4)]) 1589a7b363eSSlava Zakharinend function test3 1599a7b363eSSlava Zakharin! CHECK-LABEL: func.func @_QPtest3( 1609a7b363eSSlava Zakharin! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<i32> {fir.bindc_name = "k"}) -> !fir.array<4xi32> { 1619a7b363eSSlava Zakharin! CHECK: %[[VAL_1:.*]] = fir.alloca index {bindc_name = ".buff.pos"} 1629a7b363eSSlava Zakharin! CHECK: %[[VAL_2:.*]] = fir.alloca index {bindc_name = ".buff.size"} 1639a7b363eSSlava Zakharin! CHECK: %[[VAL_3:.*]] = arith.constant 4 : index 1649a7b363eSSlava Zakharin! CHECK: %[[VAL_4:.*]] = fir.alloca !fir.array<4xi32> {bindc_name = "test3", uniq_name = "_QFtest3Etest3"} 1659a7b363eSSlava Zakharin! CHECK: %[[VAL_5:.*]] = fir.shape %[[VAL_3]] : (index) -> !fir.shape<1> 1669a7b363eSSlava Zakharin! CHECK: %[[VAL_6:.*]] = fir.array_load %[[VAL_4]](%[[VAL_5]]) : (!fir.ref<!fir.array<4xi32>>, !fir.shape<1>) -> !fir.array<4xi32> 1679a7b363eSSlava Zakharin! CHECK: %[[VAL_7:.*]] = arith.constant 0 : index 1689a7b363eSSlava Zakharin! CHECK: fir.store %[[VAL_7]] to %[[VAL_1]] : !fir.ref<index> 1699a7b363eSSlava Zakharin! CHECK: %[[VAL_8:.*]] = fir.allocmem !fir.array<4xi64> 1709a7b363eSSlava Zakharin! CHECK: %[[VAL_9:.*]] = arith.constant 4 : index 1719a7b363eSSlava Zakharin! CHECK: fir.store %[[VAL_9]] to %[[VAL_2]] : !fir.ref<index> 1729a7b363eSSlava Zakharin! CHECK: %[[VAL_10:.*]] = arith.constant 1 : i64 1739a7b363eSSlava Zakharin! CHECK: %[[VAL_11:.*]] = fir.convert %[[VAL_10]] : (i64) -> index 1749a7b363eSSlava Zakharin! CHECK: %[[VAL_12:.*]] = arith.constant 4 : i64 1759a7b363eSSlava Zakharin! CHECK: %[[VAL_13:.*]] = fir.convert %[[VAL_12]] : (i64) -> index 1769a7b363eSSlava Zakharin! CHECK: %[[VAL_14:.*]] = arith.constant 1 : i64 1779a7b363eSSlava Zakharin! CHECK: %[[VAL_15:.*]] = fir.convert %[[VAL_14]] : (i64) -> index 1789a7b363eSSlava Zakharin! CHECK: %[[VAL_16:.*]] = fir.do_loop %[[VAL_17:.*]] = %[[VAL_11]] to %[[VAL_13]] step %[[VAL_15]] iter_args(%[[VAL_18:.*]] = %[[VAL_8]]) -> (!fir.heap<!fir.array<4xi64>>) { 1799a7b363eSSlava Zakharin! CHECK: %[[VAL_19:.*]] = fir.convert %[[VAL_17]] : (index) -> i64 1809a7b363eSSlava Zakharin! CHECK: %[[VAL_20:.*]] = fir.load %[[VAL_0]] : !fir.ref<i32> 1819a7b363eSSlava Zakharin! CHECK: %[[VAL_21:.*]] = fir.convert %[[VAL_20]] : (i32) -> i64 1829a7b363eSSlava Zakharin! CHECK: %[[VAL_22:.*]] = arith.muli %[[VAL_19]], %[[VAL_21]] : i64 1839a7b363eSSlava Zakharin! CHECK: %[[VAL_23:.*]] = arith.constant 1 : index 1849a7b363eSSlava Zakharin! CHECK: %[[VAL_24:.*]] = fir.zero_bits !fir.ref<!fir.array<4xi64>> 1859a7b363eSSlava Zakharin! CHECK: %[[VAL_25:.*]] = fir.coordinate_of %[[VAL_24]], %[[VAL_23]] : (!fir.ref<!fir.array<4xi64>>, index) -> !fir.ref<i64> 1869a7b363eSSlava Zakharin! CHECK: %[[VAL_26:.*]] = fir.convert %[[VAL_25]] : (!fir.ref<i64>) -> index 1879a7b363eSSlava Zakharin! CHECK: %[[VAL_27:.*]] = fir.load %[[VAL_1]] : !fir.ref<index> 1889a7b363eSSlava Zakharin! CHECK: %[[VAL_28:.*]] = fir.load %[[VAL_2]] : !fir.ref<index> 1899a7b363eSSlava Zakharin! CHECK: %[[VAL_29:.*]] = arith.constant 1 : index 1909a7b363eSSlava Zakharin! CHECK: %[[VAL_30:.*]] = arith.addi %[[VAL_27]], %[[VAL_29]] : index 1919a7b363eSSlava Zakharin! CHECK: %[[VAL_31:.*]] = arith.cmpi sle, %[[VAL_28]], %[[VAL_30]] : index 1929a7b363eSSlava Zakharin! CHECK: %[[VAL_32:.*]] = fir.if %[[VAL_31]] -> (!fir.heap<!fir.array<4xi64>>) { 1939a7b363eSSlava Zakharin! CHECK: %[[VAL_33:.*]] = arith.constant 2 : index 1949a7b363eSSlava Zakharin! CHECK: %[[VAL_34:.*]] = arith.muli %[[VAL_30]], %[[VAL_33]] : index 1959a7b363eSSlava Zakharin! CHECK: fir.store %[[VAL_34]] to %[[VAL_2]] : !fir.ref<index> 1969a7b363eSSlava Zakharin! CHECK: %[[VAL_35:.*]] = arith.muli %[[VAL_34]], %[[VAL_26]] : index 1979a7b363eSSlava Zakharin! CHECK: %[[VAL_36:.*]] = fir.convert %[[VAL_18]] : (!fir.heap<!fir.array<4xi64>>) -> !fir.ref<i8> 1989a7b363eSSlava Zakharin! CHECK: %[[VAL_37:.*]] = fir.convert %[[VAL_35]] : (index) -> i64 1999a7b363eSSlava Zakharin! CHECK: %[[VAL_38:.*]] = fir.call @realloc(%[[VAL_36]], %[[VAL_37]]) fastmath<contract> : (!fir.ref<i8>, i64) -> !fir.ref<i8> 2009a7b363eSSlava Zakharin! CHECK: %[[VAL_39:.*]] = fir.convert %[[VAL_38]] : (!fir.ref<i8>) -> !fir.heap<!fir.array<4xi64>> 2019a7b363eSSlava Zakharin! CHECK: fir.result %[[VAL_39]] : !fir.heap<!fir.array<4xi64>> 2029a7b363eSSlava Zakharin! CHECK: } else { 2039a7b363eSSlava Zakharin! CHECK: fir.result %[[VAL_18]] : !fir.heap<!fir.array<4xi64>> 2049a7b363eSSlava Zakharin! CHECK: } 2059a7b363eSSlava Zakharin! CHECK: %[[VAL_40:.*]] = fir.coordinate_of %[[VAL_41:.*]], %[[VAL_27]] : (!fir.heap<!fir.array<4xi64>>, index) -> !fir.ref<i64> 2069a7b363eSSlava Zakharin! CHECK: fir.store %[[VAL_22]] to %[[VAL_40]] : !fir.ref<i64> 2079a7b363eSSlava Zakharin! CHECK: fir.store %[[VAL_30]] to %[[VAL_1]] : !fir.ref<index> 2089a7b363eSSlava Zakharin! CHECK: fir.result %[[VAL_41]] : !fir.heap<!fir.array<4xi64>> 2099a7b363eSSlava Zakharin! CHECK: } 2109a7b363eSSlava Zakharin! CHECK: %[[VAL_42:.*]] = fir.load %[[VAL_1]] : !fir.ref<index> 2119a7b363eSSlava Zakharin! CHECK: %[[VAL_43:.*]] = fir.shape %[[VAL_42]] : (index) -> !fir.shape<1> 2129a7b363eSSlava Zakharin! CHECK: %[[VAL_44:.*]] = fir.array_load %[[VAL_45:.*]](%[[VAL_43]]) : (!fir.heap<!fir.array<4xi64>>, !fir.shape<1>) -> !fir.array<4xi64> 2139a7b363eSSlava Zakharin! CHECK: %[[VAL_46:.*]] = arith.constant 1 : index 2149a7b363eSSlava Zakharin! CHECK: %[[VAL_47:.*]] = arith.constant 0 : index 2159a7b363eSSlava Zakharin! CHECK: %[[VAL_48:.*]] = arith.subi %[[VAL_3]], %[[VAL_46]] : index 2169a7b363eSSlava Zakharin! CHECK: %[[VAL_49:.*]] = fir.do_loop %[[VAL_50:.*]] = %[[VAL_47]] to %[[VAL_48]] step %[[VAL_46]] unordered iter_args(%[[VAL_51:.*]] = %[[VAL_6]]) -> (!fir.array<4xi32>) { 2179a7b363eSSlava Zakharin! CHECK: %[[VAL_52:.*]] = fir.array_fetch %[[VAL_44]], %[[VAL_50]] : (!fir.array<4xi64>, index) -> i64 2189a7b363eSSlava Zakharin! CHECK: %[[VAL_53:.*]] = fir.no_reassoc %[[VAL_52]] : i64 2199a7b363eSSlava Zakharin! CHECK: %[[VAL_54:.*]] = fir.convert %[[VAL_53]] : (i64) -> i32 2209a7b363eSSlava Zakharin! CHECK: %[[VAL_55:.*]] = fir.array_update %[[VAL_51]], %[[VAL_54]], %[[VAL_50]] : (!fir.array<4xi32>, i32, index) -> !fir.array<4xi32> 2219a7b363eSSlava Zakharin! CHECK: fir.result %[[VAL_55]] : !fir.array<4xi32> 2229a7b363eSSlava Zakharin! CHECK: } 2239a7b363eSSlava Zakharin! CHECK: fir.array_merge_store %[[VAL_6]], %[[VAL_56:.*]] to %[[VAL_4]] : !fir.array<4xi32>, !fir.array<4xi32>, !fir.ref<!fir.array<4xi32>> 2249a7b363eSSlava Zakharin! CHECK: fir.freemem %[[VAL_45]] : !fir.heap<!fir.array<4xi64>> 2259a7b363eSSlava Zakharin! CHECK: %[[VAL_57:.*]] = fir.load %[[VAL_4]] : !fir.ref<!fir.array<4xi32>> 2269a7b363eSSlava Zakharin! CHECK: return %[[VAL_57]] : !fir.array<4xi32> 2279a7b363eSSlava Zakharin! CHECK: } 2289a7b363eSSlava Zakharin 2299a7b363eSSlava Zakharinfunction test4(k) 2309a7b363eSSlava Zakharin integer*8 :: k 2319a7b363eSSlava Zakharin integer*8 :: test4(4) 2329a7b363eSSlava Zakharin test4 = ([(i*k, integer(8)::i=1,4)]) 2339a7b363eSSlava Zakharinend function test4 2349a7b363eSSlava Zakharin! CHECK-LABEL: func.func @_QPtest4( 2359a7b363eSSlava Zakharin! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<i64> {fir.bindc_name = "k"}) -> !fir.array<4xi64> { 2369a7b363eSSlava Zakharin! CHECK: %[[VAL_1:.*]] = fir.alloca index {bindc_name = ".buff.pos"} 2379a7b363eSSlava Zakharin! CHECK: %[[VAL_2:.*]] = fir.alloca index {bindc_name = ".buff.size"} 2389a7b363eSSlava Zakharin! CHECK: %[[VAL_3:.*]] = arith.constant 4 : index 2399a7b363eSSlava Zakharin! CHECK: %[[VAL_4:.*]] = fir.alloca !fir.array<4xi64> {bindc_name = "test4", uniq_name = "_QFtest4Etest4"} 2409a7b363eSSlava Zakharin! CHECK: %[[VAL_5:.*]] = fir.shape %[[VAL_3]] : (index) -> !fir.shape<1> 2419a7b363eSSlava Zakharin! CHECK: %[[VAL_6:.*]] = fir.array_load %[[VAL_4]](%[[VAL_5]]) : (!fir.ref<!fir.array<4xi64>>, !fir.shape<1>) -> !fir.array<4xi64> 2429a7b363eSSlava Zakharin! CHECK: %[[VAL_7:.*]] = arith.constant 0 : index 2439a7b363eSSlava Zakharin! CHECK: fir.store %[[VAL_7]] to %[[VAL_1]] : !fir.ref<index> 2449a7b363eSSlava Zakharin! CHECK: %[[VAL_8:.*]] = fir.allocmem !fir.array<4xi64> 2459a7b363eSSlava Zakharin! CHECK: %[[VAL_9:.*]] = arith.constant 4 : index 2469a7b363eSSlava Zakharin! CHECK: fir.store %[[VAL_9]] to %[[VAL_2]] : !fir.ref<index> 2479a7b363eSSlava Zakharin! CHECK: %[[VAL_10:.*]] = arith.constant 1 : i64 2489a7b363eSSlava Zakharin! CHECK: %[[VAL_11:.*]] = fir.convert %[[VAL_10]] : (i64) -> index 2499a7b363eSSlava Zakharin! CHECK: %[[VAL_12:.*]] = arith.constant 4 : i64 2509a7b363eSSlava Zakharin! CHECK: %[[VAL_13:.*]] = fir.convert %[[VAL_12]] : (i64) -> index 2519a7b363eSSlava Zakharin! CHECK: %[[VAL_14:.*]] = arith.constant 1 : i64 2529a7b363eSSlava Zakharin! CHECK: %[[VAL_15:.*]] = fir.convert %[[VAL_14]] : (i64) -> index 2539a7b363eSSlava Zakharin! CHECK: %[[VAL_16:.*]] = fir.do_loop %[[VAL_17:.*]] = %[[VAL_11]] to %[[VAL_13]] step %[[VAL_15]] iter_args(%[[VAL_18:.*]] = %[[VAL_8]]) -> (!fir.heap<!fir.array<4xi64>>) { 2549a7b363eSSlava Zakharin! CHECK: %[[VAL_19:.*]] = fir.convert %[[VAL_17]] : (index) -> i64 2559a7b363eSSlava Zakharin! CHECK: %[[VAL_20:.*]] = fir.load %[[VAL_0]] : !fir.ref<i64> 2569a7b363eSSlava Zakharin! CHECK: %[[VAL_21:.*]] = arith.muli %[[VAL_19]], %[[VAL_20]] : i64 2579a7b363eSSlava Zakharin! CHECK: %[[VAL_22:.*]] = arith.constant 1 : index 2589a7b363eSSlava Zakharin! CHECK: %[[VAL_23:.*]] = fir.zero_bits !fir.ref<!fir.array<4xi64>> 2599a7b363eSSlava Zakharin! CHECK: %[[VAL_24:.*]] = fir.coordinate_of %[[VAL_23]], %[[VAL_22]] : (!fir.ref<!fir.array<4xi64>>, index) -> !fir.ref<i64> 2609a7b363eSSlava Zakharin! CHECK: %[[VAL_25:.*]] = fir.convert %[[VAL_24]] : (!fir.ref<i64>) -> index 2619a7b363eSSlava Zakharin! CHECK: %[[VAL_26:.*]] = fir.load %[[VAL_1]] : !fir.ref<index> 2629a7b363eSSlava Zakharin! CHECK: %[[VAL_27:.*]] = fir.load %[[VAL_2]] : !fir.ref<index> 2639a7b363eSSlava Zakharin! CHECK: %[[VAL_28:.*]] = arith.constant 1 : index 2649a7b363eSSlava Zakharin! CHECK: %[[VAL_29:.*]] = arith.addi %[[VAL_26]], %[[VAL_28]] : index 2659a7b363eSSlava Zakharin! CHECK: %[[VAL_30:.*]] = arith.cmpi sle, %[[VAL_27]], %[[VAL_29]] : index 2669a7b363eSSlava Zakharin! CHECK: %[[VAL_31:.*]] = fir.if %[[VAL_30]] -> (!fir.heap<!fir.array<4xi64>>) { 2679a7b363eSSlava Zakharin! CHECK: %[[VAL_32:.*]] = arith.constant 2 : index 2689a7b363eSSlava Zakharin! CHECK: %[[VAL_33:.*]] = arith.muli %[[VAL_29]], %[[VAL_32]] : index 2699a7b363eSSlava Zakharin! CHECK: fir.store %[[VAL_33]] to %[[VAL_2]] : !fir.ref<index> 2709a7b363eSSlava Zakharin! CHECK: %[[VAL_34:.*]] = arith.muli %[[VAL_33]], %[[VAL_25]] : index 2719a7b363eSSlava Zakharin! CHECK: %[[VAL_35:.*]] = fir.convert %[[VAL_18]] : (!fir.heap<!fir.array<4xi64>>) -> !fir.ref<i8> 2729a7b363eSSlava Zakharin! CHECK: %[[VAL_36:.*]] = fir.convert %[[VAL_34]] : (index) -> i64 2739a7b363eSSlava Zakharin! CHECK: %[[VAL_37:.*]] = fir.call @realloc(%[[VAL_35]], %[[VAL_36]]) fastmath<contract> : (!fir.ref<i8>, i64) -> !fir.ref<i8> 2749a7b363eSSlava Zakharin! CHECK: %[[VAL_38:.*]] = fir.convert %[[VAL_37]] : (!fir.ref<i8>) -> !fir.heap<!fir.array<4xi64>> 2759a7b363eSSlava Zakharin! CHECK: fir.result %[[VAL_38]] : !fir.heap<!fir.array<4xi64>> 2769a7b363eSSlava Zakharin! CHECK: } else { 2779a7b363eSSlava Zakharin! CHECK: fir.result %[[VAL_18]] : !fir.heap<!fir.array<4xi64>> 2789a7b363eSSlava Zakharin! CHECK: } 2799a7b363eSSlava Zakharin! CHECK: %[[VAL_39:.*]] = fir.coordinate_of %[[VAL_40:.*]], %[[VAL_26]] : (!fir.heap<!fir.array<4xi64>>, index) -> !fir.ref<i64> 2809a7b363eSSlava Zakharin! CHECK: fir.store %[[VAL_21]] to %[[VAL_39]] : !fir.ref<i64> 2819a7b363eSSlava Zakharin! CHECK: fir.store %[[VAL_29]] to %[[VAL_1]] : !fir.ref<index> 2829a7b363eSSlava Zakharin! CHECK: fir.result %[[VAL_40]] : !fir.heap<!fir.array<4xi64>> 2839a7b363eSSlava Zakharin! CHECK: } 2849a7b363eSSlava Zakharin! CHECK: %[[VAL_41:.*]] = fir.load %[[VAL_1]] : !fir.ref<index> 2859a7b363eSSlava Zakharin! CHECK: %[[VAL_42:.*]] = fir.shape %[[VAL_41]] : (index) -> !fir.shape<1> 2869a7b363eSSlava Zakharin! CHECK: %[[VAL_43:.*]] = fir.array_load %[[VAL_44:.*]](%[[VAL_42]]) : (!fir.heap<!fir.array<4xi64>>, !fir.shape<1>) -> !fir.array<4xi64> 2879a7b363eSSlava Zakharin! CHECK: %[[VAL_45:.*]] = arith.constant 1 : index 2889a7b363eSSlava Zakharin! CHECK: %[[VAL_46:.*]] = arith.constant 0 : index 2899a7b363eSSlava Zakharin! CHECK: %[[VAL_47:.*]] = arith.subi %[[VAL_3]], %[[VAL_45]] : index 2909a7b363eSSlava Zakharin! CHECK: %[[VAL_48:.*]] = fir.do_loop %[[VAL_49:.*]] = %[[VAL_46]] to %[[VAL_47]] step %[[VAL_45]] unordered iter_args(%[[VAL_50:.*]] = %[[VAL_6]]) -> (!fir.array<4xi64>) { 2919a7b363eSSlava Zakharin! CHECK: %[[VAL_51:.*]] = fir.array_fetch %[[VAL_43]], %[[VAL_49]] : (!fir.array<4xi64>, index) -> i64 2929a7b363eSSlava Zakharin! CHECK: %[[VAL_52:.*]] = fir.no_reassoc %[[VAL_51]] : i64 2939a7b363eSSlava Zakharin! CHECK: %[[VAL_53:.*]] = fir.array_update %[[VAL_50]], %[[VAL_52]], %[[VAL_49]] : (!fir.array<4xi64>, i64, index) -> !fir.array<4xi64> 2949a7b363eSSlava Zakharin! CHECK: fir.result %[[VAL_53]] : !fir.array<4xi64> 2959a7b363eSSlava Zakharin! CHECK: } 2969a7b363eSSlava Zakharin! CHECK: fir.array_merge_store %[[VAL_6]], %[[VAL_54:.*]] to %[[VAL_4]] : !fir.array<4xi64>, !fir.array<4xi64>, !fir.ref<!fir.array<4xi64>> 2979a7b363eSSlava Zakharin! CHECK: fir.freemem %[[VAL_44]] : !fir.heap<!fir.array<4xi64>> 2989a7b363eSSlava Zakharin! CHECK: %[[VAL_55:.*]] = fir.load %[[VAL_4]] : !fir.ref<!fir.array<4xi64>> 2999a7b363eSSlava Zakharin! CHECK: return %[[VAL_55]] : !fir.array<4xi64> 3009a7b363eSSlava Zakharin! CHECK: } 301