blob: d7a1106f53a88cffa5be42470ba3eb714df38617 [file] [edit]
// 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);
}