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

// REQUIRES: CPU=x86_64

sil_stage canonical

import Builtin

// This type has equal stride and size.
struct SameSizeStride { var x, y: Builtin.Int32 }

// This type has unequal stride and size.
struct DifferentSizeStride { var x: Builtin.Int32, y: Builtin.Int16 }

// CHECK: define{{( protected)?}} void @same_size_stride(%V8indexing14SameSizeStride* noalias nocapture dereferenceable({{.*}}), i64) {{.*}} {
// CHECK:   getelementptr inbounds %V8indexing14SameSizeStride, %V8indexing14SameSizeStride* %0, i64 %1
sil @same_size_stride : $@convention(thin) (@in SameSizeStride, Builtin.Word) -> () {
entry(%p : $*SameSizeStride, %i: $Builtin.Word):
  %q = index_addr %p : $*SameSizeStride, %i : $Builtin.Word
  return undef : $()
}

// CHECK:      define{{( protected)?}} void @different_size_stride(%V8indexing19DifferentSizeStride* noalias nocapture dereferenceable({{.*}}), i64) {{.*}} {
// CHECK:        %2 = bitcast %V8indexing19DifferentSizeStride* %0 to i8*
// CHECK-NEXT:   %3 = mul nsw i64 %1, 8
// CHECK-NEXT:   %4 = getelementptr inbounds i8, i8* %2, i64 %3
// CHECK-NEXT:   %5 = bitcast i8* %4 to %V8indexing19DifferentSizeStride*
sil @different_size_stride : $@convention(thin) (@in DifferentSizeStride, Builtin.Word) -> () {
entry(%p : $*DifferentSizeStride, %i: $Builtin.Word):
  %q = index_addr %p : $*DifferentSizeStride, %i : $Builtin.Word
  return undef : $()
}

// CHECK:      define{{( protected)?}} void @zero_size(%swift.opaque* noalias nocapture, i64) {{.*}} {
// CHECK:        %2 = bitcast %swift.opaque* %0 to i8*
// CHECK-NEXT:   %3 = mul nsw i64 %1, 1
// CHECK-NEXT:   %4 = getelementptr inbounds i8, i8* %2, i64 %3
sil @zero_size : $@convention(thin) (@in (), Builtin.Word) -> () {
entry(%p : $*(), %i: $Builtin.Word):
  %q = index_addr %p : $*(), %i : $Builtin.Word
  return undef : $()
}

// CHECK:      define{{( protected)?}} void @dynamic_size(%swift.opaque* noalias nocapture, i64, %swift.type* %T) {{.*}} {
// CHECK:        %3 = bitcast %swift.type* %T to i8***
// CHECK-NEXT:   %4 = getelementptr inbounds i8**, i8*** %3, i64 -1
// CHECK-NEXT:   %T.valueWitnesses = load i8**, i8*** %4, align 8
// CHECK-NEXT:   %5 = getelementptr inbounds i8*, i8** %T.valueWitnesses, i32 19
// CHECK-NEXT:   %6 = load i8*, i8** %5, align 8
// CHECK-NEXT:   %stride = ptrtoint i8* %6 to i64
// CHECK-NEXT:   %7 = mul nsw i64 %1, %stride
// CHECK-NEXT:   %8 = getelementptr inbounds i8, i8* %2, i64 %7

sil @dynamic_size : $@convention(thin) <T> (@in T, Builtin.Word) -> () {
entry(%p : $*T, %i: $Builtin.Word):
  %q = index_addr %p : $*T, %i : $Builtin.Word
  return undef : $()
}
