42 lines · plain
1// RUN: %clang_cc1 -finclude-default-header -emit-llvm -disable-llvm-passes \2// RUN: -triple dxil-pc-shadermodel6.3-library %s -o - | FileCheck %s3 4// Test groupshared vector element store for uint.5// CHECK-LABEL: test_uint46// CHECK: [[VAL:%.*]] = load i32, ptr %Val.addr, align 47// CHECK: [[IDX:%.*]] = load i32, ptr %Idx.addr, align 48// CHECK: [[PTR:%.*]] = getelementptr <4 x i32>, ptr addrspace(3) @SMem, i32 0, i32 [[IDX]]9// CHECK: store i32 [[VAL]], ptr addrspace(3) [[PTR]], align 410// CHECK-: ret void11groupshared uint4 SMem;12void test_uint4(uint Idx, uint Val) {13 SMem[Idx] = Val;14}15 16// Test local vector element store for bool.17// CHECK: [[COND1:%.*]] = load i32, ptr addrspace(3) @Cond, align 418// CHECK: [[COND2:%.*]] = trunc i32 [[COND1]] to i119// CHECK: [[IDX:%.*]] = load i32, ptr %Idx.addr, align 420// CHECK: [[COND3:%.*]] = zext i1 [[COND2]] to i3221// CHECK: [[PTR:%.*]] = getelementptr <3 x i32>, ptr %Val, i32 0, i32 [[IDX]]22// CHECK: store i32 [[COND3]], ptr [[PTR]], align 423// CHECK: ret24groupshared bool Cond;25bool3 test_bool(uint Idx) {26 bool3 Val = { false, false, false};27 Val[Idx] = Cond;28 return Val;29}30 31// Test resource vector element store for float.32// CHECK: [[VAL:%.*]] = load float, ptr %Val.addr, align 433// CHECK: [[RES_PTR:%.*]] = call {{.*}} ptr @_ZN4hlsl18RWStructuredBufferIDv4_fEixEj(ptr {{.*}} @_ZL3Buf, i32 noundef 0)34// CHECK: [[IDX:%.*]] = load i32, ptr %Idx.addr, align 435// CHECK: [[PTR:%.*]] = getelementptr <4 x float>, ptr [[RES_PTR]], i32 0, i32 [[IDX]]36// CHECK: store float [[VAL]], ptr [[PTR]], align 437// CHECK: ret void38RWStructuredBuffer<float4> Buf : register(u0);39void test_float(uint Idx, float Val) {40 Buf[0][Idx] = Val;41}42