Files
TheRock/compiler/amd-llvm/mlir/test/Target/LLVMIR/openmp-composite-simd-if.mlir
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

98 lines
5.4 KiB
MLIR

// RUN: mlir-translate -mlir-to-llvmir %s | FileCheck %s
llvm.func @_QPfoo(%arg0: !llvm.ptr {fir.bindc_name = "array", llvm.nocapture}, %arg1: !llvm.ptr {fir.bindc_name = "t", llvm.nocapture}) {
%0 = llvm.mlir.constant(0 : i64) : i32
%1 = llvm.mlir.constant(1 : i32) : i32
%2 = llvm.mlir.constant(10 : i64) : i64
%3 = llvm.mlir.constant(1 : i64) : i64
%4 = llvm.alloca %3 x i32 {bindc_name = "i", pinned} : (i64) -> !llvm.ptr
%5 = llvm.load %arg1 : !llvm.ptr -> i32
%6 = llvm.icmp "ne" %5, %0 : i32
%7 = llvm.trunc %2 : i64 to i32
omp.wsloop {
omp.simd if(%6) {
omp.loop_nest (%arg2) : i32 = (%1) to (%7) inclusive step (%1) {
llvm.store %arg2, %4 : i32, !llvm.ptr
%8 = llvm.load %4 : !llvm.ptr -> i32
%9 = llvm.sext %8 : i32 to i64
%10 = llvm.getelementptr %arg0[%9] : (!llvm.ptr, i64) -> !llvm.ptr, i32
llvm.store %8, %10 : i32, !llvm.ptr
omp.yield
}
} {omp.composite}
} {omp.composite}
llvm.return
}
// CHECK-LABEL: @_QPfoo
// ...
// CHECK: omp_loop.preheader: ; preds =
// CHECK: store i32 0, ptr %[[LB_ADDR:.*]], align 4
// CHECK: store i32 9, ptr %[[UB_ADDR:.*]], align 4
// CHECK: store i32 1, ptr %[[STEP_ADDR:.*]], align 4
// CHECK: %[[VAL_15:.*]] = call i32 @__kmpc_global_thread_num(ptr @2)
// CHECK: call void @__kmpc_for_static_init_4u(ptr @1, i32 %[[VAL_15]], i32 34, ptr %{{.*}}, ptr %[[LB_ADDR]], ptr %[[UB_ADDR]], ptr %[[STEP_ADDR]], i32 1, i32 0)
// CHECK: %[[LB:.*]] = load i32, ptr %[[LB_ADDR]], align 4
// CHECK: %[[UB:.*]] = load i32, ptr %[[UB_ADDR]], align 4
// CHECK: %[[VAL_18:.*]] = sub i32 %[[UB]], %[[LB]]
// CHECK: %[[COUNT:.*]] = add i32 %[[VAL_18]], 1
// CHECK: br label %[[OMP_LOOP_HEADER:.*]]
// CHECK: omp_loop.header: ; preds = %[[OMP_LOOP_INC:.*]], %[[OMP_LOOP_PREHEADER:.*]]
// CHECK: %[[IV:.*]] = phi i32 [ 0, %[[OMP_LOOP_PREHEADER]] ], [ %[[NEW_IV:.*]], %[[OMP_LOOP_INC]] ]
// CHECK: br label %[[OMP_LOOP_COND:.*]]
// CHECK: omp_loop.cond: ; preds = %[[OMP_LOOP_HEADER]]
// CHECK: %[[VAL_25:.*]] = icmp ult i32 %[[IV]], %[[COUNT]]
// CHECK: br i1 %[[VAL_25]], label %[[OMP_LOOP_BODY:.*]], label %[[OMP_LOOP_EXIT:.*]]
// CHECK: omp_loop.body: ; preds = %[[OMP_LOOP_COND]]
// CHECK: %[[VAL_28:.*]] = add i32 %[[IV]], %[[LB]]
// This is the IF clause:
// CHECK: br i1 %{{.*}}, label %[[SIMD_IF_THEN:.*]], label %[[SIMD_IF_ELSE:.*]]
// CHECK: simd.if.then: ; preds = %[[OMP_LOOP_BODY]]
// CHECK: %[[VAL_29:.*]] = mul i32 %[[VAL_28]], 1
// CHECK: %[[VAL_30:.*]] = add i32 %[[VAL_29]], 1
// CHECK: br label %[[VAL_33:.*]]
// CHECK: omp.loop_nest.region: ; preds = %[[SIMD_IF_THEN]]
// This version contains !llvm.access.group metadata for SIMD
// CHECK: store i32 %[[VAL_30]], ptr %{{.*}}, align 4, !llvm.access.group !1
// CHECK: %[[VAL_34:.*]] = load i32, ptr %{{.*}}, align 4, !llvm.access.group !1
// CHECK: %[[VAL_35:.*]] = sext i32 %[[VAL_34]] to i64
// CHECK: %[[VAL_36:.*]] = getelementptr i32, ptr %[[VAL_37:.*]], i64 %[[VAL_35]]
// CHECK: store i32 %[[VAL_34]], ptr %[[VAL_36]], align 4, !llvm.access.group !1
// CHECK: br label %[[OMP_REGION_CONT3:.*]]
// CHECK: omp.region.cont3: ; preds = %[[VAL_33]]
// CHECK: br label %[[SIMD_PRE_LATCH:.*]]
// CHECK: simd.pre_latch: ; preds = %[[OMP_REGION_CONT3]], %[[OMP_REGION_CONT35:.*]]
// CHECK: br label %[[OMP_LOOP_INC]]
// CHECK: omp_loop.inc: ; preds = %[[SIMD_PRE_LATCH]]
// CHECK: %[[NEW_IV]] = add nuw i32 %[[IV]], 1
// CHECK: br label %[[OMP_LOOP_HEADER]], !llvm.loop !2
// CHECK: simd.if.else: ; preds = %[[OMP_LOOP_BODY]]
// CHECK: br label %[[SIMD_IF_ELSE2:.*]]
// CHECK: simd.if.else5:
// CHECK: %[[MUL:.*]] = mul i32 %[[VAL_28]], 1
// CHECK: %[[ADD:.*]] = add i32 %[[MUL]], 1
// CHECK: br label %[[LOOP_NEST_REGION:.*]]
// CHECK: omp.loop_nest.region6: ; preds = %[[SIMD_IF_ELSE2]]
// No llvm.access.group metadata for else clause
// CHECK: store i32 %[[ADD]], ptr %{{.*}}, align 4
// CHECK: %[[VAL_42:.*]] = load i32, ptr %{{.*}}, align 4
// CHECK: %[[VAL_43:.*]] = sext i32 %[[VAL_42]] to i64
// CHECK: %[[VAL_44:.*]] = getelementptr i32, ptr %[[VAL_37]], i64 %[[VAL_43]]
// CHECK: store i32 %[[VAL_42]], ptr %[[VAL_44]], align 4
// CHECK: br label %[[OMP_REGION_CONT35]]
// CHECK: omp.region.cont37: ; preds = %[[LOOP_NEST_REGION]]
// CHECK: br label %[[SIMD_PRE_LATCH]]
// CHECK: omp_loop.exit: ; preds = %[[OMP_LOOP_COND]]
// CHECK: call void @__kmpc_for_static_fini(ptr @1, i32 %[[VAL_15]])
// CHECK: %[[VAL_45:.*]] = call i32 @__kmpc_global_thread_num(ptr @2)
// CHECK: call void @__kmpc_barrier(ptr @3, i32 %[[VAL_45]])
// CHECK: !1 = distinct !{}
// CHECK: !2 = distinct !{!2, !3}
// CHECK: !3 = !{!"llvm.loop.parallel_accesses", !1}
// CHECK-NOT: llvm.loop.vectorize