|
11 | 11 | // sum = sum + a(i)
|
12 | 12 | // end do
|
13 | 13 | // end subroutine sum1d
|
14 |
| -module { |
| 14 | +module attributes {dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<f80, dense<128> : vector<2xi64>>, #dlti.dl_entry<i128, dense<128> : vector<2xi64>>, #dlti.dl_entry<i64, dense<64> : vector<2xi64>>, #dlti.dl_entry<!llvm.ptr<272>, dense<64> : vector<4xi64>>, #dlti.dl_entry<!llvm.ptr<271>, dense<32> : vector<4xi64>>, #dlti.dl_entry<!llvm.ptr<270>, dense<32> : vector<4xi64>>, #dlti.dl_entry<f128, dense<128> : vector<2xi64>>, #dlti.dl_entry<f64, dense<64> : vector<2xi64>>, #dlti.dl_entry<f16, dense<16> : vector<2xi64>>, #dlti.dl_entry<i32, dense<32> : vector<2xi64>>, #dlti.dl_entry<i16, dense<16> : vector<2xi64>>, #dlti.dl_entry<i8, dense<8> : vector<2xi64>>, #dlti.dl_entry<i1, dense<8> : vector<2xi64>>, #dlti.dl_entry<!llvm.ptr, dense<64> : vector<4xi64>>, #dlti.dl_entry<"dlti.endianness", "little">, #dlti.dl_entry<"dlti.stack_alignment", 128 : i64>>} { |
15 | 15 | func.func @sum1d(%arg0: !fir.box<!fir.array<?xf64>> {fir.bindc_name = "a"}, %arg1: !fir.ref<i32> {fir.bindc_name = "n"}) {
|
16 | 16 | %decl = fir.declare %arg0 {uniq_name = "a"} : (!fir.box<!fir.array<?xf64>>) -> !fir.box<!fir.array<?xf64>>
|
17 | 17 | %rebox = fir.rebox %decl : (!fir.box<!fir.array<?xf64>>) -> !fir.box<!fir.array<?xf64>>
|
@@ -1556,5 +1556,89 @@ func.func @minloc(%arg0: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "x"}, %ar
|
1556 | 1556 | // CHECK: fir.if %{{.*}} {
|
1557 | 1557 | // CHECK: {{.*}} = arith.cmpi eq, %[[V17]], %c2147483647_i32
|
1558 | 1558 |
|
| 1559 | +func.func @_QPtest_real10(%arg0: !fir.box<!fir.array<?x?xf80>> {fir.bindc_name = "a"}) -> f80 { |
| 1560 | + %c10 = arith.constant 10 : index |
| 1561 | + %c1 = arith.constant 1 : index |
| 1562 | + %cst = arith.constant 0.000000e+00 : f80 |
| 1563 | + %0 = fir.declare %arg0 {fortran_attrs = #fir.var_attrs<intent_in>, uniq_name = "_QFtest_real10Ea"} : (!fir.box<!fir.array<?x?xf80>>) -> !fir.box<!fir.array<?x?xf80>> |
| 1564 | + %1 = fir.rebox %0 : (!fir.box<!fir.array<?x?xf80>>) -> !fir.box<!fir.array<?x?xf80>> |
| 1565 | + %2 = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFtest_real10Ei"} |
| 1566 | + %3 = fir.declare %2 {uniq_name = "_QFtest_real10Ei"} : (!fir.ref<i32>) -> !fir.ref<i32> |
| 1567 | + %4 = fir.alloca f80 {bindc_name = "res", uniq_name = "_QFtest_real10Eres"} |
| 1568 | + %5 = fir.declare %4 {uniq_name = "_QFtest_real10Eres"} : (!fir.ref<f80>) -> !fir.ref<f80> |
| 1569 | + %6 = fir.address_of(@_QFtest_real10ECxdp) : !fir.ref<i32> |
| 1570 | + %7 = fir.declare %6 {fortran_attrs = #fir.var_attrs<parameter>, uniq_name = "_QFtest_real10ECxdp"} : (!fir.ref<i32>) -> !fir.ref<i32> |
| 1571 | + fir.store %cst to %5 : !fir.ref<f80> |
| 1572 | + %8 = fir.convert %c1 : (index) -> i32 |
| 1573 | + %9:2 = fir.do_loop %arg1 = %c1 to %c10 step %c1 iter_args(%arg2 = %8) -> (index, i32) { |
| 1574 | + fir.store %arg2 to %3 : !fir.ref<i32> |
| 1575 | + %11 = fir.load %5 : !fir.ref<f80> |
| 1576 | + %12 = fir.load %3 : !fir.ref<i32> |
| 1577 | + %13 = fir.convert %12 : (i32) -> i64 |
| 1578 | + %14 = fir.array_coor %1 %13, %13 : (!fir.box<!fir.array<?x?xf80>>, i64, i64) -> !fir.ref<f80> |
| 1579 | + %15 = fir.load %14 : !fir.ref<f80> |
| 1580 | + %16 = arith.addf %11, %15 fastmath<contract> : f80 |
| 1581 | + fir.store %16 to %5 : !fir.ref<f80> |
| 1582 | + %17 = arith.addi %arg1, %c1 : index |
| 1583 | + %18 = fir.load %3 : !fir.ref<i32> |
| 1584 | + %19 = arith.addi %18, %8 : i32 |
| 1585 | + fir.result %17, %19 : index, i32 |
| 1586 | + } |
| 1587 | + fir.store %9#1 to %3 : !fir.ref<i32> |
| 1588 | + %10 = fir.load %5 : !fir.ref<f80> |
| 1589 | + return %10 : f80 |
| 1590 | +} |
| 1591 | +// CHECK-LABEL: func.func @_QPtest_real10( |
| 1592 | +// CHECK: fir.if |
| 1593 | +// CHECK: fir.do_loop |
| 1594 | +// CHECK-DAG: arith.shrsi %{{[^,]*}}, %[[SHIFT:.*]] : index |
| 1595 | +// CHECK-DAG: %[[SHIFT]] = arith.constant 4 : index |
| 1596 | +// CHECK: fir.result |
| 1597 | +// CHECK: } else { |
| 1598 | +// CHECK: fir.do_loop |
| 1599 | + |
| 1600 | +func.func @_QPtest_complex10(%arg0: !fir.box<!fir.array<?x?x!fir.complex<10>>> {fir.bindc_name = "a"}) -> !fir.complex<10> { |
| 1601 | + %c10 = arith.constant 10 : index |
| 1602 | + %c1 = arith.constant 1 : index |
| 1603 | + %cst = arith.constant 0.000000e+00 : f80 |
| 1604 | + %0 = fir.declare %arg0 {fortran_attrs = #fir.var_attrs<intent_in>, uniq_name = "_QFtest_complex10Ea"} : (!fir.box<!fir.array<?x?x!fir.complex<10>>>) -> !fir.box<!fir.array<?x?x!fir.complex<10>>> |
| 1605 | + %1 = fir.rebox %0 : (!fir.box<!fir.array<?x?x!fir.complex<10>>>) -> !fir.box<!fir.array<?x?x!fir.complex<10>>> |
| 1606 | + %2 = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFtest_complex10Ei"} |
| 1607 | + %3 = fir.declare %2 {uniq_name = "_QFtest_complex10Ei"} : (!fir.ref<i32>) -> !fir.ref<i32> |
| 1608 | + %4 = fir.alloca !fir.complex<10> {bindc_name = "res", uniq_name = "_QFtest_complex10Eres"} |
| 1609 | + %5 = fir.declare %4 {uniq_name = "_QFtest_complex10Eres"} : (!fir.ref<!fir.complex<10>>) -> !fir.ref<!fir.complex<10>> |
| 1610 | + %6 = fir.address_of(@_QFtest_complex10ECxdp) : !fir.ref<i32> |
| 1611 | + %7 = fir.declare %6 {fortran_attrs = #fir.var_attrs<parameter>, uniq_name = "_QFtest_complex10ECxdp"} : (!fir.ref<i32>) -> !fir.ref<i32> |
| 1612 | + %8 = fir.undefined !fir.complex<10> |
| 1613 | + %9 = fir.insert_value %8, %cst, [0 : index] : (!fir.complex<10>, f80) -> !fir.complex<10> |
| 1614 | + %10 = fir.insert_value %9, %cst, [1 : index] : (!fir.complex<10>, f80) -> !fir.complex<10> |
| 1615 | + fir.store %10 to %5 : !fir.ref<!fir.complex<10>> |
| 1616 | + %11 = fir.convert %c1 : (index) -> i32 |
| 1617 | + %12:2 = fir.do_loop %arg1 = %c1 to %c10 step %c1 iter_args(%arg2 = %11) -> (index, i32) { |
| 1618 | + fir.store %arg2 to %3 : !fir.ref<i32> |
| 1619 | + %14 = fir.load %5 : !fir.ref<!fir.complex<10>> |
| 1620 | + %15 = fir.load %3 : !fir.ref<i32> |
| 1621 | + %16 = fir.convert %15 : (i32) -> i64 |
| 1622 | + %17 = fir.array_coor %1 %16, %16 : (!fir.box<!fir.array<?x?x!fir.complex<10>>>, i64, i64) -> !fir.ref<!fir.complex<10>> |
| 1623 | + %18 = fir.load %17 : !fir.ref<!fir.complex<10>> |
| 1624 | + %19 = fir.addc %14, %18 {fastmath = #arith.fastmath<contract>} : !fir.complex<10> |
| 1625 | + fir.store %19 to %5 : !fir.ref<!fir.complex<10>> |
| 1626 | + %20 = arith.addi %arg1, %c1 : index |
| 1627 | + %21 = fir.load %3 : !fir.ref<i32> |
| 1628 | + %22 = arith.addi %21, %11 : i32 |
| 1629 | + fir.result %20, %22 : index, i32 |
| 1630 | + } |
| 1631 | + fir.store %12#1 to %3 : !fir.ref<i32> |
| 1632 | + %13 = fir.load %5 : !fir.ref<!fir.complex<10>> |
| 1633 | + return %13 : !fir.complex<10> |
| 1634 | +} |
| 1635 | +// CHECK-LABEL: func.func @_QPtest_complex10( |
| 1636 | +// CHECK: fir.if |
| 1637 | +// CHECK: fir.do_loop |
| 1638 | +// CHECK-DAG: arith.shrsi %{{[^,]*}}, %[[SHIFT:.*]] : index |
| 1639 | +// CHECK-DAG: %[[SHIFT]] = arith.constant 5 : index |
| 1640 | +// CHECK: fir.result |
| 1641 | +// CHECK: } else { |
| 1642 | +// CHECK: fir.do_loop |
1559 | 1643 |
|
1560 | 1644 | } // End module
|
0 commit comments