brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.6 KiB · fe2c7af Raw
309 lines · plain
1;; #pragma OPENCL EXTENSION cl_khr_subgroup_shuffle_relative : enable2;; #pragma OPENCL EXTENSION cl_khr_fp16 : enable3;; #pragma OPENCL EXTENSION cl_khr_fp64 : enable4;;5;; kernel void testShuffleRelativeChar(global char* dst)6;; {7;;     char v = 0;8;;     dst[0] = sub_group_shuffle_up( v, 0 );9;;     dst[1] = sub_group_shuffle_down( v, 0 );10;; }11;;12;; kernel void testShuffleRelativeUChar(global uchar* dst)13;; {14;;     uchar v = 0;15;;     dst[0] = sub_group_shuffle_up( v, 0 );16;;     dst[1] = sub_group_shuffle_down( v, 0 );17;; }18;;19;; kernel void testShuffleRelativeShort(global short* dst)20;; {21;;     short v = 0;22;;     dst[0] = sub_group_shuffle_up( v, 0 );23;;     dst[1] = sub_group_shuffle_down( v, 0 );24;; }25;;26;; kernel void testShuffleRelativeUShort(global ushort* dst)27;; {28;;     ushort v = 0;29;;     dst[0] = sub_group_shuffle_up( v, 0 );30;;     dst[1] = sub_group_shuffle_down( v, 0 );31;; }32;;33;; kernel void testShuffleRelativeInt(global int* dst)34;; {35;;     int v = 0;36;;     dst[0] = sub_group_shuffle_up( v, 0 );37;;     dst[1] = sub_group_shuffle_down( v, 0 );38;; }39;;40;; kernel void testShuffleRelativeUInt(global uint* dst)41;; {42;;     uint v = 0;43;;     dst[0] = sub_group_shuffle_up( v, 0 );44;;     dst[1] = sub_group_shuffle_down( v, 0 );45;; }46;;47;; kernel void testShuffleRelativeLong(global long* dst)48;; {49;;     long v = 0;50;;     dst[0] = sub_group_shuffle_up( v, 0 );51;;     dst[1] = sub_group_shuffle_down( v, 0 );52;; }53;;54;; kernel void testShuffleRelativeULong(global ulong* dst)55;; {56;;     ulong v = 0;57;;     dst[0] = sub_group_shuffle_up( v, 0 );58;;     dst[1] = sub_group_shuffle_down( v, 0 );59;; }60;;61;; kernel void testShuffleRelativeFloat(global float* dst)62;; {63;;     float v = 0;64;;     dst[0] = sub_group_shuffle_up( v, 0 );65;;     dst[1] = sub_group_shuffle_down( v, 0 );66;; }67;;68;; kernel void testShuffleRelativeHalf(global half* dst)69;; {70;;     half v = 0;71;;     dst[0] = sub_group_shuffle_up( v, 0 );72;;     dst[1] = sub_group_shuffle_down( v, 0 );73;; }74;;75;; kernel void testShuffleRelativeDouble(global double* dst)76;; {77;;     double v = 0;78;;     dst[0] = sub_group_shuffle_up( v, 0 );79;;     dst[1] = sub_group_shuffle_down( v, 0 );80;; }81 82; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV83; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}84 85; CHECK-SPIRV-DAG: OpCapability GroupNonUniformShuffleRelative86 87; CHECK-SPIRV-DAG: %[[#char:]] = OpTypeInt 8 088; CHECK-SPIRV-DAG: %[[#short:]] = OpTypeInt 16 089; CHECK-SPIRV-DAG: %[[#int:]] = OpTypeInt 32 090; CHECK-SPIRV-DAG: %[[#long:]] = OpTypeInt 64 091; CHECK-SPIRV-DAG: %[[#half:]] = OpTypeFloat 1692; CHECK-SPIRV-DAG: %[[#float:]] = OpTypeFloat 3293; CHECK-SPIRV-DAG: %[[#double:]] = OpTypeFloat 6494 95; CHECK-SPIRV-DAG: %[[#ScopeSubgroup:]] = OpConstant %[[#int]] 3{{$}}96; CHECK-SPIRV-DAG: %[[#char_0:]] = OpConstantNull %[[#char]]97; CHECK-SPIRV-DAG: %[[#short_0:]] = OpConstantNull %[[#short]]98; CHECK-SPIRV-DAG: %[[#int_0:]] = OpConstantNull %[[#int]]99; CHECK-SPIRV-DAG: %[[#long_0:]] = OpConstantNull %[[#long]]100; CHECK-SPIRV-DAG: %[[#half_0:]] = OpConstantNull %[[#half]]101; CHECK-SPIRV-DAG: %[[#float_0:]] = OpConstantNull %[[#float]]102; CHECK-SPIRV-DAG: %[[#double_0:]] = OpConstantNull %[[#double]]103 104; CHECK-SPIRV: OpFunction105; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleUp %[[#char]] %[[#ScopeSubgroup]] %[[#char_0]] %[[#int_0]]106; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleUp %[[#char]] %[[#ScopeSubgroup]] %[[#char_0]] %[[#int_0]]107; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleDown %[[#char]] %[[#ScopeSubgroup]] %[[#char_0]] %[[#int_0]]108; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleDown %[[#char]] %[[#ScopeSubgroup]] %[[#char_0]] %[[#int_0]]109; CHECK-SPIRV: OpFunctionEnd110 111define dso_local spir_kernel void @testShuffleRelativeChar(i8 addrspace(1)* nocapture) local_unnamed_addr {112  %2 = tail call spir_func signext i8 @_Z20sub_group_shuffle_upcj(i8 signext 0, i32 0)113  %w2 = tail call spir_func i8 @__spirv_GroupNonUniformShuffleUp(i32 3, i8 signext 0, i32 0)114  store i8 %2, i8 addrspace(1)* %0, align 1115  %3 = tail call spir_func signext i8 @_Z22sub_group_shuffle_downcj(i8 signext 0, i32 0)116  %w3 = tail call spir_func i8 @__spirv_GroupNonUniformShuffleDown(i32 3, i8 signext 0, i32 0)117  %4 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 1118  store i8 %3, i8 addrspace(1)* %4, align 1119  ret void120}121 122declare dso_local spir_func signext i8 @_Z20sub_group_shuffle_upcj(i8 signext, i32) local_unnamed_addr123 124declare dso_local spir_func signext i8 @_Z22sub_group_shuffle_downcj(i8 signext, i32) local_unnamed_addr125 126declare dso_local spir_func i8 @__spirv_GroupNonUniformShuffleUp(i32, i8, i32)127 128declare dso_local spir_func i8 @__spirv_GroupNonUniformShuffleDown(i32, i8, i32)129 130; CHECK-SPIRV: OpFunction131; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleUp %[[#char]] %[[#ScopeSubgroup]] %[[#char_0]] %[[#int_0]]132; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleDown %[[#char]] %[[#ScopeSubgroup]] %[[#char_0]] %[[#int_0]]133; CHECK-SPIRV: OpFunctionEnd134 135define dso_local spir_kernel void @testShuffleRelativeUChar(i8 addrspace(1)* nocapture) local_unnamed_addr {136  %2 = tail call spir_func zeroext i8 @_Z20sub_group_shuffle_uphj(i8 zeroext 0, i32 0)137  store i8 %2, i8 addrspace(1)* %0, align 1138  %3 = tail call spir_func zeroext i8 @_Z22sub_group_shuffle_downhj(i8 zeroext 0, i32 0)139  %4 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 1140  store i8 %3, i8 addrspace(1)* %4, align 1141  ret void142}143 144declare dso_local spir_func zeroext i8 @_Z20sub_group_shuffle_uphj(i8 zeroext, i32) local_unnamed_addr145 146declare dso_local spir_func zeroext i8 @_Z22sub_group_shuffle_downhj(i8 zeroext, i32) local_unnamed_addr147 148; CHECK-SPIRV: OpFunction149; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleUp %[[#short]] %[[#ScopeSubgroup]] %[[#short_0]] %[[#int_0]]150; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleDown %[[#short]] %[[#ScopeSubgroup]] %[[#short_0]] %[[#int_0]]151; CHECK-SPIRV: OpFunctionEnd152 153define dso_local spir_kernel void @testShuffleRelativeShort(i16 addrspace(1)* nocapture) local_unnamed_addr {154  %2 = tail call spir_func signext i16 @_Z20sub_group_shuffle_upsj(i16 signext 0, i32 0)155  store i16 %2, i16 addrspace(1)* %0, align 2156  %3 = tail call spir_func signext i16 @_Z22sub_group_shuffle_downsj(i16 signext 0, i32 0)157  %4 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 1158  store i16 %3, i16 addrspace(1)* %4, align 2159  ret void160}161 162declare dso_local spir_func signext i16 @_Z20sub_group_shuffle_upsj(i16 signext, i32) local_unnamed_addr163 164declare dso_local spir_func signext i16 @_Z22sub_group_shuffle_downsj(i16 signext, i32) local_unnamed_addr165 166; CHECK-SPIRV: OpFunction167; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleUp %[[#short]] %[[#ScopeSubgroup]] %[[#short_0]] %[[#int_0]]168; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleDown %[[#short]] %[[#ScopeSubgroup]] %[[#short_0]] %[[#int_0]]169; CHECK-SPIRV: OpFunctionEnd170 171define dso_local spir_kernel void @testShuffleRelativeUShort(i16 addrspace(1)* nocapture) local_unnamed_addr {172  %2 = tail call spir_func zeroext i16 @_Z20sub_group_shuffle_uptj(i16 zeroext 0, i32 0)173  store i16 %2, i16 addrspace(1)* %0, align 2174  %3 = tail call spir_func zeroext i16 @_Z22sub_group_shuffle_downtj(i16 zeroext 0, i32 0)175  %4 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 1176  store i16 %3, i16 addrspace(1)* %4, align 2177  ret void178}179 180declare dso_local spir_func zeroext i16 @_Z20sub_group_shuffle_uptj(i16 zeroext, i32) local_unnamed_addr181 182declare dso_local spir_func zeroext i16 @_Z22sub_group_shuffle_downtj(i16 zeroext, i32) local_unnamed_addr183 184; CHECK-SPIRV: OpFunction185; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleUp %[[#int]] %[[#ScopeSubgroup]] %[[#int_0]] %[[#int_0]]186; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleDown %[[#int]] %[[#ScopeSubgroup]] %[[#int_0]] %[[#int_0]]187; CHECK-SPIRV: OpFunctionEnd188 189define dso_local spir_kernel void @testShuffleRelativeInt(i32 addrspace(1)* nocapture) local_unnamed_addr {190  %2 = tail call spir_func i32 @_Z20sub_group_shuffle_upij(i32 0, i32 0)191  store i32 %2, i32 addrspace(1)* %0, align 4192  %3 = tail call spir_func i32 @_Z22sub_group_shuffle_downij(i32 0, i32 0)193  %4 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 1194  store i32 %3, i32 addrspace(1)* %4, align 4195  ret void196}197 198declare dso_local spir_func i32 @_Z20sub_group_shuffle_upij(i32, i32) local_unnamed_addr199 200declare dso_local spir_func i32 @_Z22sub_group_shuffle_downij(i32, i32) local_unnamed_addr201 202; CHECK-SPIRV: OpFunction203; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleUp %[[#int]] %[[#ScopeSubgroup]] %[[#int_0]] %[[#int_0]]204; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleDown %[[#int]] %[[#ScopeSubgroup]] %[[#int_0]] %[[#int_0]]205; CHECK-SPIRV: OpFunctionEnd206 207define dso_local spir_kernel void @testShuffleRelativeUInt(i32 addrspace(1)* nocapture) local_unnamed_addr {208  %2 = tail call spir_func i32 @_Z20sub_group_shuffle_upjj(i32 0, i32 0)209  store i32 %2, i32 addrspace(1)* %0, align 4210  %3 = tail call spir_func i32 @_Z22sub_group_shuffle_downjj(i32 0, i32 0)211  %4 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 1212  store i32 %3, i32 addrspace(1)* %4, align 4213  ret void214}215 216declare dso_local spir_func i32 @_Z20sub_group_shuffle_upjj(i32, i32) local_unnamed_addr217 218declare dso_local spir_func i32 @_Z22sub_group_shuffle_downjj(i32, i32) local_unnamed_addr219 220; CHECK-SPIRV: OpFunction221; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleUp %[[#long]] %[[#ScopeSubgroup]] %[[#long_0]] %[[#int_0]]222; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleDown %[[#long]] %[[#ScopeSubgroup]] %[[#long_0]] %[[#int_0]]223; CHECK-SPIRV: OpFunctionEnd224 225define dso_local spir_kernel void @testShuffleRelativeLong(i64 addrspace(1)* nocapture) local_unnamed_addr {226  %2 = tail call spir_func i64 @_Z20sub_group_shuffle_uplj(i64 0, i32 0)227  store i64 %2, i64 addrspace(1)* %0, align 8228  %3 = tail call spir_func i64 @_Z22sub_group_shuffle_downlj(i64 0, i32 0)229  %4 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 1230  store i64 %3, i64 addrspace(1)* %4, align 8231  ret void232}233 234declare dso_local spir_func i64 @_Z20sub_group_shuffle_uplj(i64, i32) local_unnamed_addr235 236declare dso_local spir_func i64 @_Z22sub_group_shuffle_downlj(i64, i32) local_unnamed_addr237 238; CHECK-SPIRV: OpFunction239; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleUp %[[#long]] %[[#ScopeSubgroup]] %[[#long_0]] %[[#int_0]]240; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleDown %[[#long]] %[[#ScopeSubgroup]] %[[#long_0]] %[[#int_0]]241; CHECK-SPIRV: OpFunctionEnd242 243define dso_local spir_kernel void @testShuffleRelativeULong(i64 addrspace(1)* nocapture) local_unnamed_addr {244  %2 = tail call spir_func i64 @_Z20sub_group_shuffle_upmj(i64 0, i32 0)245  store i64 %2, i64 addrspace(1)* %0, align 8246  %3 = tail call spir_func i64 @_Z22sub_group_shuffle_downmj(i64 0, i32 0)247  %4 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 1248  store i64 %3, i64 addrspace(1)* %4, align 8249  ret void250}251 252declare dso_local spir_func i64 @_Z20sub_group_shuffle_upmj(i64, i32) local_unnamed_addr253 254declare dso_local spir_func i64 @_Z22sub_group_shuffle_downmj(i64, i32) local_unnamed_addr255 256; CHECK-SPIRV: OpFunction257; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleUp %[[#float]] %[[#ScopeSubgroup]] %[[#float_0]] %[[#int_0]]258; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleDown %[[#float]] %[[#ScopeSubgroup]] %[[#float_0]] %[[#int_0]]259; CHECK-SPIRV: OpFunctionEnd260 261define dso_local spir_kernel void @testShuffleRelativeFloat(float addrspace(1)* nocapture) local_unnamed_addr {262  %2 = tail call spir_func float @_Z20sub_group_shuffle_upfj(float 0.000000e+00, i32 0)263  store float %2, float addrspace(1)* %0, align 4264  %3 = tail call spir_func float @_Z22sub_group_shuffle_downfj(float 0.000000e+00, i32 0)265  %4 = getelementptr inbounds float, float addrspace(1)* %0, i64 1266  store float %3, float addrspace(1)* %4, align 4267  ret void268}269 270declare dso_local spir_func float @_Z20sub_group_shuffle_upfj(float, i32) local_unnamed_addr271 272declare dso_local spir_func float @_Z22sub_group_shuffle_downfj(float, i32) local_unnamed_addr273 274; CHECK-SPIRV: OpFunction275; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleUp %[[#half]] %[[#ScopeSubgroup]] %[[#half_0]] %[[#int_0]]276; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleDown %[[#half]] %[[#ScopeSubgroup]] %[[#half_0]] %[[#int_0]]277; CHECK-SPIRV: OpFunctionEnd278 279define dso_local spir_kernel void @testShuffleRelativeHalf(half addrspace(1)* nocapture) local_unnamed_addr {280  %2 = tail call spir_func half @_Z20sub_group_shuffle_upDhj(half 0xH0000, i32 0)281  store half %2, half addrspace(1)* %0, align 2282  %3 = tail call spir_func half @_Z22sub_group_shuffle_downDhj(half 0xH0000, i32 0)283  %4 = getelementptr inbounds half, half addrspace(1)* %0, i64 1284  store half %3, half addrspace(1)* %4, align 2285  ret void286}287 288declare dso_local spir_func half @_Z20sub_group_shuffle_upDhj(half, i32) local_unnamed_addr289 290declare dso_local spir_func half @_Z22sub_group_shuffle_downDhj(half, i32) local_unnamed_addr291 292; CHECK-SPIRV: OpFunction293; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleUp %[[#double]] %[[#ScopeSubgroup]] %[[#double_0]] %[[#int_0]]294; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleDown %[[#double]] %[[#ScopeSubgroup]] %[[#double_0]] %[[#int_0]]295; CHECK-SPIRV: OpFunctionEnd296 297define dso_local spir_kernel void @testShuffleRelativeDouble(double addrspace(1)* nocapture) local_unnamed_addr {298  %2 = tail call spir_func double @_Z20sub_group_shuffle_updj(double 0.000000e+00, i32 0)299  store double %2, double addrspace(1)* %0, align 8300  %3 = tail call spir_func double @_Z22sub_group_shuffle_downdj(double 0.000000e+00, i32 0)301  %4 = getelementptr inbounds double, double addrspace(1)* %0, i64 1302  store double %3, double addrspace(1)* %4, align 8303  ret void304}305 306declare dso_local spir_func double @_Z20sub_group_shuffle_updj(double, i32) local_unnamed_addr307 308declare dso_local spir_func double @_Z22sub_group_shuffle_downdj(double, i32) local_unnamed_addr309