@@ -820,6 +820,28 @@ bb0(%0 : $_ContiguousArrayBuffer<AnyObject>, %1 : $Builtin.Word, %2 : $Builtin.W
820
820
return %newptr : $Builtin.RawPointer
821
821
}
822
822
823
+ // CHECK-RELEASE-HOISTING-LABEL: sil @testMemcpy
824
+ // CHECK-RELEASE-HOISTING: bb0(%0 : $_ContiguousArrayBuffer<UInt64>, %1 : $Builtin.Word):
825
+ // CHECK-RELEASE-HOISTING: builtin "int_memcpy_RawPointer_RawPointer_Word"
826
+ // CHECK-RELEASE-HOISTING: release_value %0 : $_ContiguousArrayBuffer<UInt64>
827
+ // CHECK-RELEASE-HOISTING: } // end sil function 'testMemcpy'
828
+ sil @testMemcpy : $@convention(thin) (_ContiguousArrayBuffer<UInt64>, Builtin.Word) -> Builtin.RawPointer {
829
+ bb0(%0 : $_ContiguousArrayBuffer<UInt64>, %1 : $Builtin.Word):
830
+ %newptr = builtin "allocRaw"(%1 : $Builtin.Word, %1 : $Builtin.Word) : $Builtin.RawPointer
831
+ %token = bind_memory %newptr : $Builtin.RawPointer, %1 : $Builtin.Word to $*UInt64
832
+ %storage = struct_extract %0 : $_ContiguousArrayBuffer<UInt64>, #_ContiguousArrayBuffer._storage
833
+ %elements = ref_tail_addr %storage : $__ContiguousArrayStorageBase, $UInt64
834
+ %eltptr = address_to_pointer %elements : $*UInt64 to $Builtin.RawPointer
835
+ %objptr = struct $UnsafePointer<UInt64> (%eltptr : $Builtin.RawPointer)
836
+ %ptrdep = mark_dependence %objptr : $UnsafePointer<UInt64> on %storage : $__ContiguousArrayStorageBase
837
+ %rawptr = struct_extract %ptrdep : $UnsafePointer<UInt64>, #UnsafePointer._rawValue
838
+ %f = integer_literal $Builtin.Int1, 0
839
+ %move = builtin "int_memcpy_RawPointer_RawPointer_Word"(%newptr : $Builtin.RawPointer, %rawptr : $Builtin.RawPointer, %1 : $Builtin.Word, %f : $Builtin.Int1) : $()
840
+ release_value %0 : $_ContiguousArrayBuffer<UInt64>
841
+ return %newptr : $Builtin.RawPointer
842
+ }
843
+
844
+
823
845
// CHECK-LABEL: sil @dontMoveOverExistentialToClassCast : $@convention(thin) (@guaranteed AnyObject) -> Optional<fuzz>
824
846
// CHECK: strong_retain %0
825
847
// CHECK: checked_cast_br %0
0 commit comments