358 lines · plain
1; RUN: not llc -O0 -mtriple=spirv32-unknown-unknown %s -o %t.spvt 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR2; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_KHR_subgroup_rotate %s -o - | FileCheck %s3; TODO: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_KHR_subgroup_rotate %s -o - -filetype=obj | spirv-val %}4 5; CHECK-ERROR: LLVM ERROR: OpGroupNonUniformRotateKHR instruction requires the following SPIR-V extension: SPV_KHR_subgroup_rotate6 7; CHECK: OpCapability GroupNonUniformRotateKHR8; CHECK: OpExtension "SPV_KHR_subgroup_rotate"9 10; CHECK-DAG: %[[TyInt8:.*]] = OpTypeInt 8 011; CHECK-DAG: %[[TyInt16:.*]] = OpTypeInt 16 012; CHECK-DAG: %[[TyInt32:.*]] = OpTypeInt 32 013; CHECK-DAG: %[[TyInt64:.*]] = OpTypeInt 64 014; CHECK-DAG: %[[TyFloat:.*]] = OpTypeFloat 3215; CHECK-DAG: %[[TyHalf:.*]] = OpTypeFloat 1616; CHECK-DAG: %[[TyDouble:.*]] = OpTypeFloat 6417; CHECK-DAG: %[[ScopeSubgroup:.*]] = OpConstant %[[TyInt32]] 318; CHECK-DAG: %[[ConstInt2:.*]] = OpConstant %[[TyInt32]] 219; CHECK-DAG: %[[ConstInt4:.*]] = OpConstant %[[TyInt32]] 420 21target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"22target triple = "spir"23 24; Function Attrs: convergent noinline norecurse nounwind optnone25define dso_local spir_kernel void @testRotateChar(ptr addrspace(1) noundef align 1 %dst) #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !5 !kernel_arg_base_type !5 !kernel_arg_type_qual !6 {26entry:27 %dst.addr = alloca ptr addrspace(1), align 428 %v = alloca i8, align 129 store ptr addrspace(1) %dst, ptr %dst.addr, align 430 store i8 0, ptr %v, align 131 %value = load i8, ptr %v, align 132; CHECK: OpGroupNonUniformRotateKHR %[[TyInt8]] %[[ScopeSubgroup]] %[[#]] %[[ConstInt2]]33 %call = call spir_func signext i8 @_Z16sub_group_rotateci(i8 noundef signext %value, i32 noundef 2) #234 %data = load ptr addrspace(1), ptr %dst.addr, align 435 %arrayidx = getelementptr inbounds i8, ptr addrspace(1) %data, i32 036 store i8 %call, ptr addrspace(1) %arrayidx, align 137 %value_clustered = load i8, ptr %v, align 138; CHECK: OpGroupNonUniformRotateKHR %[[TyInt8]] %[[ScopeSubgroup]] %[[#]] %[[ConstInt2]] %[[ConstInt4]]39 %call1 = call spir_func signext i8 @_Z26sub_group_clustered_rotatecij(i8 noundef signext %value_clustered, i32 noundef 2, i32 noundef 4) #240 %data2 = load ptr addrspace(1), ptr %dst.addr, align 441 %arrayidx2 = getelementptr inbounds i8, ptr addrspace(1) %data2, i32 142 store i8 %call1, ptr addrspace(1) %arrayidx2, align 143 ret void44}45 46; Function Attrs: convergent nounwind47declare spir_func signext i8 @_Z16sub_group_rotateci(i8 noundef signext, i32 noundef) #148 49; Function Attrs: convergent nounwind50declare spir_func signext i8 @_Z26sub_group_clustered_rotatecij(i8 noundef signext, i32 noundef, i32 noundef) #151 52; Function Attrs: convergent noinline norecurse nounwind optnone53define dso_local spir_kernel void @testRotateUChar(ptr addrspace(1) noundef align 1 %dst) #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !7 !kernel_arg_base_type !7 !kernel_arg_type_qual !6 {54entry:55 %dst.addr = alloca ptr addrspace(1), align 456 %v = alloca i8, align 157 store ptr addrspace(1) %dst, ptr %dst.addr, align 458 store i8 0, ptr %v, align 159 %value = load i8, ptr %v, align 160; CHECK: OpGroupNonUniformRotateKHR %[[TyInt8]] %[[ScopeSubgroup]] %[[#]] %[[ConstInt2]]61 %call = call spir_func zeroext i8 @_Z16sub_group_rotatehi(i8 noundef zeroext %value, i32 noundef 2) #262 %data = load ptr addrspace(1), ptr %dst.addr, align 463 %arrayidx = getelementptr inbounds i8, ptr addrspace(1) %data, i32 064 store i8 %call, ptr addrspace(1) %arrayidx, align 165 %value_clustered = load i8, ptr %v, align 166; CHECK: OpGroupNonUniformRotateKHR %[[TyInt8]] %[[ScopeSubgroup]] %[[#]] %[[ConstInt2]] %[[ConstInt4]]67 %call1 = call spir_func zeroext i8 @_Z26sub_group_clustered_rotatehij(i8 noundef zeroext %value_clustered, i32 noundef 2, i32 noundef 4) #268 %data2 = load ptr addrspace(1), ptr %dst.addr, align 469 %arrayidx2 = getelementptr inbounds i8, ptr addrspace(1) %data2, i32 170 store i8 %call1, ptr addrspace(1) %arrayidx2, align 171 ret void72}73 74; Function Attrs: convergent nounwind75declare spir_func zeroext i8 @_Z16sub_group_rotatehi(i8 noundef zeroext, i32 noundef) #176 77; Function Attrs: convergent nounwind78declare spir_func zeroext i8 @_Z26sub_group_clustered_rotatehij(i8 noundef zeroext, i32 noundef, i32 noundef) #179 80; Function Attrs: convergent noinline norecurse nounwind optnone81define dso_local spir_kernel void @testRotateShort(ptr addrspace(1) noundef align 2 %dst) #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !8 !kernel_arg_base_type !8 !kernel_arg_type_qual !6 {82entry:83 %dst.addr = alloca ptr addrspace(1), align 484 %v = alloca i16, align 285 store ptr addrspace(1) %dst, ptr %dst.addr, align 486 store i16 0, ptr %v, align 287 %value = load i16, ptr %v, align 288 ; CHECK: OpGroupNonUniformRotateKHR %[[TyInt16]] %[[ScopeSubgroup]] %[[#]] %[[ConstInt2]]89 %call = call spir_func signext i16 @_Z16sub_group_rotatesi(i16 noundef signext %value, i32 noundef 2) #290 %data = load ptr addrspace(1), ptr %dst.addr, align 491 %arrayidx = getelementptr inbounds i16, ptr addrspace(1) %data, i32 092 store i16 %call, ptr addrspace(1) %arrayidx, align 293 %value_clustered = load i16, ptr %v, align 294 ; CHECK: OpGroupNonUniformRotateKHR %[[TyInt16]] %[[ScopeSubgroup]] %[[#]] %[[ConstInt2]] %[[ConstInt4]]95 %call1 = call spir_func signext i16 @_Z26sub_group_clustered_rotatesij(i16 noundef signext %value_clustered, i32 noundef 2, i32 noundef 4) #296 %data2 = load ptr addrspace(1), ptr %dst.addr, align 497 %arrayidx2 = getelementptr inbounds i16, ptr addrspace(1) %data2, i32 198 store i16 %call1, ptr addrspace(1) %arrayidx2, align 299 ret void100}101 102; Function Attrs: convergent nounwind103declare spir_func signext i16 @_Z16sub_group_rotatesi(i16 noundef signext, i32 noundef) #1104 105; Function Attrs: convergent nounwind106declare spir_func signext i16 @_Z26sub_group_clustered_rotatesij(i16 noundef signext, i32 noundef, i32 noundef) #1107 108; Function Attrs: convergent noinline norecurse nounwind optnone109define dso_local spir_kernel void @testRotateUShort(ptr addrspace(1) noundef align 2 %dst) #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !9 !kernel_arg_base_type !9 !kernel_arg_type_qual !6 {110entry:111 %dst.addr = alloca ptr addrspace(1), align 4112 %v = alloca i16, align 2113 store ptr addrspace(1) %dst, ptr %dst.addr, align 4114 store i16 0, ptr %v, align 2115 %value = load i16, ptr %v, align 2116 ; CHECK: OpGroupNonUniformRotateKHR %[[TyInt16]] %[[ScopeSubgroup]] %[[#]] %[[ConstInt2]]117 %call = call spir_func zeroext i16 @_Z16sub_group_rotateti(i16 noundef zeroext %value, i32 noundef 2) #2118 %data = load ptr addrspace(1), ptr %dst.addr, align 4119 %arrayidx = getelementptr inbounds i16, ptr addrspace(1) %data, i32 0120 store i16 %call, ptr addrspace(1) %arrayidx, align 2121 %value_clustered = load i16, ptr %v, align 2122 ; CHECK: OpGroupNonUniformRotateKHR %[[TyInt16]] %[[ScopeSubgroup]] %[[#]] %[[ConstInt2]] %[[ConstInt4]]123 %call1 = call spir_func zeroext i16 @_Z26sub_group_clustered_rotatetij(i16 noundef zeroext %value_clustered, i32 noundef 2, i32 noundef 4) #2124 %data2 = load ptr addrspace(1), ptr %dst.addr, align 4125 %arrayidx2 = getelementptr inbounds i16, ptr addrspace(1) %data2, i32 1126 store i16 %call1, ptr addrspace(1) %arrayidx2, align 2127 ret void128}129 130; Function Attrs: convergent nounwind131declare spir_func zeroext i16 @_Z16sub_group_rotateti(i16 noundef zeroext, i32 noundef) #1132 133; Function Attrs: convergent nounwind134declare spir_func zeroext i16 @_Z26sub_group_clustered_rotatetij(i16 noundef zeroext, i32 noundef, i32 noundef) #1135 136; Function Attrs: convergent noinline norecurse nounwind optnone137define dso_local spir_kernel void @testRotateInt(ptr addrspace(1) noundef align 4 %dst) #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !10 !kernel_arg_base_type !10 !kernel_arg_type_qual !6 {138entry:139 %dst.addr = alloca ptr addrspace(1), align 4140 %v = alloca i32, align 4141 store ptr addrspace(1) %dst, ptr %dst.addr, align 4142 store i32 0, ptr %v, align 4143 %value = load i32, ptr %v, align 4144 ; CHECK: OpGroupNonUniformRotateKHR %[[TyInt32]] %[[ScopeSubgroup]] %[[#]] %[[ConstInt2]]145 %call = call spir_func i32 @_Z16sub_group_rotateii(i32 noundef %value, i32 noundef 2) #2146 %data = load ptr addrspace(1), ptr %dst.addr, align 4147 %arrayidx = getelementptr inbounds i32, ptr addrspace(1) %data, i32 0148 store i32 %call, ptr addrspace(1) %arrayidx, align 4149 %value_clustered = load i32, ptr %v, align 4150 ; CHECK: OpGroupNonUniformRotateKHR %[[TyInt32]] %[[ScopeSubgroup]] %[[#]] %[[ConstInt2]] %[[ConstInt4]]151 %call1 = call spir_func i32 @_Z26sub_group_clustered_rotateiij(i32 noundef %value_clustered, i32 noundef 2, i32 noundef 4) #2152 %data2 = load ptr addrspace(1), ptr %dst.addr, align 4153 %arrayidx2 = getelementptr inbounds i32, ptr addrspace(1) %data2, i32 1154 store i32 %call1, ptr addrspace(1) %arrayidx2, align 4155 ret void156}157 158; Function Attrs: convergent nounwind159declare spir_func i32 @_Z16sub_group_rotateii(i32 noundef, i32 noundef) #1160 161; Function Attrs: convergent nounwind162declare spir_func i32 @_Z26sub_group_clustered_rotateiij(i32 noundef, i32 noundef, i32 noundef) #1163 164; Function Attrs: convergent noinline norecurse nounwind optnone165define dso_local spir_kernel void @testRotateUInt(ptr addrspace(1) noundef align 4 %dst) #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !11 !kernel_arg_base_type !11 !kernel_arg_type_qual !6 {166entry:167 %dst.addr = alloca ptr addrspace(1), align 4168 %v = alloca i32, align 4169 store ptr addrspace(1) %dst, ptr %dst.addr, align 4170 store i32 0, ptr %v, align 4171 %value = load i32, ptr %v, align 4172 ; CHECK: OpGroupNonUniformRotateKHR %[[TyInt32]] %[[ScopeSubgroup]] %[[#]] %[[ConstInt2]]173 %call = call spir_func i32 @_Z16sub_group_rotateji(i32 noundef %value, i32 noundef 2) #2174 %data = load ptr addrspace(1), ptr %dst.addr, align 4175 %arrayidx = getelementptr inbounds i32, ptr addrspace(1) %data, i32 0176 store i32 %call, ptr addrspace(1) %arrayidx, align 4177 %value_clustered = load i32, ptr %v, align 4178 ; CHECK: OpGroupNonUniformRotateKHR %[[TyInt32]] %[[ScopeSubgroup]] %[[#]] %[[ConstInt2]] %[[ConstInt4]]179 %call1 = call spir_func i32 @_Z26sub_group_clustered_rotatejij(i32 noundef %value_clustered, i32 noundef 2, i32 noundef 4) #2180 %data2 = load ptr addrspace(1), ptr %dst.addr, align 4181 %arrayidx2 = getelementptr inbounds i32, ptr addrspace(1) %data2, i32 1182 store i32 %call1, ptr addrspace(1) %arrayidx2, align 4183 ret void184}185 186; Function Attrs: convergent nounwind187declare spir_func i32 @_Z16sub_group_rotateji(i32 noundef, i32 noundef) #1188 189; Function Attrs: convergent nounwind190declare spir_func i32 @_Z26sub_group_clustered_rotatejij(i32 noundef, i32 noundef, i32 noundef) #1191 192; Function Attrs: convergent noinline norecurse nounwind optnone193define dso_local spir_kernel void @testRotateLong(ptr addrspace(1) noundef align 8 %dst) #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !12 !kernel_arg_base_type !12 !kernel_arg_type_qual !6 {194entry:195 %dst.addr = alloca ptr addrspace(1), align 4196 %v = alloca i64, align 8197 store ptr addrspace(1) %dst, ptr %dst.addr, align 4198 store i64 0, ptr %v, align 8199 %value = load i64, ptr %v, align 8200 ; CHECK: OpGroupNonUniformRotateKHR %[[TyInt64]] %[[ScopeSubgroup]] %[[#]] %[[ConstInt2]]201 %call = call spir_func i64 @_Z16sub_group_rotateli(i64 noundef %value, i32 noundef 2) #2202 %data = load ptr addrspace(1), ptr %dst.addr, align 4203 %arrayidx = getelementptr inbounds i64, ptr addrspace(1) %data, i32 0204 store i64 %call, ptr addrspace(1) %arrayidx, align 8205 %value_clustered = load i64, ptr %v, align 8206 ; CHECK: OpGroupNonUniformRotateKHR %[[TyInt64]] %[[ScopeSubgroup]] %[[#]] %[[ConstInt2]] %[[ConstInt4]]207 %call1 = call spir_func i64 @_Z26sub_group_clustered_rotatelij(i64 noundef %value_clustered, i32 noundef 2, i32 noundef 4) #2208 %data2 = load ptr addrspace(1), ptr %dst.addr, align 4209 %arrayidx2 = getelementptr inbounds i64, ptr addrspace(1) %data2, i32 1210 store i64 %call1, ptr addrspace(1) %arrayidx2, align 8211 ret void212}213 214; Function Attrs: convergent nounwind215declare spir_func i64 @_Z16sub_group_rotateli(i64 noundef, i32 noundef) #1216 217; Function Attrs: convergent nounwind218declare spir_func i64 @_Z26sub_group_clustered_rotatelij(i64 noundef, i32 noundef, i32 noundef) #1219 220; Function Attrs: convergent noinline norecurse nounwind optnone221define dso_local spir_kernel void @testRotateULong(ptr addrspace(1) noundef align 8 %dst) #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !13 !kernel_arg_base_type !13 !kernel_arg_type_qual !6 {222entry:223 %dst.addr = alloca ptr addrspace(1), align 4224 %v = alloca i64, align 8225 store ptr addrspace(1) %dst, ptr %dst.addr, align 4226 store i64 0, ptr %v, align 8227 %value = load i64, ptr %v, align 8228 ; CHECK: OpGroupNonUniformRotateKHR %[[TyInt64]] %[[ScopeSubgroup]] %[[#]] %[[ConstInt2]]229 %call = call spir_func i64 @_Z16sub_group_rotatemi(i64 noundef %value, i32 noundef 2) #2230 %data = load ptr addrspace(1), ptr %dst.addr, align 4231 %arrayidx = getelementptr inbounds i64, ptr addrspace(1) %data, i32 0232 store i64 %call, ptr addrspace(1) %arrayidx, align 8233 %value_clustered = load i64, ptr %v, align 8234 ; CHECK: OpGroupNonUniformRotateKHR %[[TyInt64]] %[[ScopeSubgroup]] %[[#]] %[[ConstInt2]] %[[ConstInt4]]235 %call1 = call spir_func i64 @_Z26sub_group_clustered_rotatemij(i64 noundef %value_clustered, i32 noundef 2, i32 noundef 4) #2236 %data2 = load ptr addrspace(1), ptr %dst.addr, align 4237 %arrayidx2 = getelementptr inbounds i64, ptr addrspace(1) %data2, i32 1238 store i64 %call1, ptr addrspace(1) %arrayidx2, align 8239 ret void240}241 242; Function Attrs: convergent nounwind243declare spir_func i64 @_Z16sub_group_rotatemi(i64 noundef, i32 noundef) #1244 245; Function Attrs: convergent nounwind246declare spir_func i64 @_Z26sub_group_clustered_rotatemij(i64 noundef, i32 noundef, i32 noundef) #1247 248; Function Attrs: convergent noinline norecurse nounwind optnone249define dso_local spir_kernel void @testRotateFloat(ptr addrspace(1) noundef align 4 %dst) #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !14 !kernel_arg_base_type !14 !kernel_arg_type_qual !6 {250entry:251 %dst.addr = alloca ptr addrspace(1), align 4252 %v = alloca float, align 4253 store ptr addrspace(1) %dst, ptr %dst.addr, align 4254 store float 0.000000e+00, ptr %v, align 4255 %value = load float, ptr %v, align 4256 ; CHECK: OpGroupNonUniformRotateKHR %[[TyFloat]] %[[ScopeSubgroup]] %[[#]] %[[ConstInt2]]257 %call = call spir_func float @_Z16sub_group_rotatefi(float noundef %value, i32 noundef 2) #2258 %data = load ptr addrspace(1), ptr %dst.addr, align 4259 %arrayidx = getelementptr inbounds float, ptr addrspace(1) %data, i32 0260 store float %call, ptr addrspace(1) %arrayidx, align 4261 %value_clustered = load float, ptr %v, align 4262 ; CHECK: OpGroupNonUniformRotateKHR %[[TyFloat]] %[[ScopeSubgroup]] %[[#]] %[[ConstInt2]] %[[ConstInt4]]263 %call1 = call spir_func float @_Z26sub_group_clustered_rotatefij(float noundef %value_clustered, i32 noundef 2, i32 noundef 4) #2264 %data2 = load ptr addrspace(1), ptr %dst.addr, align 4265 %arrayidx2 = getelementptr inbounds float, ptr addrspace(1) %data2, i32 1266 store float %call1, ptr addrspace(1) %arrayidx2, align 4267 ret void268}269 270; Function Attrs: convergent nounwind271declare spir_func float @_Z16sub_group_rotatefi(float noundef, i32 noundef) #1272 273; Function Attrs: convergent nounwind274declare spir_func float @_Z26sub_group_clustered_rotatefij(float noundef, i32 noundef, i32 noundef) #1275 276; Function Attrs: convergent noinline norecurse nounwind optnone277define dso_local spir_kernel void @testRotateHalf(ptr addrspace(1) noundef align 2 %dst) #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !15 !kernel_arg_base_type !15 !kernel_arg_type_qual !6 {278entry:279 %dst.addr = alloca ptr addrspace(1), align 4280 %v = alloca half, align 2281 store ptr addrspace(1) %dst, ptr %dst.addr, align 4282 store half 0xH0000, ptr %v, align 2283 %value = load half, ptr %v, align 2284 ; CHECK: OpGroupNonUniformRotateKHR %[[TyHalf]] %[[ScopeSubgroup]] %[[#]] %[[ConstInt2]]285 %call = call spir_func half @_Z16sub_group_rotateDhi(half noundef %value, i32 noundef 2) #2286 %data = load ptr addrspace(1), ptr %dst.addr, align 4287 %arrayidx = getelementptr inbounds half, ptr addrspace(1) %data, i32 0288 store half %call, ptr addrspace(1) %arrayidx, align 2289 %value_clustered = load half, ptr %v, align 2290 ; CHECK: OpGroupNonUniformRotateKHR %[[TyHalf]] %[[ScopeSubgroup]] %[[#]] %[[ConstInt2]] %[[ConstInt4]]291 %call1 = call spir_func half @_Z26sub_group_clustered_rotateDhij(half noundef %value_clustered, i32 noundef 2, i32 noundef 4) #2292 %data2 = load ptr addrspace(1), ptr %dst.addr, align 4293 %arrayidx2 = getelementptr inbounds half, ptr addrspace(1) %data2, i32 1294 store half %call1, ptr addrspace(1) %arrayidx2, align 2295 ret void296}297 298; Function Attrs: convergent nounwind299declare spir_func half @_Z16sub_group_rotateDhi(half noundef, i32 noundef) #1300 301; Function Attrs: convergent nounwind302declare spir_func half @_Z26sub_group_clustered_rotateDhij(half noundef, i32 noundef, i32 noundef) #1303 304; Function Attrs: convergent noinline norecurse nounwind optnone305define dso_local spir_kernel void @testRotateDouble(ptr addrspace(1) noundef align 8 %dst) #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !16 !kernel_arg_base_type !16 !kernel_arg_type_qual !6 {306entry:307 %dst.addr = alloca ptr addrspace(1), align 4308 %v = alloca double, align 8309 store ptr addrspace(1) %dst, ptr %dst.addr, align 4310 store double 0.000000e+00, ptr %v, align 8311 %value = load double, ptr %v, align 8312 ; CHECK: OpGroupNonUniformRotateKHR %[[TyDouble]] %[[ScopeSubgroup]] %[[#]] %[[ConstInt2]]313 %call = call spir_func double @_Z16sub_group_rotatedi(double noundef %value, i32 noundef 2) #2314 %data = load ptr addrspace(1), ptr %dst.addr, align 4315 %arrayidx = getelementptr inbounds double, ptr addrspace(1) %data, i32 0316 store double %call, ptr addrspace(1) %arrayidx, align 8317 %value_clustered = load double, ptr %v, align 8318 ; CHECK: OpGroupNonUniformRotateKHR %[[TyDouble]] %[[ScopeSubgroup]] %[[#]] %[[ConstInt2]] %[[ConstInt4]]319 %call1 = call spir_func double @_Z26sub_group_clustered_rotatedij(double noundef %value_clustered, i32 noundef 2, i32 noundef 4) #2320 %data2 = load ptr addrspace(1), ptr %dst.addr, align 4321 %arrayidx2 = getelementptr inbounds double, ptr addrspace(1) %data2, i32 1322 store double %call1, ptr addrspace(1) %arrayidx2, align 8323 ret void324}325 326; Function Attrs: convergent nounwind327declare spir_func double @_Z16sub_group_rotatedi(double noundef, i32 noundef) #1328 329; Function Attrs: convergent nounwind330declare spir_func double @_Z26sub_group_clustered_rotatedij(double noundef, i32 noundef, i32 noundef) #1331 332attributes #0 = { convergent noinline norecurse nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "uniform-work-group-size"="false" }333attributes #1 = { convergent nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" }334attributes #2 = { convergent nounwind }335 336!llvm.module.flags = !{!0}337!opencl.ocl.version = !{!1}338!opencl.spir.version = !{!1}339!llvm.ident = !{!2}340 341!0 = !{i32 1, !"wchar_size", i32 4}342!1 = !{i32 2, i32 0}343!2 = !{!"clang version 19.0.0"}344!3 = !{i32 1}345!4 = !{!"none"}346!5 = !{!"char*"}347!6 = !{!""}348!7 = !{!"uchar*"}349!8 = !{!"short*"}350!9 = !{!"ushort*"}351!10 = !{!"int*"}352!11 = !{!"uint*"}353!12 = !{!"long*"}354!13 = !{!"ulong*"}355!14 = !{!"float*"}356!15 = !{!"half*"}357!16 = !{!"double*"}358