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
118 lines
3.9 KiB
HLSL
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);
|
|
}
|