|
1 |
| -// RUN: fir-opt --split-input-file --cfg-conversion --fir-to-llvm-ir="target=aarch64-unknown-linux-gnu" %s | FileCheck %s |
| 1 | +// RUN: fir-opt --split-input-file --cg-rewrite --cfg-conversion --fir-to-llvm-ir="target=aarch64-unknown-linux-gnu" %s | FileCheck %s |
2 | 2 |
|
3 | 3 | func.func @_QPsb1(%arg0: !fir.ref<i32> {fir.bindc_name = "n"}, %arg1: !fir.ref<!fir.array<?xi32>> {fir.bindc_name = "arr"}) {
|
4 | 4 | %c1_i64 = arith.constant 1 : i64
|
@@ -1006,3 +1006,84 @@ func.func @omp_map_info_nested_derived_type_explicit_member_conversion(%arg0 : !
|
1006 | 1006 | }
|
1007 | 1007 |
|
1008 | 1008 | // -----
|
| 1009 | + |
| 1010 | +// CHECK-LABEL: llvm.func @omp_map_common_block_using_common_block_symbol |
| 1011 | + |
| 1012 | +// CHECK: %[[ADDR_OF:.*]] = llvm.mlir.addressof @var_common_ : !llvm.ptr |
| 1013 | +// CHECK: %[[CB_MAP:.*]] = omp.map.info var_ptr(%[[ADDR_OF]] : !llvm.ptr, !llvm.array<8 x i8>) map_clauses(tofrom) capture(ByRef) -> !llvm.ptr {name = "var_common"} |
| 1014 | +// CHECK: omp.target map_entries(%[[CB_MAP]] -> %[[ARG0:.*]] : !llvm.ptr) { |
| 1015 | +// CHECK: ^bb0(%[[ARG0]]: !llvm.ptr): |
| 1016 | +// CHECK: %[[VAR_2_OFFSET:.*]] = llvm.mlir.constant(4 : index) : i64 |
| 1017 | +// CHECK: %[[VAR_1_OFFSET:.*]] = llvm.mlir.constant(0 : index) : i64 |
| 1018 | +// CHECK: %{{.*}} = llvm.getelementptr %[[ARG0]][%[[VAR_1_OFFSET]]] : (!llvm.ptr, i64) -> !llvm.ptr, i8 |
| 1019 | +// CHECK: %{{.*}} = llvm.getelementptr %[[ARG0]][%[[VAR_2_OFFSET]]] : (!llvm.ptr, i64) -> !llvm.ptr, i8 |
| 1020 | + |
| 1021 | +func.func @omp_map_common_block_using_common_block_symbol() { |
| 1022 | + %0 = fir.address_of(@var_common_) : !fir.ref<!fir.array<8xi8>> |
| 1023 | + %1 = omp.map.info var_ptr(%0 : !fir.ref<!fir.array<8xi8>>, !fir.array<8xi8>) map_clauses(tofrom) capture(ByRef) -> !fir.ref<!fir.array<8xi8>> {name = "var_common"} |
| 1024 | + omp.target map_entries(%1 -> %arg0 : !fir.ref<!fir.array<8xi8>>) { |
| 1025 | + ^bb0(%arg0: !fir.ref<!fir.array<8xi8>>): |
| 1026 | + %c4_0 = arith.constant 4 : index |
| 1027 | + %c0_1 = arith.constant 0 : index |
| 1028 | + %c20_i32 = arith.constant 20 : i32 |
| 1029 | + %2 = fir.convert %arg0 : (!fir.ref<!fir.array<8xi8>>) -> !fir.ref<!fir.array<?xi8>> |
| 1030 | + %3 = fir.coordinate_of %2, %c0_1 : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8> |
| 1031 | + %4 = fir.convert %3 : (!fir.ref<i8>) -> !fir.ref<i32> |
| 1032 | + %5 = fir.declare %4 {uniq_name = "_QFEvar1"} : (!fir.ref<i32>) -> !fir.ref<i32> |
| 1033 | + %6 = fir.convert %arg0 : (!fir.ref<!fir.array<8xi8>>) -> !fir.ref<!fir.array<?xi8>> |
| 1034 | + %7 = fir.coordinate_of %6, %c4_0 : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8> |
| 1035 | + %8 = fir.convert %7 : (!fir.ref<i8>) -> !fir.ref<i32> |
| 1036 | + %9 = fir.declare %8 {uniq_name = "_QFEvar2"} : (!fir.ref<i32>) -> !fir.ref<i32> |
| 1037 | + %10 = fir.load %5 : !fir.ref<i32> |
| 1038 | + %11 = fir.load %9 : !fir.ref<i32> |
| 1039 | + %12 = arith.addi %10, %c20_i32 : i32 |
| 1040 | + fir.store %12 to %9 : !fir.ref<i32> |
| 1041 | + omp.terminator |
| 1042 | + } |
| 1043 | + return |
| 1044 | + } |
| 1045 | + |
| 1046 | +fir.global common @var_common_(dense<0> : vector<8xi8>) {alignment = 4 : i64} : !fir.array<8xi8> |
| 1047 | + |
| 1048 | +// ----- |
| 1049 | + |
| 1050 | +// CHECK-LABEL: llvm.func @omp_map_common_block_using_common_block_members |
| 1051 | + |
| 1052 | +// CHECK: %[[VAR_2_OFFSET:.*]] = llvm.mlir.constant(4 : index) : i64 |
| 1053 | +// CHECK: %[[VAR_1_OFFSET:.*]] = llvm.mlir.constant(0 : index) : i64 |
| 1054 | +// CHECK: %[[ADDR_OF:.*]] = llvm.mlir.addressof @var_common_ : !llvm.ptr |
| 1055 | +// CHECK: %[[VAR_1_CB_GEP:.*]] = llvm.getelementptr %[[ADDR_OF]][%[[VAR_1_OFFSET]]] : (!llvm.ptr, i64) -> !llvm.ptr, i8 |
| 1056 | +// CHECK: %[[VAR_2_CB_GEP:.*]] = llvm.getelementptr %[[ADDR_OF]][%[[VAR_2_OFFSET]]] : (!llvm.ptr, i64) -> !llvm.ptr, i8 |
| 1057 | +// CHECK: %[[MAP_CB_VAR_1:.*]] = omp.map.info var_ptr(%[[VAR_1_CB_GEP]] : !llvm.ptr, i32) map_clauses(tofrom) capture(ByRef) -> !llvm.ptr {name = "var1"} |
| 1058 | +// CHECK: %[[MAP_CB_VAR_2:.*]] = omp.map.info var_ptr(%[[VAR_2_CB_GEP]] : !llvm.ptr, i32) map_clauses(tofrom) capture(ByRef) -> !llvm.ptr {name = "var2"} |
| 1059 | +// CHECK: omp.target map_entries(%[[MAP_CB_VAR_1]] -> %[[ARG0:.*]], %[[MAP_CB_VAR_2]] -> %[[ARG1:.*]] : !llvm.ptr, !llvm.ptr) { |
| 1060 | +// CHECK: ^bb0(%[[ARG0]]: !llvm.ptr, %[[ARG1]]: !llvm.ptr): |
| 1061 | + |
| 1062 | +func.func @omp_map_common_block_using_common_block_members() { |
| 1063 | + %c4 = arith.constant 4 : index |
| 1064 | + %c0 = arith.constant 0 : index |
| 1065 | + %0 = fir.address_of(@var_common_) : !fir.ref<!fir.array<8xi8>> |
| 1066 | + %1 = fir.convert %0 : (!fir.ref<!fir.array<8xi8>>) -> !fir.ref<!fir.array<?xi8>> |
| 1067 | + %2 = fir.coordinate_of %1, %c0 : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8> |
| 1068 | + %3 = fir.convert %2 : (!fir.ref<i8>) -> !fir.ref<i32> |
| 1069 | + %4 = fir.declare %3 {uniq_name = "_QFmodify_2Evar1"} : (!fir.ref<i32>) -> !fir.ref<i32> |
| 1070 | + %5 = fir.convert %0 : (!fir.ref<!fir.array<8xi8>>) -> !fir.ref<!fir.array<?xi8>> |
| 1071 | + %6 = fir.coordinate_of %5, %c4 : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8> |
| 1072 | + %7 = fir.convert %6 : (!fir.ref<i8>) -> !fir.ref<i32> |
| 1073 | + %8 = fir.declare %7 {uniq_name = "_QFmodify_2Evar2"} : (!fir.ref<i32>) -> !fir.ref<i32> |
| 1074 | + %9 = omp.map.info var_ptr(%4 : !fir.ref<i32>, i32) map_clauses(tofrom) capture(ByRef) -> !fir.ref<i32> {name = "var1"} |
| 1075 | + %10 = omp.map.info var_ptr(%8 : !fir.ref<i32>, i32) map_clauses(tofrom) capture(ByRef) -> !fir.ref<i32> {name = "var2"} |
| 1076 | + omp.target map_entries(%9 -> %arg0, %10 -> %arg1 : !fir.ref<i32>, !fir.ref<i32>) { |
| 1077 | + ^bb0(%arg0: !fir.ref<i32>, %arg1: !fir.ref<i32>): |
| 1078 | + %c10_i32 = arith.constant 10 : i32 |
| 1079 | + %11 = fir.declare %arg0 {uniq_name = "_QFmodify_2Evar1"} : (!fir.ref<i32>) -> !fir.ref<i32> |
| 1080 | + %12 = fir.declare %arg1 {uniq_name = "_QFmodify_2Evar2"} : (!fir.ref<i32>) -> !fir.ref<i32> |
| 1081 | + %13 = fir.load %11 : !fir.ref<i32> |
| 1082 | + %14 = arith.muli %13, %c10_i32 : i32 |
| 1083 | + fir.store %14 to %12 : !fir.ref<i32> |
| 1084 | + omp.terminator |
| 1085 | + } |
| 1086 | + return |
| 1087 | +} |
| 1088 | + |
| 1089 | +fir.global common @var_common_(dense<0> : vector<8xi8>) {alignment = 4 : i64} : !fir.array<8xi8> |
0 commit comments