From 5ee58fde46a0de3fed3ef34590141487c03223d4 Mon Sep 17 00:00:00 2001 From: Ashley Coleman Date: Thu, 9 Jul 2026 16:40:38 -0600 Subject: [PATCH 1/2] [SM6.10] LinAlg Validation: Test Bitcast Disallowed --- .../LinAlgMatrix/linalgmatrix-no-bitcast1.ll | 36 +++++++++++++++++++ .../LinAlgMatrix/linalgmatrix-no-bitcast2.ll | 36 +++++++++++++++++++ .../LinAlgMatrix/linalgmatrix-no-bitcast3.ll | 36 +++++++++++++++++++ 3 files changed, 108 insertions(+) create mode 100644 tools/clang/test/LitDXILValidation/LinAlgMatrix/linalgmatrix-no-bitcast1.ll create mode 100644 tools/clang/test/LitDXILValidation/LinAlgMatrix/linalgmatrix-no-bitcast2.ll create mode 100644 tools/clang/test/LitDXILValidation/LinAlgMatrix/linalgmatrix-no-bitcast3.ll diff --git a/tools/clang/test/LitDXILValidation/LinAlgMatrix/linalgmatrix-no-bitcast1.ll b/tools/clang/test/LitDXILValidation/LinAlgMatrix/linalgmatrix-no-bitcast1.ll new file mode 100644 index 0000000000..39437b3ae3 --- /dev/null +++ b/tools/clang/test/LitDXILValidation/LinAlgMatrix/linalgmatrix-no-bitcast1.ll @@ -0,0 +1,36 @@ +; REQUIRES: dxil-1-10 +; RUN: not %dxv %s 2>&1 | FileCheck %s + +target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64" +target triple = "dxil-ms-dx" + +%dx.types.LinAlgMatrixC4M5N4U1S2 = type { i8* } +%dx.types.LinAlgMatrixC4M4N5U1S2 = type { i8* } + +define void @main() { + %1 = call %dx.types.LinAlgMatrixC4M5N4U1S2 @dx.op.linAlgFillMatrix.mC4M5N4U1S2.i32(i32 -2147483636, i32 5) ; LinAlgFillMatrix(value) + %2 = bitcast %dx.types.LinAlgMatrixC4M5N4U1S2 %1 to %dx.types.LinAlgMatrixC4M4N5U1S2 + + ; CHECK: shader: invalid cast opcode for cast from '%dx.types.LinAlgMatrixC4M5N4U1S2 = type { i8* }' to '%dx.types.LinAlgMatrixC4M4N5U1S2 = type { i8* }' +} + +; Function Attrs: nounwind +declare %dx.types.LinAlgMatrixC4M5N4U1S2 @dx.op.linAlgFillMatrix.mC4M5N4U1S2.i32(i32, i32) #0 + +attributes #0 = { nounwind } + +!dx.targetTypes = !{!0,!7} +!llvm.ident = !{!1} +!dx.version = !{!2} +!dx.valver = !{!2} +!dx.shaderModel = !{!3} +!dx.entryPoints = !{!4} + +!0 = !{%dx.types.LinAlgMatrixC4M5N4U1S2 undef, i32 4, i32 5, i32 4, i32 1, i32 2} +!1 = !{!"dxc(private) 1.9.0.5391 (linalg-validation-no-undef, a2cfae071-dirty)"} +!2 = !{i32 1, i32 10} +!3 = !{!"cs", i32 6, i32 10} +!4 = !{void ()* @main, !"main", null, null, !5} +!5 = !{i32 4, !6} +!6 = !{i32 1, i32 1, i32 1} +!7 = !{%dx.types.LinAlgMatrixC4M4N5U1S2 undef, i32 4, i32 4, i32 5, i32 1, i32 2} diff --git a/tools/clang/test/LitDXILValidation/LinAlgMatrix/linalgmatrix-no-bitcast2.ll b/tools/clang/test/LitDXILValidation/LinAlgMatrix/linalgmatrix-no-bitcast2.ll new file mode 100644 index 0000000000..49414b1c6c --- /dev/null +++ b/tools/clang/test/LitDXILValidation/LinAlgMatrix/linalgmatrix-no-bitcast2.ll @@ -0,0 +1,36 @@ +; REQUIRES: dxil-1-10 +; RUN: not %dxv %s 2>&1 | FileCheck %s + +target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64" +target triple = "dxil-ms-dx" + +%dx.types.LinAlgMatrixC4M5N4U1S2 = type { i8* } +%dx.types.LinAlgMatrixC4M4N5U1S2 = type { i8* } + +define void @main() { + %1 = call %dx.types.LinAlgMatrixC4M5N4U1S2 @dx.op.linAlgFillMatrix.mC4M5N4U1S2.i32(i32 -2147483636, i32 5) ; LinAlgFillMatrix(value) + %2 = bitcast %dx.types.LinAlgMatrixC4M5N4U1S2 %1 to i32 + ret void + ; CHECK: shader: invalid cast opcode for cast from '%dx.types.LinAlgMatrixC4M5N4U1S2 = type { i8* }' to 'i32' +} + +; Function Attrs: nounwind +declare %dx.types.LinAlgMatrixC4M5N4U1S2 @dx.op.linAlgFillMatrix.mC4M5N4U1S2.i32(i32, i32) #0 + +attributes #0 = { nounwind } + +!dx.targetTypes = !{!0,!7} +!llvm.ident = !{!1} +!dx.version = !{!2} +!dx.valver = !{!2} +!dx.shaderModel = !{!3} +!dx.entryPoints = !{!4} + +!0 = !{%dx.types.LinAlgMatrixC4M5N4U1S2 undef, i32 4, i32 5, i32 4, i32 1, i32 2} +!1 = !{!"dxc(private) 1.9.0.5391 (linalg-validation-no-undef, a2cfae071-dirty)"} +!2 = !{i32 1, i32 10} +!3 = !{!"cs", i32 6, i32 10} +!4 = !{void ()* @main, !"main", null, null, !5} +!5 = !{i32 4, !6} +!6 = !{i32 1, i32 1, i32 1} +!7 = !{%dx.types.LinAlgMatrixC4M4N5U1S2 undef, i32 4, i32 4, i32 5, i32 1, i32 2} diff --git a/tools/clang/test/LitDXILValidation/LinAlgMatrix/linalgmatrix-no-bitcast3.ll b/tools/clang/test/LitDXILValidation/LinAlgMatrix/linalgmatrix-no-bitcast3.ll new file mode 100644 index 0000000000..9eb50a3ab8 --- /dev/null +++ b/tools/clang/test/LitDXILValidation/LinAlgMatrix/linalgmatrix-no-bitcast3.ll @@ -0,0 +1,36 @@ +; REQUIRES: dxil-1-10 +; RUN: not %dxv %s 2>&1 | FileCheck %s + +target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64" +target triple = "dxil-ms-dx" + +%dx.types.LinAlgMatrixC4M5N4U1S2 = type { i8* } +%dx.types.LinAlgMatrixC4M4N5U1S2 = type { i8* } + +define void @main() { + %1 = call %dx.types.LinAlgMatrixC4M5N4U1S2 @dx.op.linAlgFillMatrix.mC4M5N4U1S2.i32(i32 -2147483636, i32 5) ; LinAlgFillMatrix(value) + %2 = bitcast i8* null to %dx.types.LinAlgMatrixC4M5N4U1S2 + ret void + ; CHECK: shader: invalid cast opcode for cast from 'i8*' to '%dx.types.LinAlgMatrixC4M5N4U1S2 = type { i8* }' +} + +; Function Attrs: nounwind +declare %dx.types.LinAlgMatrixC4M5N4U1S2 @dx.op.linAlgFillMatrix.mC4M5N4U1S2.i32(i32, i32) #0 + +attributes #0 = { nounwind } + +!dx.targetTypes = !{!0,!7} +!llvm.ident = !{!1} +!dx.version = !{!2} +!dx.valver = !{!2} +!dx.shaderModel = !{!3} +!dx.entryPoints = !{!4} + +!0 = !{%dx.types.LinAlgMatrixC4M5N4U1S2 undef, i32 4, i32 5, i32 4, i32 1, i32 2} +!1 = !{!"dxc(private) 1.9.0.5391 (linalg-validation-no-undef, a2cfae071-dirty)"} +!2 = !{i32 1, i32 10} +!3 = !{!"cs", i32 6, i32 10} +!4 = !{void ()* @main, !"main", null, null, !5} +!5 = !{i32 4, !6} +!6 = !{i32 1, i32 1, i32 1} +!7 = !{%dx.types.LinAlgMatrixC4M4N5U1S2 undef, i32 4, i32 4, i32 5, i32 1, i32 2} From 24462392ad78cfe059d281ecb119ec469c335259 Mon Sep 17 00:00:00 2001 From: Ashley Coleman Date: Fri, 10 Jul 2026 09:19:01 -0600 Subject: [PATCH 2/2] address comments --- .../LitDXILValidation/LinAlgMatrix/linalgmatrix-no-bitcast3.ll | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tools/clang/test/LitDXILValidation/LinAlgMatrix/linalgmatrix-no-bitcast3.ll b/tools/clang/test/LitDXILValidation/LinAlgMatrix/linalgmatrix-no-bitcast3.ll index 9eb50a3ab8..c47ba635df 100644 --- a/tools/clang/test/LitDXILValidation/LinAlgMatrix/linalgmatrix-no-bitcast3.ll +++ b/tools/clang/test/LitDXILValidation/LinAlgMatrix/linalgmatrix-no-bitcast3.ll @@ -8,8 +8,7 @@ target triple = "dxil-ms-dx" %dx.types.LinAlgMatrixC4M4N5U1S2 = type { i8* } define void @main() { - %1 = call %dx.types.LinAlgMatrixC4M5N4U1S2 @dx.op.linAlgFillMatrix.mC4M5N4U1S2.i32(i32 -2147483636, i32 5) ; LinAlgFillMatrix(value) - %2 = bitcast i8* null to %dx.types.LinAlgMatrixC4M5N4U1S2 + %1 = bitcast i8* null to %dx.types.LinAlgMatrixC4M5N4U1S2 ret void ; CHECK: shader: invalid cast opcode for cast from 'i8*' to '%dx.types.LinAlgMatrixC4M5N4U1S2 = type { i8* }' }