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
194 lines
9.1 KiB
MLIR
194 lines
9.1 KiB
MLIR
// RUN: mlir-translate -mlir-to-llvmir %s | FileCheck %s --enable-var-scope
|
|
|
|
|
|
llvm.func @tile_composition(%baseptr: !llvm.ptr, %tc: i32, %ts: i32, %grid_ts: i32, %intratile_ts: i32) -> () {
|
|
%canonloop = omp.new_cli
|
|
%grid = omp.new_cli
|
|
%intratile = omp.new_cli
|
|
%grid_intratile = omp.new_cli
|
|
%grid_grid = omp.new_cli
|
|
%intratile_grid = omp.new_cli
|
|
%intratile_intratile = omp.new_cli
|
|
|
|
omp.canonical_loop(%canonloop) %idx : i32 in range(%tc) {
|
|
%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.tile(%grid, %intratile) <- (%canonloop) sizes(%ts : i32)
|
|
omp.tile(%grid_grid, %grid_intratile) <- (%grid) sizes(%grid_ts : i32)
|
|
omp.tile(%intratile_grid, %intratile_intratile) <- (%intratile) sizes(%intratile_ts : i32)
|
|
llvm.return
|
|
}
|
|
|
|
|
|
// CHECK-LABEL: define void @tile_composition(
|
|
// 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:.+]], %[[TMP2:.+]]
|
|
// CHECK-NEXT: %[[TMP7:.+]] = urem i32 %[[TMP1:.+]], %[[TMP2:.+]]
|
|
// 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: br label %[[OMP_FLOOR0_PREHEADER:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR0_PREHEADER]]:
|
|
// CHECK-NEXT: %[[TMP10:.+]] = udiv i32 %[[OMP_FLOOR0_TRIPCOUNT:.+]], %[[TMP3:.+]]
|
|
// CHECK-NEXT: %[[TMP11:.+]] = urem i32 %[[OMP_FLOOR0_TRIPCOUNT:.+]], %[[TMP3:.+]]
|
|
// CHECK-NEXT: %[[TMP12:.+]] = icmp ne i32 %[[TMP11:.+]], 0
|
|
// CHECK-NEXT: %[[TMP13:.+]] = zext i1 %[[TMP12:.+]] to i32
|
|
// CHECK-NEXT: %[[OMP_FLOOR0_TRIPCOUNT1:.+]] = add nuw i32 %[[TMP10:.+]], %[[TMP13:.+]]
|
|
// CHECK-NEXT: br label %[[OMP_FLOOR0_PREHEADER2:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR0_PREHEADER2]]:
|
|
// CHECK-NEXT: br label %[[OMP_FLOOR0_HEADER3:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR0_HEADER3]]:
|
|
// CHECK-NEXT: %[[OMP_FLOOR0_IV9:.+]] = phi i32 [ 0, %[[OMP_FLOOR0_PREHEADER2:.+]] ], [ %[[OMP_FLOOR0_NEXT11:.+]], %[[OMP_FLOOR0_INC6:.+]] ]
|
|
// CHECK-NEXT: br label %[[OMP_FLOOR0_COND4:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR0_COND4]]:
|
|
// CHECK-NEXT: %[[OMP_FLOOR0_CMP10:.+]] = icmp ult i32 %[[OMP_FLOOR0_IV9:.+]], %[[OMP_FLOOR0_TRIPCOUNT1:.+]]
|
|
// CHECK-NEXT: br i1 %[[OMP_FLOOR0_CMP10:.+]], label %[[OMP_FLOOR0_BODY5:.+]], label %[[OMP_FLOOR0_EXIT7:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR0_BODY5]]:
|
|
// CHECK-NEXT: %[[TMP14:.+]] = icmp eq i32 %[[OMP_FLOOR0_IV9:.+]], %[[TMP10:.+]]
|
|
// CHECK-NEXT: %[[TMP15:.+]] = select i1 %[[TMP14:.+]], i32 %[[TMP11:.+]], i32 %[[TMP3:.+]]
|
|
// CHECK-NEXT: br label %[[OMP_TILE0_PREHEADER12:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE0_PREHEADER12]]:
|
|
// CHECK-NEXT: br label %[[OMP_TILE0_HEADER13:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE0_HEADER13]]:
|
|
// CHECK-NEXT: %[[OMP_TILE0_IV19:.+]] = phi i32 [ 0, %[[OMP_TILE0_PREHEADER12:.+]] ], [ %[[OMP_TILE0_NEXT21:.+]], %[[OMP_TILE0_INC16:.+]] ]
|
|
// CHECK-NEXT: br label %[[OMP_TILE0_COND14:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE0_COND14]]:
|
|
// CHECK-NEXT: %[[OMP_TILE0_CMP20:.+]] = icmp ult i32 %[[OMP_TILE0_IV19:.+]], %[[TMP15:.+]]
|
|
// CHECK-NEXT: br i1 %[[OMP_TILE0_CMP20:.+]], label %[[OMP_TILE0_BODY15:.+]], label %[[OMP_TILE0_EXIT17:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE0_BODY15]]:
|
|
// CHECK-NEXT: %[[TMP16:.+]] = mul nuw i32 %[[TMP3:.+]], %[[OMP_FLOOR0_IV9:.+]]
|
|
// CHECK-NEXT: %[[TMP17:.+]] = add nuw i32 %[[TMP16:.+]], %[[OMP_TILE0_IV19:.+]]
|
|
// CHECK-NEXT: br label %[[OMP_FLOOR0_BODY:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR0_BODY]]:
|
|
// CHECK-NEXT: %[[TMP18:.+]] = icmp eq i32 %[[TMP17:.+]], %[[TMP6:.+]]
|
|
// CHECK-NEXT: %[[TMP19:.+]] = select i1 %[[TMP18:.+]], i32 %[[TMP7:.+]], i32 %[[TMP2:.+]]
|
|
// CHECK-NEXT: br label %[[OMP_TILE0_PREHEADER:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE0_PREHEADER]]:
|
|
// CHECK-NEXT: %[[TMP20:.+]] = udiv i32 %[[TMP19:.+]], %[[TMP4:.+]]
|
|
// CHECK-NEXT: %[[TMP21:.+]] = urem i32 %[[TMP19:.+]], %[[TMP4:.+]]
|
|
// CHECK-NEXT: %[[TMP22:.+]] = icmp ne i32 %[[TMP21:.+]], 0
|
|
// CHECK-NEXT: %[[TMP23:.+]] = zext i1 %[[TMP22:.+]] to i32
|
|
// CHECK-NEXT: %[[OMP_FLOOR0_TRIPCOUNT22:.+]] = add nuw i32 %[[TMP20:.+]], %[[TMP23:.+]]
|
|
// CHECK-NEXT: br label %[[OMP_FLOOR0_PREHEADER23:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR0_PREHEADER23]]:
|
|
// CHECK-NEXT: br label %[[OMP_FLOOR0_HEADER:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR0_HEADER]]:
|
|
// CHECK-NEXT: %[[OMP_FLOOR0_IV:.+]] = phi i32 [ 0, %[[OMP_FLOOR0_PREHEADER23:.+]] ], [ %[[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_TRIPCOUNT22:.+]]
|
|
// CHECK-NEXT: br i1 %[[OMP_FLOOR0_CMP:.+]], label %[[OMP_FLOOR0_BODY24:.+]], label %[[OMP_FLOOR0_EXIT:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR0_BODY24]]:
|
|
// CHECK-NEXT: %[[TMP24:.+]] = icmp eq i32 %[[OMP_FLOOR0_IV:.+]], %[[TMP20:.+]]
|
|
// CHECK-NEXT: %[[TMP25:.+]] = select i1 %[[TMP24:.+]], i32 %[[TMP21:.+]], i32 %[[TMP4:.+]]
|
|
// CHECK-NEXT: br label %[[OMP_TILE0_PREHEADER26:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE0_PREHEADER26]]:
|
|
// CHECK-NEXT: br label %[[OMP_TILE0_HEADER27:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE0_HEADER27]]:
|
|
// CHECK-NEXT: %[[OMP_TILE0_IV33:.+]] = phi i32 [ 0, %[[OMP_TILE0_PREHEADER26:.+]] ], [ %[[OMP_TILE0_NEXT35:.+]], %[[OMP_TILE0_INC30:.+]] ]
|
|
// CHECK-NEXT: br label %[[OMP_TILE0_COND28:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE0_COND28]]:
|
|
// CHECK-NEXT: %[[OMP_TILE0_CMP34:.+]] = icmp ult i32 %[[OMP_TILE0_IV33:.+]], %[[TMP25:.+]]
|
|
// CHECK-NEXT: br i1 %[[OMP_TILE0_CMP34:.+]], label %[[OMP_TILE0_BODY29:.+]], label %[[OMP_TILE0_EXIT31:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE0_BODY29]]:
|
|
// CHECK-NEXT: %[[TMP26:.+]] = mul nuw i32 %[[TMP4:.+]], %[[OMP_FLOOR0_IV:.+]]
|
|
// CHECK-NEXT: %[[TMP27:.+]] = add nuw i32 %[[TMP26:.+]], %[[OMP_TILE0_IV33:.+]]
|
|
// CHECK-NEXT: br label %[[OMP_TILE0_BODY:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE0_BODY]]:
|
|
// CHECK-NEXT: %[[TMP28:.+]] = mul nuw i32 %[[TMP2:.+]], %[[TMP17:.+]]
|
|
// CHECK-NEXT: %[[TMP29:.+]] = add nuw i32 %[[TMP28:.+]], %[[TMP27:.+]]
|
|
// CHECK-NEXT: br label %[[OMP_OMP_LOOP_BODY:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_OMP_LOOP_BODY]]:
|
|
// CHECK-NEXT: br label %[[OMP_LOOP_REGION:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_LOOP_REGION]]:
|
|
// CHECK-NEXT: %[[TMP30:.+]] = getelementptr inbounds float, ptr %[[TMP0:.+]], i32 %[[TMP29:.+]]
|
|
// CHECK-NEXT: store float 4.200000e+01, ptr %[[TMP30:.+]], align 4
|
|
// CHECK-NEXT: br label %[[OMP_REGION_CONT:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_REGION_CONT]]:
|
|
// CHECK-NEXT: br label %[[OMP_TILE0_INC30:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE0_INC30]]:
|
|
// CHECK-NEXT: %[[OMP_TILE0_NEXT35:.+]] = add nuw i32 %[[OMP_TILE0_IV33:.+]], 1
|
|
// CHECK-NEXT: br label %[[OMP_TILE0_HEADER27:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE0_EXIT31]]:
|
|
// CHECK-NEXT: br label %[[OMP_TILE0_AFTER32:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE0_AFTER32]]:
|
|
// 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_AFTER25:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR0_AFTER25]]:
|
|
// CHECK-NEXT: br label %[[OMP_TILE0_AFTER:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE0_AFTER]]:
|
|
// CHECK-NEXT: br label %[[OMP_TILE0_INC16:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE0_INC16]]:
|
|
// CHECK-NEXT: %[[OMP_TILE0_NEXT21:.+]] = add nuw i32 %[[OMP_TILE0_IV19:.+]], 1
|
|
// CHECK-NEXT: br label %[[OMP_TILE0_HEADER13:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE0_EXIT17]]:
|
|
// CHECK-NEXT: br label %[[OMP_TILE0_AFTER18:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_TILE0_AFTER18]]:
|
|
// CHECK-NEXT: br label %[[OMP_FLOOR0_INC6:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR0_INC6]]:
|
|
// CHECK-NEXT: %[[OMP_FLOOR0_NEXT11:.+]] = add nuw i32 %[[OMP_FLOOR0_IV9:.+]], 1
|
|
// CHECK-NEXT: br label %[[OMP_FLOOR0_HEADER3:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR0_EXIT7]]:
|
|
// CHECK-NEXT: br label %[[OMP_FLOOR0_AFTER8:.+]]
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: [[OMP_FLOOR0_AFTER8]]:
|
|
// 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_OMP_LOOP_AFTER]]:
|
|
// CHECK-NEXT: ret void
|
|
// CHECK-NEXT: }
|
|
|
|
|
|
// CHECK: !llvm.module.flags = !{!0}
|
|
// CHECK-EMPTY:
|
|
// CHECK-NEXT: !0 = !{i32 2, !"Debug Info Version", i32 3}
|