This PR improves type inference in general and deduces types of composite data structures in particular. Also added a way to insert a bitcast to make a fun call valid in case of arguments types mismatch due to opaque pointers type inference. The attached test `pointers/nested-struct-opaque-pointers.ll` demonstrates new capabilities: the SPIRV code emitted for this test is now (1) valid in a sense of data field types and (2) accepted by `spirv-val`. More strict LIT checks, support of more composite data structures and improvement of fun calls from the perspective of type correctness are main todo's at the moment.
21 lines
823 B
LLVM
21 lines
823 B
LLVM
; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s
|
|
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %}
|
|
|
|
; CHECK-NOT: OpTypeInt 8 0
|
|
|
|
@GI = addrspace(1) constant i64 42
|
|
|
|
@GS = addrspace(1) global {ptr addrspace(1), ptr addrspace(1)} { ptr addrspace(1) @GI, ptr addrspace(1) @GI }
|
|
@GS2 = addrspace(1) global {ptr addrspace(1), ptr addrspace(1)} { ptr addrspace(1) @GS, ptr addrspace(1) @GS }
|
|
@GS3 = addrspace(1) global {ptr addrspace(1), ptr addrspace(1)} { ptr addrspace(1) @GS2, ptr addrspace(1) @GS2 }
|
|
|
|
@GPS = addrspace(1) global ptr addrspace(1) @GS3
|
|
|
|
@GPI1 = addrspace(1) global ptr addrspace(1) @GI
|
|
@GPI2 = addrspace(1) global ptr addrspace(1) @GPI1
|
|
@GPI3 = addrspace(1) global ptr addrspace(1) @GPI2
|
|
|
|
define spir_kernel void @foo() {
|
|
ret void
|
|
}
|