brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · ab512ce Raw
39 lines · plain
1// RUN: %clang_cc1 -finclude-default-header -triple dxil-pc-shadermodel6.3-compute -emit-llvm -disable-llvm-passes -o - %s \2// RUN:   | llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,DXIL3// RUN: %clang_cc1 -finclude-default-header -triple spirv-pc-vulkan1.3-compute -emit-llvm -disable-llvm-passes -o - %s \4// RUN:   | llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,SPV5 6RWBuffer<float> A[10];7 8[numthreads(4,1,1)]9void main(uint GI : SV_GroupID) {10  // CHECK: %[[GI:.*]] = load i32, ptr %GI.addr11  // CHECK: %[[NURI_1:.*]] = call {{.*}} i32 @hlsl::NonUniformResourceIndex(unsigned int)(i32 noundef %[[GI]])12  // CHECK: call void @hlsl::RWBuffer<float>::__createFromImplicitBinding(unsigned int, unsigned int, int, unsigned int, char const*)13  // CHECK-SAME: (ptr {{.*}}, i32 noundef 0, i32 noundef 0, i32 noundef 10, i32 noundef %[[NURI_1]], ptr noundef @A.str)14  float a = A[NonUniformResourceIndex(GI)][0];15 16  // CHECK: %[[GI:.*]] = load i32, ptr %GI.addr17  // CHECK: %[[ADD:.*]] = add i32 %[[GI]], 118  // CHECK: %[[NURI_2:.*]] = call {{.*}} i32 @hlsl::NonUniformResourceIndex(unsigned int)(i32 noundef %[[ADD]])19  // CHECK: %[[MOD:.*]] = urem i32 %[[NURI_2]], 1020  // CHECK: call void @hlsl::RWBuffer<float>::__createFromImplicitBinding(unsigned int, unsigned int, int, unsigned int, char const*)21  // CHECK-SAME: (ptr {{.*}}, i32 noundef 0, i32 noundef 0, i32 noundef 10, i32 noundef %[[MOD]], ptr noundef @A.str)22  float b = A[NonUniformResourceIndex(GI + 1) % 10][0];23 24  // CHECK: %[[GI:.*]] = load i32, ptr %GI.addr25  // CHECK: %[[NURI_3:.*]] = call {{.*}} i32 @hlsl::NonUniformResourceIndex(unsigned int)(i32 noundef %[[GI]])26  // CHECK: %[[MUL:.*]] = mul i32 3, %[[NURI_3]]27  // CHECK: %[[ADD2:.*]] = add i32 10, %[[MUL]]28  // CHECK: call void @hlsl::RWBuffer<float>::__createFromImplicitBinding(unsigned int, unsigned int, int, unsigned int, char const*)29  // CHECK-SAME: (ptr {{.*}}, i32 noundef 0, i32 noundef 0, i32 noundef 10, i32 noundef %[[ADD2]], ptr noundef @A.str)30  float c = A[10 + 3 * NonUniformResourceIndex(GI)][0];31  A[0][0] = a + b + c;32}33 34// CHECK: define {{.*}} i32 @hlsl::NonUniformResourceIndex(unsigned int)(i32 noundef %Index)35// CHECK: %[[INDEX1:.*]] = load i32, ptr %Index.addr, align 436// DXIL: %[[INDEX2:.*]] = call i32 @llvm.dx.resource.nonuniformindex(i32 %[[INDEX1]])37// SPV: %[[INDEX2:.*]] = call i32 @llvm.spv.resource.nonuniformindex(i32 %[[INDEX1]])38// CHECK: ret i32 %[[INDEX2]]39