| // RUN: %clang_cc1 -finclude-default-header -triple dxil-pc-shadermodel6.0-compute -std=hlsl202x -emit-llvm -disable-llvm-passes -hlsl-entry main -o - %s | FileCheck %s |
| |
| groupshared float4 SharedArr[64]; |
| |
| // CHECK-LABEL: define hidden void @_Z2fnRA64_U3AS3Dv4_ff(ptr addrspace(3) noundef align 4 dereferenceable(1024) %Arr, float noundef nofpclass(nan inf) %F) |
| // CHECK: [[ArrAddr:%.*]] = alloca ptr addrspace(3), align 4 |
| // CHECK: [[FAddr:%.*]] = alloca float, align 4 |
| // CHECK: store ptr addrspace(3) %Arr, ptr [[ArrAddr]], align 4 |
| // CHECK: store float %F, ptr [[FAddr]], align 4 |
| // CHECK: [[A:%.*]] = load float, ptr [[FAddr]], align 4 |
| // CHECK: [[Splat:%.*]] = insertelement <1 x float> poison, float [[A]], i64 0 |
| // CHECK: [[B:%.*]] = shufflevector <1 x float> [[Splat]], <1 x float> poison, <4 x i32> zeroinitializer |
| // CHECK: [[C:%.*]] = load ptr addrspace(3), ptr [[ArrAddr]], align 4, !align !3 |
| // CHECK: [[ArrIdx:%.*]] = getelementptr inbounds [64 x <4 x float>], ptr addrspace(3) [[C]], i32 0, i32 5 |
| // CHECK: store <4 x float> [[B]], ptr addrspace(3) [[ArrIdx]], align 4 |
| // CHECK: ret void |
| void fn(groupshared float4 Arr[64], float F) { |
| Arr[5] = F.xxxx; |
| } |
| |
| [numthreads(4,1,1)] |
| void main() { |
| fn(SharedArr, 6.0); |
| } |