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
185 lines
8.6 KiB
MLIR
185 lines
8.6 KiB
MLIR
// RUN: mlir-translate -mlir-to-llvmir %s | FileCheck %s --enable-var-scope
|
|
|
|
|
|
llvm.func @tile_2d_loop(%baseptr: !llvm.ptr, %tc1: i32, %tc2: i32, %ts1: i32, %ts2: i32) -> () {
|
|
%literal_outer = omp.new_cli
|
|
%literal_inner = omp.new_cli
|
|
omp.canonical_loop(%literal_outer) %iv1 : i32 in range(%tc1) {
|
|
omp.canonical_loop(%literal_inner) %iv2 : i32 in range(%tc2) {
|
|
%idx = llvm.add %iv1, %iv2 : i32
|
|
%ptr = llvm.getelementptr inbounds %baseptr[%idx] : (!llvm.ptr, i32) -> !llvm.ptr, f32
|
|
%val = llvm.mlir.constant(42.0 : f32) : f32
|
|
llvm.store %val, %ptr : f32, !llvm.ptr
|
|
omp.terminator
|
|
}
|
|
omp.terminator
|
|
}
|
|
omp.tile <- (%literal_outer, %literal_inner) sizes(%ts1, %ts2 : i32,i32)
|
|
llvm.return
|
|
}
|
|
|
|
|
|
// CHECK-LABEL: define void @tile_2d_loop(
|
|
// CHECK-SAME: ptr %[[TMP0:.+]], i32 %[[TMP1:.+]], i32 %[[TMP2:.+]], i32 %[[TMP3:.+]], i32 %[[TMP4:.+]]) {
|
|
// CHECK-NEXT: br label %[[OMP_OMP_LOOP_PREHEADER:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_OMP_LOOP_PREHEADER]]:
|
|
// CHECK-NEXT: %[[TMP6:.+]] = udiv i32 %[[TMP1:.+]], %[[TMP3:.+]]
|
|
// CHECK-NEXT: %[[TMP7:.+]] = urem i32 %[[TMP1:.+]], %[[TMP3:.+]]
|
|
// CHECK-NEXT: %[[TMP8:.+]] = icmp ne i32 %[[TMP7:.+]], 0
|
|
// CHECK-NEXT: %[[TMP9:.+]] = zext i1 %[[TMP8:.+]] to i32
|
|
// CHECK-NEXT: %[[OMP_FLOOR0_TRIPCOUNT:.+]] = add nuw i32 %[[TMP6:.+]], %[[TMP9:.+]]
|
|
// CHECK-NEXT: %[[TMP10:.+]] = udiv i32 %[[TMP2:.+]], %[[TMP4:.+]]
|
|
// CHECK-NEXT: %[[TMP11:.+]] = urem i32 %[[TMP2:.+]], %[[TMP4:.+]]
|
|
// CHECK-NEXT: %[[TMP12:.+]] = icmp ne i32 %[[TMP11:.+]], 0
|
|
// CHECK-NEXT: %[[TMP13:.+]] = zext i1 %[[TMP12:.+]] to i32
|
|
// CHECK-NEXT: %[[OMP_FLOOR1_TRIPCOUNT:.+]] = add nuw i32 %[[TMP10:.+]], %[[TMP13:.+]]
|
|
// CHECK-NEXT: br label %[[OMP_FLOOR0_PREHEADER:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_OMP_LOOP_HEADER:.+]]:
|
|
// CHECK-NEXT: %[[OMP_OMP_LOOP_IV:.+]] = phi i32 [ %[[OMP_OMP_LOOP_NEXT:.+]], %[[OMP_OMP_LOOP_INC:.+]] ]
|
|
// CHECK-NEXT: br label %[[OMP_OMP_LOOP_COND:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_OMP_LOOP_COND]]:
|
|
// CHECK-NEXT: %[[OMP_OMP_LOOP_CMP:.+]] = icmp ult i32 %[[TMP19:.+]], %[[TMP1:.+]]
|
|
// CHECK-NEXT: br i1 %[[OMP_OMP_LOOP_CMP:.+]], label %[[OMP_OMP_LOOP_BODY:.+]], label %[[OMP_OMP_LOOP_EXIT:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_OMP_LOOP_BODY]]:
|
|
// CHECK-NEXT: br label %[[OMP_LOOP_REGION:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_LOOP_REGION]]:
|
|
// CHECK-NEXT: br label %[[OMP_OMP_LOOP_PREHEADER1:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_OMP_LOOP_PREHEADER1]]:
|
|
// CHECK-NEXT: br label %[[OMP_OMP_LOOP_BODY4:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR0_PREHEADER]]:
|
|
// CHECK-NEXT: br label %[[OMP_FLOOR0_HEADER:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR0_HEADER]]:
|
|
// CHECK-NEXT: %[[OMP_FLOOR0_IV:.+]] = phi i32 [ 0, %[[OMP_FLOOR0_PREHEADER:.+]] ], [ %[[OMP_FLOOR0_NEXT:.+]], %[[OMP_FLOOR0_INC:.+]] ]
|
|
// CHECK-NEXT: br label %[[OMP_FLOOR0_COND:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR0_COND]]:
|
|
// CHECK-NEXT: %[[OMP_FLOOR0_CMP:.+]] = icmp ult i32 %[[OMP_FLOOR0_IV:.+]], %[[OMP_FLOOR0_TRIPCOUNT:.+]]
|
|
// CHECK-NEXT: br i1 %[[OMP_FLOOR0_CMP:.+]], label %[[OMP_FLOOR0_BODY:.+]], label %[[OMP_FLOOR0_EXIT:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR0_BODY]]:
|
|
// CHECK-NEXT: br label %[[OMP_FLOOR1_PREHEADER:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR1_PREHEADER]]:
|
|
// CHECK-NEXT: br label %[[OMP_FLOOR1_HEADER:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR1_HEADER]]:
|
|
// CHECK-NEXT: %[[OMP_FLOOR1_IV:.+]] = phi i32 [ 0, %[[OMP_FLOOR1_PREHEADER:.+]] ], [ %[[OMP_FLOOR1_NEXT:.+]], %[[OMP_FLOOR1_INC:.+]] ]
|
|
// CHECK-NEXT: br label %[[OMP_FLOOR1_COND:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR1_COND]]:
|
|
// CHECK-NEXT: %[[OMP_FLOOR1_CMP:.+]] = icmp ult i32 %[[OMP_FLOOR1_IV:.+]], %[[OMP_FLOOR1_TRIPCOUNT:.+]]
|
|
// CHECK-NEXT: br i1 %[[OMP_FLOOR1_CMP:.+]], label %[[OMP_FLOOR1_BODY:.+]], label %[[OMP_FLOOR1_EXIT:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR1_BODY]]:
|
|
// CHECK-NEXT: %[[TMP14:.+]] = icmp eq i32 %[[OMP_FLOOR0_IV:.+]], %[[TMP6:.+]]
|
|
// CHECK-NEXT: %[[TMP15:.+]] = select i1 %[[TMP14:.+]], i32 %[[TMP7:.+]], i32 %[[TMP3:.+]]
|
|
// CHECK-NEXT: %[[TMP16:.+]] = icmp eq i32 %[[OMP_FLOOR1_IV:.+]], %[[TMP10:.+]]
|
|
// CHECK-NEXT: %[[TMP17:.+]] = select i1 %[[TMP16:.+]], i32 %[[TMP11:.+]], i32 %[[TMP4:.+]]
|
|
// CHECK-NEXT: br label %[[OMP_TILE0_PREHEADER:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE0_PREHEADER]]:
|
|
// CHECK-NEXT: br label %[[OMP_TILE0_HEADER:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE0_HEADER]]:
|
|
// CHECK-NEXT: %[[OMP_TILE0_IV:.+]] = phi i32 [ 0, %[[OMP_TILE0_PREHEADER:.+]] ], [ %[[OMP_TILE0_NEXT:.+]], %[[OMP_TILE0_INC:.+]] ]
|
|
// CHECK-NEXT: br label %[[OMP_TILE0_COND:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE0_COND]]:
|
|
// CHECK-NEXT: %[[OMP_TILE0_CMP:.+]] = icmp ult i32 %[[OMP_TILE0_IV:.+]], %[[TMP15:.+]]
|
|
// CHECK-NEXT: br i1 %[[OMP_TILE0_CMP:.+]], label %[[OMP_TILE0_BODY:.+]], label %[[OMP_TILE0_EXIT:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE0_BODY]]:
|
|
// CHECK-NEXT: br label %[[OMP_TILE1_PREHEADER:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE1_PREHEADER]]:
|
|
// CHECK-NEXT: br label %[[OMP_TILE1_HEADER:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE1_HEADER]]:
|
|
// CHECK-NEXT: %[[OMP_TILE1_IV:.+]] = phi i32 [ 0, %[[OMP_TILE1_PREHEADER:.+]] ], [ %[[OMP_TILE1_NEXT:.+]], %[[OMP_TILE1_INC:.+]] ]
|
|
// CHECK-NEXT: br label %[[OMP_TILE1_COND:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE1_COND]]:
|
|
// CHECK-NEXT: %[[OMP_TILE1_CMP:.+]] = icmp ult i32 %[[OMP_TILE1_IV:.+]], %[[TMP17:.+]]
|
|
// CHECK-NEXT: br i1 %[[OMP_TILE1_CMP:.+]], label %[[OMP_TILE1_BODY:.+]], label %[[OMP_TILE1_EXIT:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE1_BODY]]:
|
|
// CHECK-NEXT: %[[TMP18:.+]] = mul nuw i32 %[[TMP3:.+]], %[[OMP_FLOOR0_IV:.+]]
|
|
// CHECK-NEXT: %[[TMP19:.+]] = add nuw i32 %[[TMP18:.+]], %[[OMP_TILE0_IV:.+]]
|
|
// CHECK-NEXT: %[[TMP20:.+]] = mul nuw i32 %[[TMP4:.+]], %[[OMP_FLOOR1_IV:.+]]
|
|
// CHECK-NEXT: %[[TMP21:.+]] = add nuw i32 %[[TMP20:.+]], %[[OMP_TILE1_IV:.+]]
|
|
// CHECK-NEXT: br label %[[OMP_OMP_LOOP_BODY:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_OMP_LOOP_BODY4]]:
|
|
// CHECK-NEXT: br label %[[OMP_LOOP_REGION12:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_LOOP_REGION12]]:
|
|
// CHECK-NEXT: %[[TMP22:.+]] = add i32 %[[TMP19:.+]], %[[TMP21:.+]]
|
|
// CHECK-NEXT: %[[TMP23:.+]] = getelementptr inbounds float, ptr %[[TMP0:.+]], i32 %[[TMP22:.+]]
|
|
// CHECK-NEXT: store float 4.200000e+01, ptr %[[TMP23:.+]], align 4
|
|
// CHECK-NEXT: br label %[[OMP_REGION_CONT11:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_REGION_CONT11]]:
|
|
// CHECK-NEXT: br label %[[OMP_TILE1_INC:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE1_INC]]:
|
|
// CHECK-NEXT: %[[OMP_TILE1_NEXT:.+]] = add nuw i32 %[[OMP_TILE1_IV:.+]], 1
|
|
// CHECK-NEXT: br label %[[OMP_TILE1_HEADER:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE1_EXIT]]:
|
|
// CHECK-NEXT: br label %[[OMP_TILE1_AFTER:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE1_AFTER]]:
|
|
// CHECK-NEXT: br label %[[OMP_TILE0_INC:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE0_INC]]:
|
|
// CHECK-NEXT: %[[OMP_TILE0_NEXT:.+]] = add nuw i32 %[[OMP_TILE0_IV:.+]], 1
|
|
// CHECK-NEXT: br label %[[OMP_TILE0_HEADER:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE0_EXIT]]:
|
|
// CHECK-NEXT: br label %[[OMP_TILE0_AFTER:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE0_AFTER]]:
|
|
// CHECK-NEXT: br label %[[OMP_FLOOR1_INC:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR1_INC]]:
|
|
// CHECK-NEXT: %[[OMP_FLOOR1_NEXT:.+]] = add nuw i32 %[[OMP_FLOOR1_IV:.+]], 1
|
|
// CHECK-NEXT: br label %[[OMP_FLOOR1_HEADER:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR1_EXIT]]:
|
|
// CHECK-NEXT: br label %[[OMP_FLOOR1_AFTER:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR1_AFTER]]:
|
|
// CHECK-NEXT: br label %[[OMP_FLOOR0_INC:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR0_INC]]:
|
|
// CHECK-NEXT: %[[OMP_FLOOR0_NEXT:.+]] = add nuw i32 %[[OMP_FLOOR0_IV:.+]], 1
|
|
// CHECK-NEXT: br label %[[OMP_FLOOR0_HEADER:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR0_EXIT]]:
|
|
// CHECK-NEXT: br label %[[OMP_FLOOR0_AFTER:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR0_AFTER]]:
|
|
// CHECK-NEXT: br label %[[OMP_OMP_LOOP_AFTER:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_REGION_CONT:.+]]:
|
|
// CHECK-NEXT: br label %[[OMP_OMP_LOOP_INC:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_OMP_LOOP_INC]]:
|
|
// CHECK-NEXT: %[[OMP_OMP_LOOP_NEXT:.+]] = add nuw i32 %[[TMP19:.+]], 1
|
|
// CHECK-NEXT: br label %[[OMP_OMP_LOOP_HEADER:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_OMP_LOOP_EXIT]]:
|
|
// CHECK-NEXT: br label %[[OMP_OMP_LOOP_AFTER:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_OMP_LOOP_AFTER]]:
|
|
// CHECK-NEXT: ret void
|
|
// CHECK-NEXT: }
|