// RUN: %target-swift-frontend %s -emit-ir | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize


import Swift

class C {}

sil_vtable C {}

struct POD {
  var x: Int
}

struct BitwiseTakable {
  var x: C
}

struct SomeWeak {
  var x: C
  weak var y: C?
}

// CHECK-LABEL: @_TWVV21array_value_witnesses3POD =
// CHECK-NOT:     @_TwXxV21array_value_witnesses3POD
// CHECK:         @__swift_noop_void_return
// CHECK-NOT:     @_TwCcV21array_value_witnesses3POD
// CHECK-32:      @__swift_memcpy_array4_4
// CHECK-64:      @__swift_memcpy_array8_8
// CHECK-NOT:     @_TwTtV21array_value_witnesses3POD
// CHECK-32:      @__swift_memmove_array4_4
// CHECK-64:      @__swift_memmove_array8_8
// CHECK-NOT:     @_TwtTV21array_value_witnesses3POD
// CHECK-32:      @__swift_memmove_array4_4
// CHECK-64:      @__swift_memmove_array8_8

// CHECK-LABEL: @_TWVV21array_value_witnesses14BitwiseTakable =
// CHECK:         @_TwXxV21array_value_witnesses14BitwiseTakable
// CHECK:         @_TwCcV21array_value_witnesses14BitwiseTakable
// CHECK-NOT:     @_TwTtV21array_value_witnesses14BitwiseTakable
// CHECK-32:      @__swift_memmove_array4_4
// CHECK-64:      @__swift_memmove_array8_8
// CHECK-NOT:     @_TwtTV21array_value_witnesses14BitwiseTakable
// CHECK-32:      @__swift_memmove_array4_4
// CHECK-64:      @__swift_memmove_array8_8

// CHECK-LABEL: @_TWVV21array_value_witnesses8SomeWeak =
// CHECK:         @_TwXxV21array_value_witnesses8SomeWeak
// CHECK:         @_TwCcV21array_value_witnesses8SomeWeak
// CHECK:         @_TwTtV21array_value_witnesses8SomeWeak
// CHECK:         @_TwtTV21array_value_witnesses8SomeWeak

// CHECK-LABEL: define linkonce_odr hidden void @_TwXxV21array_value_witnesses8SomeWeak
// CHECK:         (%swift.opaque* [[ARRAY_PTR:%.*]], [[WORD:i[0-9]+]] [[COUNT:%.*]], %swift.type* %SomeWeak) {{.*}} {
// CHECK:         [[BEGIN:%.*]] = bitcast %swift.opaque* [[ARRAY_PTR]] to [[SOMEWEAK:%V21array_value_witnesses8SomeWeak]]*
// CHECK:         br label %iter
// CHECK:       iter:
// CHECK:         [[I:%.*]] = phi [[WORD]] [ [[COUNT]], %entry ], [ [[DEC:%.*]], %loop ]
// CHECK:         [[CURRENT:%.*]] = phi [[SOMEWEAK]]* [ [[BEGIN]], %entry ], [ [[NEXT:%.*]], %loop ]
// CHECK:         [[DONE:%.*]] = icmp eq [[WORD]] [[I]], 0
// CHECK:         br i1 [[DONE]], label %exit, label %loop
// CHECK:       loop:
// CHECK:         [[WEAK:%.*]] = getelementptr inbounds [[SOMEWEAK]], [[SOMEWEAK]]* [[CURRENT]], i32 0, i32 1
// CHECK:         call void @swift_weakDestroy(%swift.weak* [[WEAK]])
// CHECK:         [[DEC]] = sub [[WORD]] [[I]], 1
// CHECK:         [[NEXT]] = getelementptr inbounds [[SOMEWEAK]], [[SOMEWEAK]]* [[CURRENT]], [[WORD]] 1
// CHECK:         br label %iter
// CHECK:       exit:
// CHECK:         ret

// CHECK-LABEL: define linkonce_odr hidden %swift.opaque* @_TwCcV21array_value_witnesses8SomeWeak
// CHECK:         (%swift.opaque* [[DEST_PTR:%.*]], %swift.opaque* [[SRC_PTR:%.*]], [[WORD:i[0-9]+]] [[COUNT:%.*]], %swift.type* %SomeWeak) {{.*}} {
// CHECK:         [[DEST_BEGIN:%.*]] = bitcast %swift.opaque* [[DEST_PTR]] to [[SOMEWEAK]]*
// CHECK:         [[SRC_BEGIN:%.*]] = bitcast %swift.opaque* [[SRC_PTR]] to [[SOMEWEAK]]*
// CHECK:         br label %iter
// CHECK:       iter:
// CHECK:         [[I:%.*]] = phi [[WORD]] [ [[COUNT]], %entry ], [ [[DEC:%.*]], %loop ]
// CHECK:         [[DEST_CURRENT:%.*]] = phi [[SOMEWEAK]]* [ [[DEST_BEGIN]], %entry ], [ [[DEST_NEXT:%.*]], %loop ]
// CHECK:         [[SRC_CURRENT:%.*]] = phi [[SOMEWEAK]]* [ [[SRC_BEGIN]], %entry ], [ [[SRC_NEXT:%.*]], %loop ]
// CHECK:         [[DONE:%.*]] = icmp eq [[WORD]] [[I]], 0
// CHECK:         br i1 [[DONE]], label %exit, label %loop
// CHECK:       loop:
// CHECK:         [[DEST_WEAK:%.*]] = getelementptr inbounds [[SOMEWEAK]], [[SOMEWEAK]]* [[DEST_CURRENT]], i32 0, i32 1
// CHECK:         [[SRC_WEAK:%.*]] = getelementptr inbounds [[SOMEWEAK]], [[SOMEWEAK]]* [[SRC_CURRENT]], i32 0, i32 1
// CHECK:         call void @swift_weakCopyInit(%swift.weak* [[DEST_WEAK]], %swift.weak* [[SRC_WEAK]])
// CHECK:         [[DEC]] = sub [[WORD]] [[I]], 1
// CHECK:         [[DEST_NEXT]] = getelementptr inbounds [[SOMEWEAK]], [[SOMEWEAK]]* [[DEST_CURRENT]], [[WORD]] 1
// CHECK:         [[SRC_NEXT]] = getelementptr inbounds [[SOMEWEAK]], [[SOMEWEAK]]* [[SRC_CURRENT]], [[WORD]] 1
// CHECK:         br label %iter
// CHECK:       exit:
// CHECK:         ret

// CHECK-LABEL: define linkonce_odr hidden %swift.opaque* @_TwTtV21array_value_witnesses8SomeWeak
// CHECK:         (%swift.opaque* [[DEST_PTR:%.*]], %swift.opaque* [[SRC_PTR:%.*]], [[WORD:i[0-9]+]] [[COUNT:%.*]], %swift.type* %SomeWeak) {{.*}} {
// CHECK:         [[DEST_BEGIN:%.*]] = bitcast %swift.opaque* [[DEST_PTR]] to [[SOMEWEAK]]*
// CHECK:         [[SRC_BEGIN:%.*]] = bitcast %swift.opaque* [[SRC_PTR]] to [[SOMEWEAK]]*
// CHECK:         br label %iter
// CHECK:       iter:
// CHECK:         [[I:%.*]] = phi [[WORD]] [ [[COUNT]], %entry ], [ [[DEC:%.*]], %loop ]
// CHECK:         [[DEST_CURRENT:%.*]] = phi [[SOMEWEAK]]* [ [[DEST_BEGIN]], %entry ], [ [[DEST_NEXT:%.*]], %loop ]
// CHECK:         [[SRC_CURRENT:%.*]] = phi [[SOMEWEAK]]* [ [[SRC_BEGIN]], %entry ], [ [[SRC_NEXT:%.*]], %loop ]
// CHECK:         [[DONE:%.*]] = icmp eq [[WORD]] [[I]], 0
// CHECK:         br i1 [[DONE]], label %exit, label %loop
// CHECK:       loop:
// CHECK:         [[DEST_WEAK:%.*]] = getelementptr inbounds [[SOMEWEAK]], [[SOMEWEAK]]* [[DEST_CURRENT]], i32 0, i32 1
// CHECK:         [[SRC_WEAK:%.*]] = getelementptr inbounds [[SOMEWEAK]], [[SOMEWEAK]]* [[SRC_CURRENT]], i32 0, i32 1
// CHECK:         call void @swift_weakTakeInit(%swift.weak* [[DEST_WEAK]], %swift.weak* [[SRC_WEAK]])
// CHECK:         [[DEC]] = sub [[WORD]] [[I]], 1
// CHECK:         [[DEST_NEXT]] = getelementptr inbounds [[SOMEWEAK]], [[SOMEWEAK]]* [[DEST_CURRENT]], [[WORD]] 1
// CHECK:         [[SRC_NEXT]] = getelementptr inbounds [[SOMEWEAK]], [[SOMEWEAK]]* [[SRC_CURRENT]], [[WORD]] 1
// CHECK:         br label %iter
// CHECK:       exit:
// CHECK:         ret

// CHECK-LABEL: define linkonce_odr hidden %swift.opaque* @_TwtTV21array_value_witnesses8SomeWeak
// CHECK:         (%swift.opaque* [[DEST_PTR:%.*]], %swift.opaque* [[SRC_PTR:%.*]], [[WORD:i[0-9]+]] [[COUNT:%.*]], %swift.type* %SomeWeak) {{.*}} {
// CHECK:         [[DEST_BEGIN:%.*]] = bitcast %swift.opaque* [[DEST_PTR]] to [[SOMEWEAK]]*
// CHECK:         [[SRC_BEGIN:%.*]] = bitcast %swift.opaque* [[SRC_PTR]] to [[SOMEWEAK]]*
// CHECK:         [[DEST_END:%.*]] = getelementptr inbounds [[SOMEWEAK]], [[SOMEWEAK]]* [[DEST_BEGIN]], [[WORD]] [[COUNT]]
// CHECK:         [[SRC_END:%.*]] = getelementptr inbounds [[SOMEWEAK]], [[SOMEWEAK]]* [[SRC_BEGIN]], [[WORD]] [[COUNT]]
// CHECK:         br label %iter
// CHECK:       iter:
// CHECK:         [[I:%.*]] = phi [[WORD]] [ [[COUNT]], %entry ], [ [[DEC:%.*]], %loop ]
// CHECK:         [[DEST_PREV:%.*]] = phi [[SOMEWEAK]]* [ [[DEST_END]], %entry ], [ [[DEST_CURRENT:%.*]], %loop ]
// CHECK:         [[SRC_PREV:%.*]] = phi [[SOMEWEAK]]* [ [[SRC_END]], %entry ], [ [[SRC_CURRENT:%.*]], %loop ]
// CHECK:         [[DONE:%.*]] = icmp eq [[WORD]] [[I]], 0
// CHECK:         br i1 [[DONE]], label %exit, label %loop
// CHECK:       loop:
// CHECK:         [[DEST_CURRENT]] = getelementptr inbounds [[SOMEWEAK]], [[SOMEWEAK]]* [[DEST_PREV]], [[WORD]] -1
// CHECK:         [[SRC_CURRENT]] = getelementptr inbounds [[SOMEWEAK]], [[SOMEWEAK]]* [[SRC_PREV]], [[WORD]] -1
// CHECK:         [[DEST_WEAK:%.*]] = getelementptr inbounds [[SOMEWEAK]], [[SOMEWEAK]]* [[DEST_CURRENT]], i32 0, i32 1
// CHECK:         [[SRC_WEAK:%.*]] = getelementptr inbounds [[SOMEWEAK]], [[SOMEWEAK]]* [[SRC_CURRENT]], i32 0, i32 1
// CHECK:         call void @swift_weakTakeInit(%swift.weak* [[DEST_WEAK]], %swift.weak* [[SRC_WEAK]])
// CHECK:         [[DEC]] = sub [[WORD]] [[I]], 1
// CHECK:         br label %iter
// CHECK:       exit:
// CHECK:         ret
