Skip to content

Commit cc83a7d

Browse files
committed
add the "array.copy_into_vector" array-semantic
1 parent dd9ce40 commit cc83a7d

File tree

5 files changed

+6
-1
lines changed

5 files changed

+6
-1
lines changed

include/swift/AST/SemanticAttrs.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ SEMANTICS_ATTR(ARRAY_DEALLOC_UNINITIALIZED, "array.dealloc_uninitialized")
6464
SEMANTICS_ATTR(ARRAY_UNINITIALIZED_INTRINSIC, "array.uninitialized_intrinsic")
6565
SEMANTICS_ATTR(ARRAY_FINALIZE_INTRINSIC, "array.finalize_intrinsic")
6666
SEMANTICS_ATTR(ARRAY_GET_CONTIGUOUSARRAYSTORAGETYPE, "array.getContiguousArrayStorageType")
67+
SEMANTICS_ATTR(ARRAY_COPY_INTO_VECTOR, "array.copy_into_vector")
6768

6869
SEMANTICS_ATTR(SEQUENCE_FOR_EACH, "sequence.forEach")
6970
SEMANTICS_ATTR(TYPENAME, "typeName")

include/swift/SILOptimizer/Analysis/ArraySemantic.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ enum class ArrayCallKind {
3737
kWithUnsafeMutableBufferPointer,
3838
kAppendContentsOf,
3939
kAppendElement,
40+
kCopyIntoVector,
4041
// The following two semantic function kinds return the result @owned
4142
// instead of operating on self passed as parameter. If you are adding
4243
// a function, and it has a self parameter, make sure that it is defined
@@ -45,7 +46,7 @@ enum class ArrayCallKind {
4546
kArrayInitEmpty,
4647
kArrayUninitialized,
4748
kArrayUninitializedIntrinsic,
48-
kArrayFinalizeIntrinsic
49+
kArrayFinalizeIntrinsic,
4950
};
5051

5152
/// Return true is the given function is an array semantics call.

lib/SILOptimizer/Analysis/ArraySemantic.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ ArrayCallKind swift::getArraySemanticsKind(SILFunction *f) {
5252
ArrayCallKind::kWithUnsafeMutableBufferPointer)
5353
.Case("array.append_contentsOf", ArrayCallKind::kAppendContentsOf)
5454
.Case("array.append_element", ArrayCallKind::kAppendElement)
55+
.Case("array.copy_into_vector", ArrayCallKind::kCopyIntoVector)
5556
.Default(ArrayCallKind::kNone);
5657
if (Tmp != ArrayCallKind::kNone) {
5758
assert(Kind == ArrayCallKind::kNone && "Multiple array semantic "

lib/SILOptimizer/LoopTransforms/COWArrayOpt.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,7 @@ static bool isNonMutatingArraySemanticCall(SILInstruction *Inst) {
317317
case ArrayCallKind::kGetElement:
318318
case ArrayCallKind::kGetElementAddress:
319319
case ArrayCallKind::kEndMutation:
320+
case ArrayCallKind::kCopyIntoVector:
320321
return true;
321322
case ArrayCallKind::kMakeMutable:
322323
case ArrayCallKind::kMutateUnknown:

lib/SILOptimizer/Utils/PerformanceInlinerUtils.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -631,6 +631,7 @@ SemanticFunctionLevel swift::getSemanticFunctionLevel(SILFunction *function) {
631631
// transient and should be inlined away immediately.
632632
case ArrayCallKind::kArrayUninitializedIntrinsic:
633633
case ArrayCallKind::kArrayFinalizeIntrinsic:
634+
case ArrayCallKind::kCopyIntoVector:
634635
return SemanticFunctionLevel::Transient;
635636

636637
} // end switch

0 commit comments

Comments
 (0)