Skip to content

Commit abc37ce

Browse files
committed
Remove copy added by outliner for guaranteed bridged value
This copy may remain unoptimized, avoid outlining this case.
1 parent c56573e commit abc37ce

File tree

2 files changed

+28
-12
lines changed

2 files changed

+28
-12
lines changed

lib/SILOptimizer/Transforms/Outliner.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1095,10 +1095,6 @@ ObjCMethodCall::outline(SILModule &M) {
10951095
if (BridgedArgIdx < BridgedArguments.size() &&
10961096
BridgedArguments[BridgedArgIdx].Idx == OrigSigIdx) {
10971097
auto bridgedArgValue = BridgedArguments[BridgedArgIdx].bridgedValue();
1098-
if (bridgedArgValue->getOwnershipKind() == OwnershipKind::Guaranteed) {
1099-
bridgedArgValue = makeGuaranteedValueAvailable(
1100-
bridgedArgValue, BridgedCall, *deBlocks);
1101-
}
11021098
Args.push_back(bridgedArgValue);
11031099
++BridgedArgIdx;
11041100
} else {

test/SILOptimizer/outliner_ossa.sil

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,9 @@ bb7(%64 : @owned $Optional<Data>):
7474
return %102 : $()
7575
}
7676

77+
// Not optimized
7778
// CHECK-LABEL: sil [Osize] [ossa] @test2 :
78-
// CHECK: [[FUNC:%.*]] = function_ref @$s4main8MyObjectC4take3arg10Foundation4DataVSgAI_tFZToTembgnn_ :
79-
// CHECK: apply [[FUNC]]
79+
// CHECK: objc_method
8080
// CHECK-LABEL: } // end sil function 'test2'
8181
sil [Osize] [ossa] @test2 : $@convention(thin) (@owned MyObject) -> @owned Optional<NSData> {
8282
bb0(%0: @owned $MyObject):
@@ -96,9 +96,9 @@ bb0(%0: @owned $MyObject):
9696
return %51 : $Optional<NSData>
9797
}
9898

99+
// Not optimized
99100
// CHECK-LABEL: sil [Osize] [ossa] @test3 :
100-
// CHECK: [[FUNC:%.*]] = function_ref @$s4main8MyObjectC4take3arg10Foundation4DataVSgAI_tFZToTembgnn_ :
101-
// CHECK: apply [[FUNC]]
101+
// CHECK: objc_method
102102
// CHECK-LABEL: } // end sil function 'test3'
103103
sil [Osize] [ossa] @test3 : $@convention(thin) (@owned MyObject, @in Data) -> @owned Optional<NSData> {
104104
bb0(%0: @owned $MyObject, %1 : $*Data):
@@ -116,9 +116,9 @@ bb0(%0: @owned $MyObject, %1 : $*Data):
116116
return %51 : $Optional<NSData>
117117
}
118118

119+
// Not optimized
119120
// CHECK-LABEL: sil [Osize] [ossa] @test4 :
120-
// CHECK: [[FUNC:%.*]] = function_ref @$s4main8MyObjectC8take_two4arg14arg210Foundation4DataVSgAJ_AJtFZToTembgbgnn_ :
121-
// CHECK: apply [[FUNC]]
121+
// CHECK: objc_method
122122
// CHECK-LABEL: } // end sil function 'test4'
123123
sil [Osize] [ossa] @test4 : $@convention(thin) (@owned MyObject) -> @owned Optional<NSData> {
124124
bb0(%0: @owned $MyObject):
@@ -177,9 +177,9 @@ bb3:
177177
return %51 : $Optional<NSData>
178178
}
179179

180+
// Not optimized
180181
// CHECK-LABEL: sil [Osize] [ossa] @test6 :
181-
// CHECK: [[FUNC:%.*]] = function_ref @$s4main8MyObjectC4take3arg10Foundation4DataVSgAI_tFZToTembgnn_ :
182-
// CHECK: apply [[FUNC]]
182+
// CHECK: objc_method
183183
// CHECK-LABEL: } // end sil function 'test6'
184184
sil [Osize] [ossa] @test6 : $@convention(thin) (@owned MyObject) -> @owned Optional<NSData> {
185185
bb0(%0: @owned $MyObject):
@@ -305,3 +305,23 @@ sil [Osize] [ossa] @destroy_after_borrow : $@convention(thin) () -> @owned Sub {
305305
apply undef(%162) : $@convention(thin) (Int) -> ()
306306
return %107 : $Sub
307307
}
308+
309+
// CHECK-LABEL: sil [Osize] [ossa] @test_consume :
310+
// CHECK: objc_method
311+
// CHECK-LABEL: } // end sil function 'test_consume'
312+
sil [Osize] [ossa] @test_consume : $@convention(thin) (@owned MyObject) -> @owned Optional<NSData> {
313+
bb0(%0: @owned $MyObject):
314+
%35 = metatype $@objc_metatype MyObject.Type
315+
%41 = function_ref @getData : $@convention(thin) () -> @owned Data
316+
%43 = apply %41() : $@convention(thin) () -> @owned Data
317+
%44 = function_ref @$s10Foundation4DataV19_bridgeToObjectiveCSo6NSDataCyF : $@convention(method) (@guaranteed Data) -> @owned NSData
318+
%45 = apply %44(%43) : $@convention(method) (@guaranteed Data) -> @owned NSData
319+
%46 = enum $Optional<NSData>, #Optional.some!enumelt, %45 : $NSData
320+
destroy_value %0 : $MyObject
321+
%48 = apply undef(%43) : $@convention(method) (@owned Data) -> ()
322+
%50 = objc_method %35 : $@objc_metatype MyObject.Type, #MyObject.take!foreign : (MyObject.Type) -> (Data?) -> Data?, $@convention(objc_method) (Optional<NSData>, @objc_metatype MyObject.Type) -> @autoreleased Optional<NSData>
323+
%51 = apply %50(%46, %35) : $@convention(objc_method) (Optional<NSData>, @objc_metatype MyObject.Type) -> @autoreleased Optional<NSData>
324+
destroy_value %46 : $Optional<NSData>
325+
return %51 : $Optional<NSData>
326+
}
327+

0 commit comments

Comments
 (0)