// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil %s -emit-ir | %FileCheck %s

// REQUIRES: CPU=x86_64

sil_stage canonical

import Builtin
import Swift

struct BigStruct {
  var x, y, z, w : Int
}

sil @alloc_small : $(@inout Builtin.UnsafeValueBuffer, Int) -> () {
entry(%b : $*Builtin.UnsafeValueBuffer, %v : $Int):
  %0 = alloc_value_buffer $Int in %b : $*Builtin.UnsafeValueBuffer
  store %v to %0 : $*Int
  %r = tuple ()
  return %r : $()
}
// CHECK-LABEL: define{{( protected)?}} void @alloc_small([24 x i8]* nocapture dereferenceable({{.*}}), i64)
// CHECK-NEXT: entry:
// CHECK-NEXT: [[T0:%.*]] = bitcast [24 x i8]* %0 to %Si*
// CHECK-NEXT: [[T2:%.*]] = getelementptr inbounds %Si, %Si* [[T0]], i32 0, i32 0
// CHECK-NEXT: store i64 %1, i64* [[T2]], align 8
// CHECK-NEXT: ret void

sil @project_small : $(@inout Builtin.UnsafeValueBuffer, Int) -> () {
entry(%b : $*Builtin.UnsafeValueBuffer, %v : $Int):
  %0 = project_value_buffer $Int in %b : $*Builtin.UnsafeValueBuffer
  store %v to %0 : $*Int
  %r = tuple ()
  return %r : $()
}
// CHECK-LABEL: define{{( protected)?}} void @project_small([24 x i8]* nocapture dereferenceable({{.*}}), i64)
// CHECK-NEXT: entry:
// CHECK-NEXT: [[T0:%.*]] = bitcast [24 x i8]* %0 to %Si*
// CHECK-NEXT: [[T2:%.*]] = getelementptr inbounds %Si, %Si* [[T0]], i32 0, i32 0
// CHECK-NEXT: store i64 %1, i64* [[T2]], align 8
// CHECK-NEXT: ret void

sil @dealloc_small : $(@inout Builtin.UnsafeValueBuffer) -> () {
entry(%b : $*Builtin.UnsafeValueBuffer):
  dealloc_value_buffer $Int in %b : $*Builtin.UnsafeValueBuffer
  %r = tuple ()
  return %r : $()
}
// CHECK-LABEL: define{{( protected)?}} void @dealloc_small([24 x i8]* nocapture dereferenceable({{.*}}))
// CHECK-NEXT: entry:
// CHECK-NEXT: ret void

sil @alloc_big : $(@inout Builtin.UnsafeValueBuffer, BigStruct) -> () {
entry(%b : $*Builtin.UnsafeValueBuffer, %v : $BigStruct):
  %0 = alloc_value_buffer $BigStruct in %b : $*Builtin.UnsafeValueBuffer
  store %v to %0 : $*BigStruct
  %r = tuple ()
  return %r : $()
}
// CHECK-LABEL: define{{( protected)?}} void @alloc_big([24 x i8]* nocapture dereferenceable({{.*}}), %V13value_buffers9BigStruct* noalias nocapture dereferenceable({{.*}}))
// CHECK-NEXT: entry:
// CHECK: [[SLOT0:%.*]] = load i64
// CHECK: [[SLOT1:%.*]] = load i64
// CHECK: [[SLOT2:%.*]] = load i64
// CHECK: [[SLOT3:%.*]] = load i64
// CHECK-NEXT: [[T0:%.*]] = call noalias i8* @swift_rt_swift_slowAlloc(i64 32, i64 7)
// CHECK-NEXT: [[T1:%.*]] = bitcast [24 x i8]* %0 to i8**
// CHECK-NEXT: store i8* [[T0]], i8** [[T1]], align 8
// CHECK-NEXT: [[ADDR:%.*]] = bitcast i8* [[T0]] to %V13value_buffers9BigStruct*
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds %V13value_buffers9BigStruct, %V13value_buffers9BigStruct* [[ADDR]], i32 0, i32 0
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds %Si, %Si* [[T0]], i32 0, i32 0
// CHECK-NEXT: store i64 [[SLOT0]], i64* [[T1]], align 8
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds %V13value_buffers9BigStruct, %V13value_buffers9BigStruct* [[ADDR]], i32 0, i32 1
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds %Si, %Si* [[T0]], i32 0, i32 0
// CHECK-NEXT: store i64 [[SLOT1]], i64* [[T1]], align 8
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds %V13value_buffers9BigStruct, %V13value_buffers9BigStruct* [[ADDR]], i32 0, i32 2
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds %Si, %Si* [[T0]], i32 0, i32 0
// CHECK-NEXT: store i64 [[SLOT2]], i64* [[T1]], align 8
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds %V13value_buffers9BigStruct, %V13value_buffers9BigStruct* [[ADDR]], i32 0, i32 3
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds %Si, %Si* [[T0]], i32 0, i32 0
// CHECK-NEXT: store i64 [[SLOT3]], i64* [[T1]], align 8
// CHECK-NEXT: ret void

sil @project_big : $(@inout Builtin.UnsafeValueBuffer, BigStruct) -> () {
entry(%b : $*Builtin.UnsafeValueBuffer, %v : $BigStruct):
  %0 = project_value_buffer $BigStruct in %b : $*Builtin.UnsafeValueBuffer
  store %v to %0 : $*BigStruct
  %r = tuple ()
  return %r : $()
}
// CHECK-LABEL: define{{( protected)?}} void @project_big([24 x i8]* nocapture dereferenceable({{.*}}), %V13value_buffers9BigStruct* noalias nocapture dereferenceable({{.*}}))
// CHECK-NEXT: entry:
// CHECK: [[SLOT0:%.*]] = load i64
// CHECK: [[SLOT1:%.*]] = load i64
// CHECK: [[SLOT2:%.*]] = load i64
// CHECK: [[SLOT3:%.*]] = load i64
// CHECK-NEXT: [[T0:%.*]] = bitcast [24 x i8]* %0 to %V13value_buffers9BigStruct**
// CHECK-NEXT: [[ADDR:%.*]] = load %V13value_buffers9BigStruct*, %V13value_buffers9BigStruct** [[T0]], align 8
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds %V13value_buffers9BigStruct, %V13value_buffers9BigStruct* [[ADDR]], i32 0, i32 0
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds %Si, %Si* [[T0]], i32 0, i32 0
// CHECK-NEXT: store i64 [[SLOT0]], i64* [[T1]], align 8
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds %V13value_buffers9BigStruct, %V13value_buffers9BigStruct* [[ADDR]], i32 0, i32 1
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds %Si, %Si* [[T0]], i32 0, i32 0
// CHECK-NEXT: store i64 [[SLOT1]], i64* [[T1]], align 8
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds %V13value_buffers9BigStruct, %V13value_buffers9BigStruct* [[ADDR]], i32 0, i32 2
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds %Si, %Si* [[T0]], i32 0, i32 0
// CHECK-NEXT: store i64 [[SLOT2]], i64* [[T1]], align 8
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds %V13value_buffers9BigStruct, %V13value_buffers9BigStruct* [[ADDR]], i32 0, i32 3
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds %Si, %Si* [[T0]], i32 0, i32 0
// CHECK-NEXT: store i64 [[SLOT3]], i64* [[T1]], align 8
// CHECK-NEXT: ret void

sil @dealloc_big : $(@inout Builtin.UnsafeValueBuffer) -> () {
entry(%b : $*Builtin.UnsafeValueBuffer):
  dealloc_value_buffer $BigStruct in %b : $*Builtin.UnsafeValueBuffer
  %r = tuple ()
  return %r : $()
}
// CHECK-LABEL: define{{( protected)?}} void @dealloc_big([24 x i8]* nocapture dereferenceable({{.*}}))
// CHECK-NEXT: entry:
// CHECK-NEXT: [[T0:%.*]] = bitcast [24 x i8]* %0 to i8**
// CHECK-NEXT: [[ADDR:%.*]] = load i8*, i8** [[T0]], align 8
// CHECK-NEXT: call void @swift_rt_swift_slowDealloc(i8* [[ADDR]], i64 32, i64 7)
// CHECK-NEXT: ret void
