@@ -827,4 +827,40 @@ func.func @sub_() {
827
827
omp.terminator
828
828
}
829
829
return
830
- }
830
+ }
831
+
832
+ // -----
833
+
834
+ // CHECK-LABEL: llvm.func @flush_standalone_
835
+ // CHECK-SAME: %[[ARG_A:.*]]: !llvm.ptr<i32> {fir.bindc_name = "a"}, %[[ARG_B:.*]]: !llvm.ptr<i32> {fir.bindc_name = "b"}, %[[ARG_C:.*]]: !llvm.ptr<i32> {fir.bindc_name = "c"})
836
+ func.func @flush_standalone_(%arg0: !fir.ref<i32> {fir.bindc_name = "a"}, %arg1: !fir.ref<i32> {fir.bindc_name = "b"}, %arg2: !fir.ref<i32> {fir.bindc_name = "c"}) {
837
+ // CHECK: omp.flush(%[[ARG_A]], %[[ARG_B]], %[[ARG_C]] : !llvm.ptr<i32>, !llvm.ptr<i32>, !llvm.ptr<i32>)
838
+ omp.flush(%arg0, %arg1, %arg2 : !fir.ref<i32>, !fir.ref<i32>, !fir.ref<i32>)
839
+ // CHECK: omp.flush
840
+ omp.flush
841
+ return
842
+ }
843
+
844
+ // CHECK-LABEL: llvm.func @flush_parallel_
845
+ // CHECK-SAME: %[[ARG_A:.*]]: !llvm.ptr<i32> {fir.bindc_name = "a"}, %[[ARG_B:.*]]: !llvm.ptr<i32> {fir.bindc_name = "b"}, %[[ARG_C:.*]]: !llvm.ptr<i32> {fir.bindc_name = "c"})
846
+ func.func @flush_parallel_(%arg0: !fir.ref<i32> {fir.bindc_name = "a"}, %arg1: !fir.ref<i32> {fir.bindc_name = "b"}, %arg2: !fir.ref<i32> {fir.bindc_name = "c"}) {
847
+ // CHECK: omp.parallel {
848
+ omp.parallel {
849
+ // CHECK: omp.flush(%[[ARG_A]], %[[ARG_B]], %[[ARG_C]] : !llvm.ptr<i32>, !llvm.ptr<i32>, !llvm.ptr<i32>)
850
+ omp.flush(%arg0, %arg1, %arg2 : !fir.ref<i32>, !fir.ref<i32>, !fir.ref<i32>)
851
+ // CHECK: omp.flush
852
+ omp.flush
853
+ // CHECK: %[[A_VAL:.*]] = llvm.load %[[ARG_A]] : !llvm.ptr<i32>
854
+ %0 = fir.load %arg0 : !fir.ref<i32>
855
+ // CHECK: %[[B_VAL:.*]] = llvm.load %[[ARG_B]] : !llvm.ptr<i32>
856
+ %1 = fir.load %arg1 : !fir.ref<i32>
857
+ // CHECK: %[[C_VAL:.*]] = llvm.add %[[A_VAL]], %[[B_VAL]] : i32
858
+ %2 = arith.addi %0, %1 : i32
859
+ // CHECK: llvm.store %[[C_VAL]], %[[ARG_C]] : !llvm.ptr<i32>
860
+ fir.store %2 to %arg2 : !fir.ref<i32>
861
+ // CHECK: omp.terminator
862
+ omp.terminator
863
+ // CHECK: }
864
+ }
865
+ return
866
+ }
0 commit comments