// Test the -hack-inserts option.
// Check that we can remove partial chains of insertvalue
// to avoid OpCompositeInsert entirely.

// RUN: clspv %target %s -o %t.spv -hack-inserts -no-inline-single
// RUN: spirv-dis -o %t2.spvasm %t.spv
// RUN: FileCheck %s < %t2.spvasm
// RUN: spirv-val --target-env vulkan1.0 %t.spv

// CHECK-NOT: OpCompositeInsert
// CHECK: OpCompositeConstruct
// CHECK-NOT: OpCompositeInsert

typedef struct { float a, b, c, d; } S;

__attribute__((noinline))
S boo(float a) {
  S result = {10.0f, 11.0f, 12.0f, 13.0f};
  result.c = a+2.0f;
  result.b = a+1.0f;
  // Skip filling in result.a, result.d
  return result;
}


kernel void foo(global S* data, float f) {
  *data = boo(f);
}


