Skip to content

Commit e3de408

Browse files
committed
Simplification: remove builtin "destroyArray" with trivial element types
1 parent 23d1329 commit e3de408

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

SwiftCompilerSources/Sources/Optimizer/InstructionSimplification/SimplifyBuiltin.swift

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,15 @@ extension BuiltinInst : OnoneSimplifyable {
3232
.Strideof,
3333
.Alignof:
3434
optimizeTargetTypeConst(context)
35-
case .DestroyArray,
36-
.CopyArray,
35+
case .DestroyArray:
36+
if let elementType = substitutionMap.replacementTypes[0],
37+
elementType.isTrivial(in: parentFunction)
38+
{
39+
context.erase(instruction: self)
40+
return
41+
}
42+
optimizeArgumentToThinMetatype(argument: 0, context)
43+
case .CopyArray,
3744
.TakeArrayNoAlias,
3845
.TakeArrayFrontToBack,
3946
.TakeArrayBackToFront,

test/SILOptimizer/simplify_builtin.sil

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -605,3 +605,12 @@ bb0(%0 : $Builtin.RawPointer, %1 : $Builtin.Word):
605605
return %0 : $Builtin.RawPointer
606606
}
607607

608+
// CHECK-LABEL: sil @remove_trivial_destroy_array
609+
// CHECK-NOT: builtin
610+
// CHECK: } // end sil function 'remove_trivial_destroy_array'
611+
sil @remove_trivial_destroy_array : $@convention(thin) (Builtin.RawPointer, Builtin.Word) -> Builtin.RawPointer {
612+
bb0(%0 : $Builtin.RawPointer, %1 : $Builtin.Word):
613+
%2 = metatype $@thin Int.Type
614+
%3 = builtin "destroyArray"<Int>(%2 : $@thin Int.Type, %0 : $Builtin.RawPointer, %1 : $Builtin.Word) : $()
615+
return %0 : $Builtin.RawPointer
616+
}

0 commit comments

Comments
 (0)