Skip to content

Commit d5b9c27

Browse files
Adjust mlir/test/Dialect/LLVMIR/omp-offload-privatization-prepare.mlir after change to using the init and copy regions
1 parent 3109e4f commit d5b9c27

File tree

1 file changed

+38
-93
lines changed

1 file changed

+38
-93
lines changed

mlir/test/Dialect/LLVMIR/omp-offload-privatization-prepare.mlir

Lines changed: 38 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -2,51 +2,21 @@
22

33
module attributes {dlti.dl_spec = #dlti.dl_spec<!llvm.ptr<270> = dense<32> : vector<4xi64>, !llvm.ptr<271> = dense<32> : vector<4xi64>, !llvm.ptr<272> = dense<64> : vector<4xi64>, i64 = dense<64> : vector<2xi64>, i128 = dense<128> : vector<2xi64>, f80 = dense<128> : vector<2xi64>, !llvm.ptr = dense<64> : vector<4xi64>, i1 = dense<8> : vector<2xi64>, i8 = dense<8> : vector<2xi64>, i16 = dense<16> : vector<2xi64>, i32 = dense<32> : vector<2xi64>, f16 = dense<16> : vector<2xi64>, f64 = dense<64> : vector<2xi64>, f128 = dense<128> : vector<2xi64>, "dlti.endianness" = "little", "dlti.mangling_mode" = "e", "dlti.legal_int_widths" = array<i32: 8, 16, 32, 64>, "dlti.stack_alignment" = 128 : i64>} {
44
llvm.func @free(!llvm.ptr)
5-
omp.private {type = private} @privatizer : !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)> init {
5+
llvm.func @malloc(i64) -> !llvm.ptr
6+
7+
omp.private {type = firstprivate} @firstprivatizer : !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)> init {
68
^bb0(%arg0: !llvm.ptr, %arg1: !llvm.ptr):
7-
%0 = llvm.mlir.constant(48 : i32) : i32
8-
"llvm.intr.memcpy"(%arg1, %arg0, %0) <{isVolatile = false}> : (!llvm.ptr, !llvm.ptr, i32) -> ()
9+
%0 = llvm.mlir.constant(48 : i64) : i64
10+
%1 = llvm.call @malloc(%0) : (i64) -> !llvm.ptr
11+
%2 = llvm.getelementptr %arg1[0, 0] : (!llvm.ptr) -> !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>
12+
llvm.store %1, %2 : !llvm.ptr, !llvm.ptr
913
omp.yield(%arg1 : !llvm.ptr)
10-
}
11-
12-
omp.private {type = firstprivate} @firstprivatizer : !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)> copy {
14+
} copy {
1315
^bb0(%arg0: !llvm.ptr, %arg1: !llvm.ptr):
1416
%0 = llvm.mlir.constant(48 : i32) : i32
1517
"llvm.intr.memcpy"(%arg1, %arg0, %0) <{isVolatile = false}> : (!llvm.ptr, !llvm.ptr, i32) -> ()
1618
omp.yield(%arg1 : !llvm.ptr)
1719
}
18-
19-
llvm.func internal @private_test(%arg0: !llvm.ptr {fir.bindc_name = "ptr0"}, %arg1: !llvm.ptr {fir.bindc_name = "ptr1"}) {
20-
%0 = llvm.mlir.constant(1 : i32) : i32
21-
%1 = llvm.mlir.constant(0 : index) : i64
22-
%5 = llvm.alloca %0 x !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)> {alignment = 8 : i64} : (i32) -> !llvm.ptr
23-
%19 = llvm.alloca %0 x !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)> {bindc_name = "local"} : (i32) -> !llvm.ptr
24-
%21 = llvm.alloca %0 x i32 {bindc_name = "i"} : (i32) -> !llvm.ptr
25-
%33 = llvm.mlir.undef : !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>
26-
llvm.store %33, %19 : !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>, !llvm.ptr
27-
llvm.store %0, %21 : i32, !llvm.ptr
28-
%124 = omp.map.info var_ptr(%21 : !llvm.ptr, i32) map_clauses(implicit, exit_release_or_enter_alloc) capture(ByCopy) -> !llvm.ptr {name = "i"}
29-
%150 = llvm.getelementptr %19[0, 7, %1, 0] : (!llvm.ptr, i64) -> !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>
30-
%151 = llvm.load %150 : !llvm.ptr -> i64
31-
%152 = llvm.getelementptr %19[0, 7, %1, 1] : (!llvm.ptr, i64) -> !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>
32-
%153 = llvm.load %152 : !llvm.ptr -> i64
33-
%154 = llvm.getelementptr %19[0, 7, %1, 2] : (!llvm.ptr, i64) -> !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>
34-
%155 = llvm.load %154 : !llvm.ptr -> i64
35-
%156 = llvm.sub %153, %1 : i64
36-
%157 = omp.map.bounds lower_bound(%1 : i64) upper_bound(%156 : i64) extent(%153 : i64) stride(%155 : i64) start_idx(%151 : i64) {stride_in_bytes = true}
37-
%158 = llvm.getelementptr %19[0, 0] : (!llvm.ptr) -> !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>
38-
%159 = omp.map.info var_ptr(%19 : !llvm.ptr, i32) map_clauses(descriptor_base_addr, to) capture(ByRef) var_ptr_ptr(%158 : !llvm.ptr) bounds(%157) -> !llvm.ptr {name = ""}
39-
%160 = omp.map.info var_ptr(%19 : !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>) map_clauses(always, descriptor, to) capture(ByRef) members(%159 : [0] : !llvm.ptr) -> !llvm.ptr
40-
omp.target nowait map_entries(%124 -> %arg2, %160 -> %arg5, %159 -> %arg8 : !llvm.ptr, !llvm.ptr, !llvm.ptr) private(@privatizer %19 -> %arg9 [map_idx=1] : !llvm.ptr) {
41-
omp.terminator
42-
}
43-
%166 = llvm.mlir.constant(48 : i32) : i32
44-
%167 = llvm.getelementptr %19[0, 0] : (!llvm.ptr) -> !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>
45-
%168 = llvm.load %167 : !llvm.ptr -> !llvm.ptr
46-
llvm.call @free(%168) : (!llvm.ptr) -> ()
47-
llvm.return
48-
}
49-
5020
llvm.func internal @firstprivate_test(%arg0: !llvm.ptr {fir.bindc_name = "ptr0"}, %arg1: !llvm.ptr {fir.bindc_name = "ptr1"}) {
5121
%0 = llvm.mlir.constant(1 : i32) : i32
5222
%1 = llvm.mlir.constant(0 : index) : i64
@@ -79,10 +49,12 @@ module attributes {dlti.dl_spec = #dlti.dl_spec<!llvm.ptr<270> = dense<32> : vec
7949
}
8050
}
8151

82-
// CHECK-LABEL: llvm.func @malloc(i64) -> !llvm.ptr
83-
// CHECK: llvm.func @free(!llvm.ptr)
52+
// CHECK-LABEL: llvm.func @free(!llvm.ptr)
53+
// CHECK: llvm.func @malloc(i64) -> !llvm.ptr
8454

85-
// CHECK-LABEL: llvm.func internal @private_test(
55+
// CHECK-LABEL: llvm.func internal @firstprivate_test(
56+
// CHECK-SAME: %[[ARG0:.*]]: !llvm.ptr {fir.bindc_name = "ptr0"},
57+
// CHECK-SAME: %[[ARG1:.*]]: !llvm.ptr {fir.bindc_name = "ptr1"}) {
8658
// CHECK: %[[VAL_0:.*]] = llvm.mlir.constant(1 : i32) : i32
8759
// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(0 : index) : i64
8860
// CHECK: %[[VAL_2:.*]] = llvm.alloca %[[VAL_0]] x !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)> {alignment = 8 : i64} : (i32) -> !llvm.ptr
@@ -102,62 +74,35 @@ module attributes {dlti.dl_spec = #dlti.dl_spec<!llvm.ptr<270> = dense<32> : vec
10274
// CHECK: %[[VAL_14:.*]] = llvm.load %[[VAL_13]] : !llvm.ptr -> i64
10375
// CHECK: %[[VAL_15:.*]] = llvm.sub %[[VAL_12]], %[[VAL_1]] : i64
10476
// CHECK: %[[VAL_16:.*]] = omp.map.bounds lower_bound(%[[VAL_1]] : i64) upper_bound(%[[VAL_15]] : i64) extent(%[[VAL_12]] : i64) stride(%[[VAL_14]] : i64) start_idx(%[[VAL_10]] : i64) {stride_in_bytes = true}
105-
// CHECK: %[[VAL_17:.*]] = llvm.load %[[STACK]] : !llvm.ptr -> !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>
106-
// CHECK: llvm.store %[[VAL_17]], %[[HEAP]] : !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>, !llvm.ptr
107-
// CHECK: %[[VAL_18:.*]] = llvm.getelementptr %[[HEAP]][0, 0] : (!llvm.ptr) -> !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>
108-
// CHECK: %[[VAL_19:.*]] = omp.map.info var_ptr(%[[HEAP]] : !llvm.ptr, i32) map_clauses(to) capture(ByRef) var_ptr_ptr(%[[VAL_18]] : !llvm.ptr) bounds(%[[VAL_16]]) -> !llvm.ptr {name = ""}
109-
// CHECK: %[[VAL_20:.*]] = omp.map.info var_ptr(%[[HEAP]] : !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>) map_clauses(always, to) capture(ByRef) members(%[[VAL_19]] : [0] : !llvm.ptr) -> !llvm.ptr
110-
// CHECK: omp.target nowait map_entries(%[[VAL_8]] -> %[[VAL_21:.*]], %[[VAL_20]] -> %[[VAL_22:.*]], %[[VAL_19]] -> %[[VAL_23:.*]] : !llvm.ptr, !llvm.ptr, !llvm.ptr) private(@privatizer %[[HEAP]] -> %[[VAL_24:.*]] [map_idx=1] : !llvm.ptr) {
77+
// CHECK: %[[VAL_17:.*]] = llvm.call @firstprivatizer_init(%[[STACK]], %[[HEAP]]) : (!llvm.ptr, !llvm.ptr) -> !llvm.ptr
78+
// CHECK: %[[VAL_18:.*]] = llvm.call @firstprivatizer_copy(%[[STACK]], %[[VAL_17]]) : (!llvm.ptr, !llvm.ptr) -> !llvm.ptr
79+
// CHECK: %[[VAL_19:.*]] = llvm.getelementptr %[[HEAP]][0, 0] : (!llvm.ptr) -> !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>
80+
// CHECK: %[[VAL_20:.*]] = omp.map.info var_ptr(%[[HEAP]] : !llvm.ptr, i32) map_clauses(to) capture(ByRef) var_ptr_ptr(%[[VAL_19]] : !llvm.ptr) bounds(%[[VAL_16]]) -> !llvm.ptr {name = ""}
81+
// CHECK: %[[VAL_21:.*]] = omp.map.info var_ptr(%[[HEAP]] : !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>) map_clauses(always, to) capture(ByRef) members(%[[VAL_20]] : [0] : !llvm.ptr) -> !llvm.ptr
82+
// CHECK: omp.target nowait map_entries(%[[VAL_8]] -> %[[VAL_22:.*]], %[[VAL_21]] -> %[[VAL_23:.*]], %[[VAL_20]] -> %[[VAL_24:.*]] : !llvm.ptr, !llvm.ptr, !llvm.ptr) private(@firstprivatizer %[[HEAP]] -> %[[VAL_25:.*]] [map_idx=1] : !llvm.ptr) {
11183
// CHECK: omp.terminator
11284
// CHECK: }
113-
// CHECK: %[[VAL_26:.*]] = llvm.getelementptr %[[STACK]][0, 0] : (!llvm.ptr) -> !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>
114-
// CHECK: %[[VAL_27:.*]] = llvm.load %[[VAL_26]] : !llvm.ptr -> !llvm.ptr
115-
// CHECK: llvm.call @free(%[[VAL_27]]) : (!llvm.ptr) -> ()
85+
// CHECK: %[[VAL_26:.*]] = llvm.mlir.constant(48 : i32) : i32
86+
// CHECK: %[[VAL_27:.*]] = llvm.getelementptr %[[STACK]][0, 0] : (!llvm.ptr) -> !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>
87+
// CHECK: %[[VAL_28:.*]] = llvm.load %[[VAL_27]] : !llvm.ptr -> !llvm.ptr
88+
// CHECK: llvm.call @free(%[[VAL_28]]) : (!llvm.ptr) -> ()
11689
// CHECK: llvm.return
11790
// CHECK: }
11891

119-
// CHECK-LABEL: llvm.func internal @firstprivate_test(
120-
// CHECK: %[[VAL_0:.*]] = llvm.mlir.constant(1 : i32) : i32
121-
// CHECK: %[[VAL_1:.*]] = llvm.mlir.constant(0 : index) : i64
122-
// CHECK: %[[VAL_2:.*]] = llvm.alloca %[[VAL_0]] x !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)> {alignment = 8 : i64} : (i32) -> !llvm.ptr
123-
// CHECK: %[[VAL_3:.*]] = llvm.mlir.constant(48 : i64) : i64
124-
// CHECK: %[[HEAP:.*]] = llvm.call @malloc(%[[VAL_3]]) : (i64) -> !llvm.ptr
125-
// CHECK: %[[STACK:.*]] = llvm.alloca %[[VAL_0]] x !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)> {bindc_name = "local"} : (i32) -> !llvm.ptr
126-
// CHECK: %[[VAL_6:.*]] = llvm.alloca %[[VAL_0]] x i32 {bindc_name = "i"} : (i32) -> !llvm.ptr
127-
// CHECK: %[[VAL_7:.*]] = llvm.mlir.undef : !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>
128-
// CHECK: llvm.store %[[VAL_7]], %[[STACK]] : !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>, !llvm.ptr
129-
// CHECK: llvm.store %[[VAL_0]], %[[VAL_6]] : i32, !llvm.ptr
130-
// CHECK: %[[VAL_8:.*]] = omp.map.info var_ptr(%[[VAL_6]] : !llvm.ptr, i32) map_clauses(implicit, exit_release_or_enter_alloc) capture(ByCopy) -> !llvm.ptr {name = "i"}
131-
// CHECK: %[[VAL_9:.*]] = llvm.getelementptr %[[STACK]][0, 7, %[[VAL_1]], 0] : (!llvm.ptr, i64) -> !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>
132-
// CHECK: %[[VAL_10:.*]] = llvm.load %[[VAL_9]] : !llvm.ptr -> i64
133-
// CHECK: %[[VAL_11:.*]] = llvm.getelementptr %[[STACK]][0, 7, %[[VAL_1]], 1] : (!llvm.ptr, i64) -> !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>
134-
// CHECK: %[[VAL_12:.*]] = llvm.load %[[VAL_11]] : !llvm.ptr -> i64
135-
// CHECK: %[[VAL_13:.*]] = llvm.getelementptr %[[STACK]][0, 7, %[[VAL_1]], 2] : (!llvm.ptr, i64) -> !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>
136-
// CHECK: %[[VAL_14:.*]] = llvm.load %[[VAL_13]] : !llvm.ptr -> i64
137-
// CHECK: %[[VAL_15:.*]] = llvm.sub %[[VAL_12]], %[[VAL_1]] : i64
138-
// CHECK: %[[VAL_16:.*]] = omp.map.bounds lower_bound(%[[VAL_1]] : i64) upper_bound(%[[VAL_15]] : i64) extent(%[[VAL_12]] : i64) stride(%[[VAL_14]] : i64) start_idx(%[[VAL_10]] : i64) {stride_in_bytes = true}
139-
// CHECK: %[[VAL_17:.*]] = llvm.load %[[STACK]] : !llvm.ptr -> !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>
140-
// CHECK: llvm.store %[[VAL_17]], %[[HEAP]] : !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>, !llvm.ptr
141-
// CHECK: %[[VAL_18:.*]] = llvm.getelementptr %[[STACK]][0, 0] : (!llvm.ptr) -> !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>
142-
// CHECK: %[[VAL_19:.*]] = llvm.mlir.constant(1 : i64) : i64
143-
// CHECK: %[[VAL_20:.*]] = llvm.sub %[[VAL_15]], %[[VAL_1]] : i64
144-
// CHECK: %[[VAL_21:.*]] = llvm.add %[[VAL_20]], %[[VAL_19]] : i64
145-
// CHECK: %[[VAL_22:.*]] = llvm.mul %[[VAL_19]], %[[VAL_21]] : i64
146-
// CHECK: %[[VAL_23:.*]] = llvm.mlir.constant(4 : i64) : i64
147-
// CHECK: %[[VAL_24:.*]] = llvm.mul %[[VAL_22]], %[[VAL_23]] : i64
148-
// CHECK: %[[NEW_DATA_PTR:.*]] = llvm.call @malloc(%[[VAL_24]]) : (i64) -> !llvm.ptr
149-
// CHECK: %[[OLD_DATA_PTR:.*]] = llvm.load %[[VAL_18]] : !llvm.ptr -> !llvm.ptr
150-
// CHECK: "llvm.intr.memcpy"(%[[NEW_DATA_PTR]], %[[OLD_DATA_PTR]], %[[VAL_24]]) <{isVolatile = false}> : (!llvm.ptr, !llvm.ptr, i64) -> ()
151-
// CHECK: %[[VAL_27:.*]] = llvm.getelementptr %[[HEAP]][0, 0] : (!llvm.ptr) -> !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>
152-
// CHECK: llvm.store %[[NEW_DATA_PTR]], %[[VAL_27]] : !llvm.ptr, !llvm.ptr
153-
// CHECK: %[[VAL_28:.*]] = omp.map.info var_ptr(%[[HEAP]] : !llvm.ptr, i32) map_clauses(to) capture(ByRef) var_ptr_ptr(%[[VAL_27]] : !llvm.ptr) bounds(%[[VAL_16]]) -> !llvm.ptr {name = ""}
154-
// CHECK: %[[VAL_29:.*]] = omp.map.info var_ptr(%[[HEAP]] : !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>) map_clauses(always, to) capture(ByRef) members(%[[VAL_28]] : [0] : !llvm.ptr) -> !llvm.ptr
155-
// CHECK: omp.target nowait map_entries(%[[VAL_8]] -> %[[VAL_30:.*]], %[[VAL_29]] -> %[[VAL_31:.*]], %[[VAL_28]] -> %[[VAL_32:.*]] : !llvm.ptr, !llvm.ptr, !llvm.ptr) private(@firstprivatizer %[[HEAP]] -> %[[VAL_33:.*]] [map_idx=1] : !llvm.ptr) {
156-
// CHECK: omp.terminator
92+
// CHECK-LABEL: llvm.func @firstprivatizer_init(
93+
// CHECK-SAME: %[[ARG0:.*]]: !llvm.ptr,
94+
// CHECK-SAME: %[[ARG1:.*]]: !llvm.ptr) -> !llvm.ptr attributes {always_inline} {
95+
// CHECK: %[[VAL_0:.*]] = llvm.mlir.constant(48 : i64) : i64
96+
// CHECK: %[[VAL_1:.*]] = llvm.call @malloc(%[[VAL_0]]) : (i64) -> !llvm.ptr
97+
// CHECK: %[[VAL_2:.*]] = llvm.getelementptr %[[ARG1]][0, 0] : (!llvm.ptr) -> !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>
98+
// CHECK: llvm.store %[[VAL_1]], %[[VAL_2]] : !llvm.ptr, !llvm.ptr
99+
// CHECK: llvm.return %[[ARG1]] : !llvm.ptr
157100
// CHECK: }
158-
// CHECK: %[[VAL_34:.*]] = llvm.mlir.constant(48 : i32) : i32
159-
// CHECK: %[[VAL_35:.*]] = llvm.getelementptr %[[STACK]][0, 0] : (!llvm.ptr) -> !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>
160-
// CHECK: %[[VAL_36:.*]] = llvm.load %[[VAL_35]] : !llvm.ptr -> !llvm.ptr
161-
// CHECK: llvm.call @free(%[[VAL_36]]) : (!llvm.ptr) -> ()
162-
// CHECK: llvm.return
101+
102+
// CHECK-LABEL: llvm.func @firstprivatizer_copy(
103+
// CHECK-SAME: %[[ARG0:.*]]: !llvm.ptr,
104+
// CHECK-SAME: %[[ARG1:.*]]: !llvm.ptr) -> !llvm.ptr attributes {always_inline} {
105+
// CHECK: %[[VAL_0:.*]] = llvm.mlir.constant(48 : i32) : i32
106+
// CHECK: "llvm.intr.memcpy"(%[[ARG1]], %[[ARG0]], %[[VAL_0]]) <{isVolatile = false}> : (!llvm.ptr, !llvm.ptr, i32) -> ()
107+
// CHECK: llvm.return %[[ARG1]] : !llvm.ptr
163108
// CHECK: }

0 commit comments

Comments
 (0)