blob: 19c716a7d40873cfdace30e1ffb9d6d568b77c28 [file] [log] [blame] [edit]
;; Test that checks all variants of ndrange and what ndrange_2D and ndrange_3D can coexist in the same module
;;
;;void test_ndrange_1D(size_t GS1 , size_t LS1 , size_t WO1) {
;; ndrange_1D(GS1);
;; ndrange_1D(GS1, LS1);
;; ndrange_1D(WO1, GS1, LS1);
;; // test const argument
;; const size_t GS1c = 1;
;; ndrange_1D(GS1c);
;;}
;;
;;void test_ndrange_2D(size_t GS2[2], size_t LS2[2], size_t WO2[2]) {
;; ndrange_2D(GS2);
;; ndrange_2D(GS2, LS2);
;; ndrange_2D(WO2, GS2, LS2);
;;}
;;
;;void test_ndrange_3D(size_t GS3[3], size_t LS3[3], size_t WO3[3], size_t GS2[2]) {
;; ndrange_3D(GS3);
;; ndrange_3D(GS3, LS3);
;; ndrange_3D(WO3, GS3, LS3);
;; // test same argument
;; ndrange_3D(GS3, GS3);
;; ndrange_3D(GS3, GS3, GS3);
;; // test const argument
;; const size_t GS3c[3] = {1, 4, 7};
;; ndrange_3D(GS3c);
;; // test 2D and 3D can coexist in one funciton
;; ndrange_2D(GS2);
;;}
;;
;; bash$ clang -cc1 -cl-std=CL2.0 -triple spirv64-unknown-unknown -emit-llvm -finclude-default-header -cl-single-precision-constant BuildNDRange.cl -o BuildNDRange.ll
; RUN: llc -O0 -verify-machineinstrs -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}
%struct.ndrange_t = type { i32, [3 x i64], [3 x i64], [3 x i64] }
@__const.test_ndrange_3D.GS3c = private unnamed_addr addrspace(2) constant [3 x i64] [i64 1, i64 4, i64 7], align 8
; CHECK-DAG: %[[#typeInt64:]] = OpTypeInt 64 0
; CHECK-DAG: %[[#typeInt32:]] = OpTypeInt 32 0
; CHECK-DAG: %[[#Num3:]] = OpConstant %[[#typeInt32]] 3
; CHECK-DAG: %[[#Array3x64:]] = OpTypeArray %[[#typeInt64:]] %[[#Num3]]
; CHECK-DAG: %[[#TypeNDRangeStruct:]] = OpTypeStruct %[[#typeInt32]] %[[#Array3x64]] %[[#Array3x64]] %[[#Array3x64]]
; CHECK-DAG: %[[#Zero1D:]] = OpConstantNull %[[#typeInt64]]
; CHECK-DAG: %[[#Num2:]] = OpConstant %[[#typeInt32]] 2
; CHECK-DAG: %[[#Array2x64:]] = OpTypeArray %[[#typeInt64:]] %[[#Num2]]
; CHECK-DAG: %[[#Zero2D:]] = OpConstantNull %[[#Array2x64]]
; CHECK-DAG: %[[#Zero3D:]] = OpConstantNull %[[#Array3x64]]
define spir_func void @test_ndrange_1D(i64 noundef %GS1, i64 noundef %LS1, i64 noundef %WO1) local_unnamed_addr #0 {
entry:
; CHECK-LABEL: Begin function test_ndrange_1D
; CHECK: %[[#ret1D_1:]] = OpBuildNDRange %[[#TypeNDRangeStruct]] %[[#GS1D:]] %[[#Zero1D:]] %[[#Zero1D:]]
; CHECK: %[[#ret1D_2:]] = OpBuildNDRange %[[#TypeNDRangeStruct]] %[[#GS1D]] %[[#LS1D:]] %[[#Zero1D]]
; CHECK: %[[#ret1D_3:]] = OpBuildNDRange %[[#TypeNDRangeStruct]] %[[#GS1D]] %[[#LS1D]] %[[#GO1D:]]
; CHECK: %[[#ret1D_4:]] = OpBuildNDRange %[[#TypeNDRangeStruct]] %[[#GS1Dc:]] %[[#Zero1D]] %[[#Zero1D]]
; CHECK: OpFunctionEnd
%tmp = alloca %struct.ndrange_t, align 8
%tmp1 = alloca %struct.ndrange_t, align 8
%tmp2 = alloca %struct.ndrange_t, align 8
%tmp3 = alloca %struct.ndrange_t, align 8
call spir_func void @_Z10ndrange_1Dm(ptr dead_on_unwind nonnull writable sret(%struct.ndrange_t) align 8 %tmp, i64 noundef %GS1) #5
call spir_func void @_Z10ndrange_1Dmm(ptr dead_on_unwind nonnull writable sret(%struct.ndrange_t) align 8 %tmp1, i64 noundef %GS1, i64 noundef %LS1) #5
call spir_func void @_Z10ndrange_1Dmmm(ptr dead_on_unwind nonnull writable sret(%struct.ndrange_t) align 8 %tmp2, i64 noundef %WO1, i64 noundef %GS1, i64 noundef %LS1) #5
call spir_func void @_Z10ndrange_1Dm(ptr dead_on_unwind nonnull writable sret(%struct.ndrange_t) align 8 %tmp3, i64 noundef 1) #5
ret void
}
declare spir_func void @_Z10ndrange_1Dm(ptr dead_on_unwind writable sret(%struct.ndrange_t) align 8, i64 noundef) local_unnamed_addr #1
declare spir_func void @_Z10ndrange_1Dmm(ptr dead_on_unwind writable sret(%struct.ndrange_t) align 8, i64 noundef, i64 noundef) local_unnamed_addr #1
declare spir_func void @_Z10ndrange_1Dmmm(ptr dead_on_unwind writable sret(%struct.ndrange_t) align 8, i64 noundef, i64 noundef, i64 noundef) local_unnamed_addr #1
define spir_func void @test_ndrange_2D(ptr noundef %GS2, ptr noundef %LS2, ptr noundef %WO2) local_unnamed_addr #0 {
entry:
; CHECK-LABEL: Begin function test_ndrange_2D
; CHECK: %[[#ret2D_1:]] = OpBuildNDRange %[[#TypeNDRangeStruct]] %[[#GS2D_1:]] %[[#Zero2D]] %[[#Zero2D]]
; CHECK: %[[#ret2D_2:]] = OpBuildNDRange %[[#TypeNDRangeStruct]] %[[#GS2D_2:]] %[[#LS2D_2:]] %[[#Zero2D]]
; CHECK: %[[#ret2D_3:]] = OpBuildNDRange %[[#TypeNDRangeStruct]] %[[#GS2D_3:]] %[[#LS2D_3:]] %[[#GO2D_3:]]
%tmp = alloca %struct.ndrange_t, align 8
%tmp1 = alloca %struct.ndrange_t, align 8
%tmp2 = alloca %struct.ndrange_t, align 8
call spir_func void @_Z10ndrange_2DPKm(ptr dead_on_unwind nonnull writable sret(%struct.ndrange_t) align 8 %tmp, ptr noundef %GS2) #5
call spir_func void @_Z10ndrange_2DPKmS0_(ptr dead_on_unwind nonnull writable sret(%struct.ndrange_t) align 8 %tmp1, ptr noundef %GS2, ptr noundef %LS2) #5
call spir_func void @_Z10ndrange_2DPKmS0_S0_(ptr dead_on_unwind nonnull writable sret(%struct.ndrange_t) align 8 %tmp2, ptr noundef %WO2, ptr noundef %GS2, ptr noundef %LS2) #5
ret void
}
declare spir_func void @_Z10ndrange_2DPKm(ptr dead_on_unwind writable sret(%struct.ndrange_t) align 8, ptr noundef) local_unnamed_addr #1
declare spir_func void @_Z10ndrange_2DPKmS0_(ptr dead_on_unwind writable sret(%struct.ndrange_t) align 8, ptr noundef, ptr noundef) local_unnamed_addr #1
declare spir_func void @_Z10ndrange_2DPKmS0_S0_(ptr dead_on_unwind writable sret(%struct.ndrange_t) align 8, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1
define spir_func void @test_ndrange_3D(ptr noundef %GS3, ptr noundef %LS3, ptr noundef %WO3, ptr noundef %GS2) local_unnamed_addr #0 {
entry:
; CHECK-LABEL: Begin function test_ndrange_3D
; CHECK: %[[#ret3D_1:]] = OpBuildNDRange %[[#TypeNDRangeStruct]] %[[#GS3D_1:]] %[[#Zero3D]] %[[#Zero3D]]
; CHECK: %[[#ret3D_2:]] = OpBuildNDRange %[[#TypeNDRangeStruct]] %[[#GS3D_2:]] %[[#LS3D_2:]] %[[#Zero3D]]
; CHECK: %[[#ret3D_3:]] = OpBuildNDRange %[[#TypeNDRangeStruct]] %[[#GS3D_3:]] %[[#LS3D_3:]] %[[#GO3D_3:]]
; CHECK: %[[#ret3D_4:]] = OpBuildNDRange %[[#TypeNDRangeStruct]] %[[#GS3D_4:]] %[[#GS3D_4:]] %[[#Zero3D]]
; CHECK: %[[#ret3D_5:]] = OpBuildNDRange %[[#TypeNDRangeStruct]] %[[#GS3D_5:]] %[[#GS3D_5:]] %[[#GS3D_5:]]
; CHECK: %[[#ret3D_6:]] = OpBuildNDRange %[[#TypeNDRangeStruct]] %[[#GS2D_4:]] %[[#Zero2D]] %[[#Zero2D]]
%tmp = alloca %struct.ndrange_t, align 8
%tmp1 = alloca %struct.ndrange_t, align 8
%tmp2 = alloca %struct.ndrange_t, align 8
%tmp3 = alloca %struct.ndrange_t, align 8
%tmp4 = alloca %struct.ndrange_t, align 8
%GS3c = alloca [3 x i64], align 8
%tmp5 = alloca %struct.ndrange_t, align 8
%tmp6 = alloca %struct.ndrange_t, align 8
call spir_func void @_Z10ndrange_3DPKm(ptr dead_on_unwind nonnull writable sret(%struct.ndrange_t) align 8 %tmp, ptr noundef %GS3) #5
call spir_func void @_Z10ndrange_3DPKmS0_(ptr dead_on_unwind nonnull writable sret(%struct.ndrange_t) align 8 %tmp1, ptr noundef %GS3, ptr noundef %LS3) #5
call spir_func void @_Z10ndrange_3DPKmS0_S0_(ptr dead_on_unwind nonnull writable sret(%struct.ndrange_t) align 8 %tmp2, ptr noundef %WO3, ptr noundef %GS3, ptr noundef %LS3) #5
call spir_func void @_Z10ndrange_3DPKmS0_(ptr dead_on_unwind nonnull writable sret(%struct.ndrange_t) align 8 %tmp3, ptr noundef %GS3, ptr noundef %GS3) #5
call spir_func void @_Z10ndrange_3DPKmS0_S0_(ptr dead_on_unwind nonnull writable sret(%struct.ndrange_t) align 8 %tmp4, ptr noundef %GS3, ptr noundef %GS3, ptr noundef %GS3) #5
call void @llvm.memcpy.p0.p2.i64(ptr noundef nonnull align 8 dereferenceable(24) %GS3c, ptr addrspace(2) noundef align 8 dereferenceable(24) @__const.test_ndrange_3D.GS3c, i64 24, i1 false)
call spir_func void @_Z10ndrange_3DPKm(ptr dead_on_unwind nonnull writable sret(%struct.ndrange_t) align 8 %tmp5, ptr noundef nonnull %GS3c) #5
call spir_func void @_Z10ndrange_2DPKm(ptr dead_on_unwind nonnull writable sret(%struct.ndrange_t) align 8 %tmp6, ptr noundef %GS2) #5
ret void
}
declare spir_func void @_Z10ndrange_3DPKm(ptr dead_on_unwind writable sret(%struct.ndrange_t) align 8, ptr noundef) local_unnamed_addr #1
declare spir_func void @_Z10ndrange_3DPKmS0_(ptr dead_on_unwind writable sret(%struct.ndrange_t) align 8, ptr noundef, ptr noundef) local_unnamed_addr #1
declare spir_func void @_Z10ndrange_3DPKmS0_S0_(ptr dead_on_unwind writable sret(%struct.ndrange_t) align 8, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1