| ; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s |
| ; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-PACKED |
| ; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-NAMED |
| ; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %} |
| |
| ; CHECK-NOT: OpTypeInt 8 0 |
| |
| ; Deduction rebuilds this struct because the pointer member becomes a |
| ; TypedPointerType. The rebuild must not drop packedness. |
| ; CHECK-PACKED-DAG: OpDecorate %[[#PACKED:]] CPacked |
| ; CHECK-PACKED-DAG: %[[#PACKED]] = OpTypeStruct %[[#]] %[[#]] |
| |
| ; CHECK-NAMED-DAG: OpName %[[#NAMED:]] "struct.Named.0" |
| ; CHECK-NAMED-DAG: %[[#NAMED]] = OpTypeStruct %[[#]] %[[#]] |
| |
| @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 |
| |
| @GPACK1 = addrspace(1) global <{ i16, ptr addrspace(1) }> <{ i16 1, ptr addrspace(1) @GI }> |
| @GPACK2 = addrspace(1) global <{ i16, ptr addrspace(1) }> <{ i16 2, ptr addrspace(1) @GI }> |
| |
| %struct.Named = type { ptr addrspace(1), ptr addrspace(1) } |
| |
| @GNAMED1 = addrspace(1) global %struct.Named { ptr addrspace(1) @GI, ptr addrspace(1) @GI } |
| @GNAMED2 = addrspace(1) global %struct.Named { ptr addrspace(1) @GNAMED1, ptr addrspace(1) @GNAMED1 } |
| |
| define spir_kernel void @foo() { |
| ret void |
| } |