brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.1 KiB · 013c303 Raw
305 lines · plain
1;; #pragma OPENCL EXTENSION cl_khr_subgroup_shuffle : enable2;; #pragma OPENCL EXTENSION cl_khr_fp16 : enable3;; #pragma OPENCL EXTENSION cl_khr_fp64 : enable4;;5;; kernel void testShuffleChar(global char* dst)6;; {7;;     char v = 0;8;;     dst[0] = sub_group_shuffle( v, 0 );9;;     dst[1] = sub_group_shuffle_xor( v, 0 );10;; }11;;12;; kernel void testShuffleUChar(global uchar* dst)13;; {14;;     uchar v = 0;15;;     dst[0] = sub_group_shuffle( v, 0 );16;;     dst[1] = sub_group_shuffle_xor( v, 0 );17;; }18;;19;; kernel void testShuffleShort(global short* dst)20;; {21;;     short v = 0;22;;     dst[0] = sub_group_shuffle( v, 0 );23;;     dst[1] = sub_group_shuffle_xor( v, 0 );24;; }25;;26;; kernel void testShuffleUShort(global ushort* dst)27;; {28;;     ushort v = 0;29;;     dst[0] = sub_group_shuffle( v, 0 );30;;     dst[1] = sub_group_shuffle_xor( v, 0 );31;; }32;;33;; kernel void testShuffleInt(global int* dst)34;; {35;;     int v = 0;36;;     dst[0] = sub_group_shuffle( v, 0 );37;;     dst[1] = sub_group_shuffle_xor( v, 0 );38;; }39;;40;; kernel void testShuffleUInt(global uint* dst)41;; {42;;     uint v = 0;43;;     dst[0] = sub_group_shuffle( v, 0 );44;;     dst[1] = sub_group_shuffle_xor( v, 0 );45;; }46;;47;; kernel void testShuffleLong(global long* dst)48;; {49;;     long v = 0;50;;     dst[0] = sub_group_shuffle( v, 0 );51;;     dst[1] = sub_group_shuffle_xor( v, 0 );52;; }53;;54;; kernel void testShuffleULong(global ulong* dst)55;; {56;;     ulong v = 0;57;;     dst[0] = sub_group_shuffle( v, 0 );58;;     dst[1] = sub_group_shuffle_xor( v, 0 );59;; }60;;61;; kernel void testShuffleFloat(global float* dst)62;; {63;;     float v = 0;64;;     dst[0] = sub_group_shuffle( v, 0 );65;;     dst[1] = sub_group_shuffle_xor( v, 0 );66;; }67;;68;; kernel void testShuffleHalf(global half* dst)69;; {70;;     half v = 0;71;;     dst[0] = sub_group_shuffle( v, 0 );72;;     dst[1] = sub_group_shuffle_xor( v, 0 );73;; }74;;75;; kernel void testShuffleDouble(global double* dst)76;; {77;;     double v = 0;78;;     dst[0] = sub_group_shuffle( v, 0 );79;;     dst[1] = sub_group_shuffle_xor( 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 GroupNonUniformShuffle86 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: %[[#]] = OpGroupNonUniformShuffle %[[#char]] %[[#ScopeSubgroup]] %[[#char_0]] %[[#int_0]]106; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleXor %[[#char]] %[[#ScopeSubgroup]] %[[#char_0]] %[[#int_0]]107; CHECK-SPIRV: OpFunctionEnd108 109define dso_local spir_kernel void @testShuffleChar(i8 addrspace(1)* nocapture) local_unnamed_addr {110  %2 = tail call spir_func signext i8 @_Z17sub_group_shufflecj(i8 signext 0, i32 0)111  %r2 = tail call spir_func signext i8 @__spirv_GroupNonUniformShuffle(i32 3, i8 signext 0, i32 0)112  store i8 %2, i8 addrspace(1)* %0, align 1113  %3 = tail call spir_func signext i8 @_Z21sub_group_shuffle_xorcj(i8 signext 0, i32 0)114  %r3 = tail call spir_func signext i8 @__spirv_GroupNonUniformShuffleXor(i32 3, i8 signext 0, i32 0)115  %4 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 1116  store i8 %3, i8 addrspace(1)* %4, align 1117  ret void118}119 120declare dso_local spir_func signext i8 @_Z17sub_group_shufflecj(i8 signext, i32) local_unnamed_addr121declare dso_local spir_func signext i8 @__spirv_GroupNonUniformShuffle(i32, i8 signext, i32)122 123declare dso_local spir_func signext i8 @_Z21sub_group_shuffle_xorcj(i8 signext, i32) local_unnamed_addr124declare dso_local spir_func signext i8 @__spirv_GroupNonUniformShuffleXor(i32, i8 signext, i32)125 126; CHECK-SPIRV: OpFunction127; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffle %[[#char]] %[[#ScopeSubgroup]] %[[#char_0]] %[[#int_0]]128; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleXor %[[#char]] %[[#ScopeSubgroup]] %[[#char_0]] %[[#int_0]]129; CHECK-SPIRV: OpFunctionEnd130 131define dso_local spir_kernel void @testShuffleUChar(i8 addrspace(1)* nocapture) local_unnamed_addr {132  %2 = tail call spir_func zeroext i8 @_Z17sub_group_shufflehj(i8 zeroext 0, i32 0)133  store i8 %2, i8 addrspace(1)* %0, align 1134  %3 = tail call spir_func zeroext i8 @_Z21sub_group_shuffle_xorhj(i8 zeroext 0, i32 0)135  %4 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 1136  store i8 %3, i8 addrspace(1)* %4, align 1137  ret void138}139 140declare dso_local spir_func zeroext i8 @_Z17sub_group_shufflehj(i8 zeroext, i32) local_unnamed_addr141 142declare dso_local spir_func zeroext i8 @_Z21sub_group_shuffle_xorhj(i8 zeroext, i32) local_unnamed_addr143 144; CHECK-SPIRV: OpFunction145; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffle %[[#short]] %[[#ScopeSubgroup]] %[[#short_0]] %[[#int_0]]146; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleXor %[[#short]] %[[#ScopeSubgroup]] %[[#short_0]] %[[#int_0]]147; CHECK-SPIRV: OpFunctionEnd148 149define dso_local spir_kernel void @testShuffleShort(i16 addrspace(1)* nocapture) local_unnamed_addr {150  %2 = tail call spir_func signext i16 @_Z17sub_group_shufflesj(i16 signext 0, i32 0)151  store i16 %2, i16 addrspace(1)* %0, align 2152  %3 = tail call spir_func signext i16 @_Z21sub_group_shuffle_xorsj(i16 signext 0, i32 0)153  %4 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 1154  store i16 %3, i16 addrspace(1)* %4, align 2155  ret void156}157 158declare dso_local spir_func signext i16 @_Z17sub_group_shufflesj(i16 signext, i32) local_unnamed_addr159 160declare dso_local spir_func signext i16 @_Z21sub_group_shuffle_xorsj(i16 signext, i32) local_unnamed_addr161 162; CHECK-SPIRV: OpFunction163; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffle %[[#short]] %[[#ScopeSubgroup]] %[[#short_0]] %[[#int_0]]164; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleXor %[[#short]] %[[#ScopeSubgroup]] %[[#short_0]] %[[#int_0]]165; CHECK-SPIRV: OpFunctionEnd166 167define dso_local spir_kernel void @testShuffleUShort(i16 addrspace(1)* nocapture) local_unnamed_addr {168  %2 = tail call spir_func zeroext i16 @_Z17sub_group_shuffletj(i16 zeroext 0, i32 0)169  store i16 %2, i16 addrspace(1)* %0, align 2170  %3 = tail call spir_func zeroext i16 @_Z21sub_group_shuffle_xortj(i16 zeroext 0, i32 0)171  %4 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 1172  store i16 %3, i16 addrspace(1)* %4, align 2173  ret void174}175 176declare dso_local spir_func zeroext i16 @_Z17sub_group_shuffletj(i16 zeroext, i32) local_unnamed_addr177 178declare dso_local spir_func zeroext i16 @_Z21sub_group_shuffle_xortj(i16 zeroext, i32) local_unnamed_addr179 180; CHECK-SPIRV: OpFunction181; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffle %[[#int]] %[[#ScopeSubgroup]] %[[#int_0]] %[[#int_0]]182; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleXor %[[#int]] %[[#ScopeSubgroup]] %[[#int_0]] %[[#int_0]]183; CHECK-SPIRV: OpFunctionEnd184 185define dso_local spir_kernel void @testShuffleInt(i32 addrspace(1)* nocapture) local_unnamed_addr {186  %2 = tail call spir_func i32 @_Z17sub_group_shuffleij(i32 0, i32 0)187  store i32 %2, i32 addrspace(1)* %0, align 4188  %3 = tail call spir_func i32 @_Z21sub_group_shuffle_xorij(i32 0, i32 0)189  %4 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 1190  store i32 %3, i32 addrspace(1)* %4, align 4191  ret void192}193 194declare dso_local spir_func i32 @_Z17sub_group_shuffleij(i32, i32) local_unnamed_addr195 196declare dso_local spir_func i32 @_Z21sub_group_shuffle_xorij(i32, i32) local_unnamed_addr197 198; CHECK-SPIRV: OpFunction199; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffle %[[#int]] %[[#ScopeSubgroup]] %[[#int_0]] %[[#int_0]]200; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleXor %[[#int]] %[[#ScopeSubgroup]] %[[#int_0]] %[[#int_0]]201; CHECK-SPIRV: OpFunctionEnd202 203define dso_local spir_kernel void @testShuffleUInt(i32 addrspace(1)* nocapture) local_unnamed_addr {204  %2 = tail call spir_func i32 @_Z17sub_group_shufflejj(i32 0, i32 0)205  store i32 %2, i32 addrspace(1)* %0, align 4206  %3 = tail call spir_func i32 @_Z21sub_group_shuffle_xorjj(i32 0, i32 0)207  %4 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 1208  store i32 %3, i32 addrspace(1)* %4, align 4209  ret void210}211 212declare dso_local spir_func i32 @_Z17sub_group_shufflejj(i32, i32) local_unnamed_addr213 214declare dso_local spir_func i32 @_Z21sub_group_shuffle_xorjj(i32, i32) local_unnamed_addr215 216; CHECK-SPIRV: OpFunction217; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffle %[[#long]] %[[#ScopeSubgroup]] %[[#long_0]] %[[#int_0]]218; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleXor %[[#long]] %[[#ScopeSubgroup]] %[[#long_0]] %[[#int_0]]219; CHECK-SPIRV: OpFunctionEnd220 221define dso_local spir_kernel void @testShuffleLong(i64 addrspace(1)* nocapture) local_unnamed_addr {222  %2 = tail call spir_func i64 @_Z17sub_group_shufflelj(i64 0, i32 0)223  store i64 %2, i64 addrspace(1)* %0, align 8224  %3 = tail call spir_func i64 @_Z21sub_group_shuffle_xorlj(i64 0, i32 0)225  %4 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 1226  store i64 %3, i64 addrspace(1)* %4, align 8227  ret void228}229 230declare dso_local spir_func i64 @_Z17sub_group_shufflelj(i64, i32) local_unnamed_addr231 232declare dso_local spir_func i64 @_Z21sub_group_shuffle_xorlj(i64, i32) local_unnamed_addr233 234; CHECK-SPIRV: OpFunction235; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffle %[[#long]] %[[#ScopeSubgroup]] %[[#long_0]] %[[#int_0]]236; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleXor %[[#long]] %[[#ScopeSubgroup]] %[[#long_0]] %[[#int_0]]237; CHECK-SPIRV: OpFunctionEnd238 239define dso_local spir_kernel void @testShuffleULong(i64 addrspace(1)* nocapture) local_unnamed_addr {240  %2 = tail call spir_func i64 @_Z17sub_group_shufflemj(i64 0, i32 0)241  store i64 %2, i64 addrspace(1)* %0, align 8242  %3 = tail call spir_func i64 @_Z21sub_group_shuffle_xormj(i64 0, i32 0)243  %4 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 1244  store i64 %3, i64 addrspace(1)* %4, align 8245  ret void246}247 248declare dso_local spir_func i64 @_Z17sub_group_shufflemj(i64, i32) local_unnamed_addr249 250declare dso_local spir_func i64 @_Z21sub_group_shuffle_xormj(i64, i32) local_unnamed_addr251 252; CHECK-SPIRV: OpFunction253; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffle %[[#float]] %[[#ScopeSubgroup]] %[[#float_0]] %[[#int_0]]254; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleXor %[[#float]] %[[#ScopeSubgroup]] %[[#float_0]] %[[#int_0]]255; CHECK-SPIRV: OpFunctionEnd256 257define dso_local spir_kernel void @testShuffleFloat(float addrspace(1)* nocapture) local_unnamed_addr {258  %2 = tail call spir_func float @_Z17sub_group_shufflefj(float 0.000000e+00, i32 0)259  store float %2, float addrspace(1)* %0, align 4260  %3 = tail call spir_func float @_Z21sub_group_shuffle_xorfj(float 0.000000e+00, i32 0)261  %4 = getelementptr inbounds float, float addrspace(1)* %0, i64 1262  store float %3, float addrspace(1)* %4, align 4263  ret void264}265 266declare dso_local spir_func float @_Z17sub_group_shufflefj(float, i32) local_unnamed_addr267 268declare dso_local spir_func float @_Z21sub_group_shuffle_xorfj(float, i32) local_unnamed_addr269 270; CHECK-SPIRV: OpFunction271; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffle %[[#half]] %[[#ScopeSubgroup]] %[[#half_0]] %[[#int_0]]272; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleXor %[[#half]] %[[#ScopeSubgroup]] %[[#half_0]] %[[#int_0]]273; CHECK-SPIRV: OpFunctionEnd274 275define dso_local spir_kernel void @testShuffleHalf(half addrspace(1)* nocapture) local_unnamed_addr {276  %2 = tail call spir_func half @_Z17sub_group_shuffleDhj(half 0xH0000, i32 0)277  store half %2, half addrspace(1)* %0, align 2278  %3 = tail call spir_func half @_Z21sub_group_shuffle_xorDhj(half 0xH0000, i32 0)279  %4 = getelementptr inbounds half, half addrspace(1)* %0, i64 1280  store half %3, half addrspace(1)* %4, align 2281  ret void282}283 284declare dso_local spir_func half @_Z17sub_group_shuffleDhj(half, i32) local_unnamed_addr285 286declare dso_local spir_func half @_Z21sub_group_shuffle_xorDhj(half, i32) local_unnamed_addr287 288; CHECK-SPIRV: OpFunction289; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffle %[[#double]] %[[#ScopeSubgroup]] %[[#double_0]] %[[#int_0]]290; CHECK-SPIRV: %[[#]] = OpGroupNonUniformShuffleXor %[[#double]] %[[#ScopeSubgroup]] %[[#double_0]] %[[#int_0]]291; CHECK-SPIRV: OpFunctionEnd292 293define dso_local spir_kernel void @testShuffleDouble(double addrspace(1)* nocapture) local_unnamed_addr {294  %2 = tail call spir_func double @_Z17sub_group_shuffledj(double 0.000000e+00, i32 0)295  store double %2, double addrspace(1)* %0, align 8296  %3 = tail call spir_func double @_Z21sub_group_shuffle_xordj(double 0.000000e+00, i32 0)297  %4 = getelementptr inbounds double, double addrspace(1)* %0, i64 1298  store double %3, double addrspace(1)* %4, align 8299  ret void300}301 302declare dso_local spir_func double @_Z17sub_group_shuffledj(double, i32) local_unnamed_addr303 304declare dso_local spir_func double @_Z21sub_group_shuffle_xordj(double, i32) local_unnamed_addr305