Files
TheRock/compiler/amd-llvm/clang/test/CodeGenHLSL/resources/cbuffer_geps.hlsl
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

118 lines
3.9 KiB
HLSL

// RUN: %clang_cc1 -finclude-default-header -triple dxil-pc-shadermodel6.3-compute -fnative-half-type -fnative-int16-type -emit-llvm -disable-llvm-passes -o - %s | FileCheck %s
// Capture the anonymous struct types for check lines below.
// CHECK: [[ANON_1:%.*]] = type <{ float, target("dx.Padding", 12), <4 x i32> }>
// CHECK: [[ANON_2:%.*]] = type <{ <2 x i32>, target("dx.Padding", 8), <{ [3 x <{ %ArrayAndScalar, target("dx.Padding", 12) }>], %ArrayAndScalar }>
template <typename T> void use(T);
cbuffer CBArrays : register(b2) {
float c1[30];
double3 c2[20];
float16_t c3[10][20];
uint64_t c4[30];
int4 c5[20][30][40];
uint16_t c6[10];
int64_t c7[20];
bool c8[40];
}
// CHECK-LABEL: define hidden void @_Z8cbarraysv()
void cbarrays() {
// CHECK: load float, ptr addrspace(2) @c1, align 16
use(c1[0]);
// CHECK: load float, ptr addrspace(2) getelementptr inbounds nuw (i8, ptr addrspace(2) @c1, i32 112), align 16
use(c1[7]);
// CHECK: load float, ptr addrspace(2) getelementptr inbounds nuw (i8, ptr addrspace(2) @c1, i32 464), align 16
use(c1[29]);
// CHECK: load <3 x double>, ptr addrspace(2) getelementptr inbounds nuw (i8, ptr addrspace(2) @c2, i32 256), align 32
use(c2[8]);
// CHECK: load half, ptr addrspace(2) getelementptr inbounds nuw (i8, ptr addrspace(2) @c3, i32 2960), align 16
use(c3[9][5]);
// CHECK: load i64, ptr addrspace(2) getelementptr inbounds nuw (i8, ptr addrspace(2) @c4, i32 96), align 16
use(c4[6]);
// CHECK: load <4 x i32>, ptr addrspace(2) getelementptr inbounds nuw (i8, ptr addrspace(2) @c5, i32 27120), align 4
use(c5[1][12][15]);
// CHECK: load i16, ptr addrspace(2) getelementptr inbounds nuw (i8, ptr addrspace(2) @c6, i32 64), align 16
use(c6[4]);
// CHECK: load i64, ptr addrspace(2) getelementptr inbounds nuw (i8, ptr addrspace(2) @c7, i32 272), align 16
use(c7[17]);
// CHECK: load i32, ptr addrspace(2) getelementptr inbounds nuw (i8, ptr addrspace(2) @c8, i32 480), align 16
use(c8[30]);
}
struct A {
float2 a1;
};
struct B : A {
uint16_t3 b1;
};
struct C {
int c1;
A c2;
};
struct D {
B d1[4][6];
};
cbuffer CBStructs {
A s1;
B s2;
C s3;
A s4[5];
D s5;
};
// CHECK-LABEL: define hidden void @_Z9cbstructsv()
void cbstructs() {
// CHECK: load <2 x float>, ptr addrspace(2) @s1, align 4
use(s1.a1);
// CHECK: load <3 x i16>, ptr addrspace(2) getelementptr inbounds nuw (i8, ptr addrspace(2) @s2, i32 8), align 2
use(s2.b1);
// CHECK: load <2 x float>, ptr addrspace(2) getelementptr inbounds nuw (i8, ptr addrspace(2) @s3, i32 16), align 4
use(s3.c2.a1);
// CHECK: load <2 x float>, ptr addrspace(2) getelementptr inbounds nuw (i8, ptr addrspace(2) @s4, i32 32), align 4
use(s4[2].a1);
// CHECK: load <3 x i16>, ptr addrspace(2) getelementptr inbounds nuw (i8, ptr addrspace(2) @s5, i32 376), align 2
use(s5.d1[3][5].b1);
}
struct Scalars {
float a, b;
};
struct ArrayAndScalar {
uint4 x[5];
float y;
};
cbuffer CBMix {
Scalars m1[3];
float m2;
ArrayAndScalar m3;
float2 m4[5][4];
struct { float c; uint4 d; } m5;
struct { int2 i; ArrayAndScalar j[4]; } m6;
vector<double, 1> m7;
};
// CHECK-LABEL: define hidden void @_Z5cbmixv()
void cbmix() {
// CHECK: load float, ptr addrspace(2) getelementptr inbounds nuw (i8, ptr addrspace(2) @m1, i32 36), align 4
use(m1[2].b);
// CHECK: load float, ptr addrspace(2) getelementptr inbounds nuw (i8, ptr addrspace(2) @m3, i32 80), align 4
use(m3.y);
// CHECK: load <2 x float>, ptr addrspace(2) getelementptr inbounds nuw (i8, ptr addrspace(2) @m4, i32 176), align 16
use(m4[2][3]);
// CHECK: load <4 x i32>, ptr addrspace(2) getelementptr inbounds nuw (i8, ptr addrspace(2) @m5, i32 16), align 4
use(m5.d);
// CHECK: load <4 x i32>, ptr addrspace(2) getelementptr inbounds nuw (i8, ptr addrspace(2) @m6, i32 240), align 4
use(m6.j[2].x[2]);
// CHECK: load <1 x double>, ptr addrspace(2) @m7, align 8
use(m7);
}