| ; RUN: llc -verify-machineinstrs -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-DAG: %[[#I16:]] = OpTypeInt 16 0 |
| ; CHECK-DAG: %[[#I32:]] = OpTypeInt 32 0 |
| ; CHECK-DAG: %[[#STRUCT:]] = OpTypeStruct %[[#I32]] %[[#I16]] |
| ; CHECK-DAG: %[[#NESTED:]] = OpTypeStruct %[[#STRUCT]] %[[#I16]] |
| ; CHECK-DAG: %[[#PTR:]] = OpTypePointer Function %[[#NESTED]] |
| ; CHECK-DAG: %[[#UNDEF:]] = OpUndef %[[#NESTED]] |
| ; CHECK-DAG: %[[#C_I32_1:]] = OpConstant %[[#I32]] 1 |
| ; CHECK-DAG: %[[#C_I16_2:]] = OpConstant %[[#I16]] 2 |
| ; CHECK-DAG: %[[#C_I16_3:]] = OpConstant %[[#I16]] 3 |
| ; CHECK-DAG: %[[#INNER:]] = OpConstantComposite %[[#STRUCT]] %[[#C_I32_1]] %[[#C_I16_2]] |
| ; CHECK-DAG: %[[#OUTER:]] = OpConstantComposite %[[#NESTED]] %[[#INNER]] %[[#C_I16_3]] |
| |
| ; CHECK: OpFunction |
| ; CHECK: %[[#PARAM:]] = OpFunctionParameter %[[#PTR]] |
| ; CHECK-NOT: OpBitcast |
| ; CHECK: OpStore %[[#PARAM]] %[[#UNDEF]] |
| ; CHECK: OpFunctionEnd |
| |
| ; CHECK: OpFunction |
| ; CHECK: %[[#PARAM2:]] = OpFunctionParameter %[[#PTR]] |
| ; CHECK-NOT: OpBitcast |
| ; CHECK: OpStore %[[#PARAM2]] %[[#OUTER]] |
| ; CHECK: OpFunctionEnd |
| |
| %struct = type { |
| i32, |
| i16 |
| } |
| |
| %nested_struct = type { |
| %struct, |
| i16 |
| } |
| |
| define void @foo(ptr %ptr) { |
| store %nested_struct undef, ptr %ptr |
| ret void |
| } |
| |
| define void @bar(ptr %ptr) { |
| store %nested_struct { %struct { i32 1, i16 2 }, i16 3 }, ptr %ptr |
| ret void |
| } |