@@ -654,4 +654,42 @@ func.func @_QPs(%arg0: !fir.ref<!fir.complex<4>> {fir.bindc_name = "x"}) {
654
654
%0 = fir.alloca !fir.complex<4> {bindc_name = "v", uniq_name = "_QFsEv"}
655
655
omp.atomic.read %0 = %arg0 : !fir.ref<!fir.complex<4>>, !fir.complex<4>
656
656
return
657
- }
657
+ }
658
+
659
+ // -----
660
+ // Test if llvm.alloca is properly inserted in the omp section
661
+
662
+ //CHECK: %[[CONST:.*]] = llvm.mlir.constant(1 : i64) : i64
663
+ //CHECK: %[[ALLOCA:.*]] = llvm.alloca %[[CONST]] x !llvm.struct<(ptr<i32>, i64, i32, i8, i8, i8, i8)> {bindc_name = "iattr", in_type = !fir.box<!fir.ptr<i32>>, operandSegmentSizes = array<i32: 0, 0>, uniq_name = "_QFEiattr"} : (i64) -> !llvm.ptr<struct<(ptr<i32>, i64, i32, i8, i8, i8, i8)>>
664
+ //CHECK: omp.parallel {
665
+ //CHECK: %[[CONST_1:.*]] = llvm.mlir.constant(1 : i32) : i32
666
+ //CHECK: %[[ALLOCA_1:.*]] = llvm.alloca %[[CONST_1:.*]] x !llvm.struct<(ptr<i32>, i64, i32, i8, i8, i8, i8)> {alignment = 8 : i64} : (i32) -> !llvm.ptr<struct<(ptr<i32>, i64, i32, i8, i8, i8, i8)>>
667
+ //CHECK: %[[LOAD:.*]] = llvm.load %[[ALLOCA]] : !llvm.ptr<struct<(ptr<i32>, i64, i32, i8, i8, i8, i8)>>
668
+ //CHECK: llvm.store %[[LOAD]], %[[ALLOCA_1]] : !llvm.ptr<struct<(ptr<i32>, i64, i32, i8, i8, i8, i8)>>
669
+ //CHECK: %[[GEP:.*]] = llvm.getelementptr %[[ALLOCA_1]][0, 0] : (!llvm.ptr<struct<(ptr<i32>, i64, i32, i8, i8, i8, i8)>>) -> !llvm.ptr<ptr<i32>>
670
+ //CHECK: %[[LOAD_2:.*]] = llvm.load %[[GEP]] : !llvm.ptr<ptr<i32>>
671
+ //CHECK: omp.terminator
672
+ //CHECK: }
673
+
674
+ func.func @_QQmain() attributes {fir.bindc_name = "mn"} {
675
+ %0 = fir.alloca !fir.box<!fir.ptr<i32>> {bindc_name = "iattr", uniq_name = "_QFEiattr"}
676
+ %1 = fir.zero_bits !fir.ptr<i32>
677
+ %2 = fir.embox %1 : (!fir.ptr<i32>) -> !fir.box<!fir.ptr<i32>>
678
+ fir.store %2 to %0 : !fir.ref<!fir.box<!fir.ptr<i32>>>
679
+ %3 = fir.address_of(@_QFEx) : !fir.ref<i32>
680
+ %4 = fir.alloca i32 {bindc_name = "y", uniq_name = "_QFEy"}
681
+ %5 = fir.embox %3 : (!fir.ref<i32>) -> !fir.box<!fir.ptr<i32>>
682
+ fir.store %5 to %0 : !fir.ref<!fir.box<!fir.ptr<i32>>>
683
+ omp.parallel {
684
+ %6 = fir.load %4 : !fir.ref<i32>
685
+ %7 = fir.load %0 : !fir.ref<!fir.box<!fir.ptr<i32>>>
686
+ %8 = fir.box_addr %7 : (!fir.box<!fir.ptr<i32>>) -> !fir.ptr<i32>
687
+ fir.store %6 to %8 : !fir.ptr<i32>
688
+ omp.terminator
689
+ }
690
+ return
691
+ }
692
+ fir.global internal @_QFEx target : i32 {
693
+ %0 = fir.zero_bits i32
694
+ fir.has_value %0 : i32
695
+ }
0 commit comments