Skip to content

Commit

Permalink
Merge pull request #3765 from aschwaighofer/rdar_27527684_update_silo…
Browse files Browse the repository at this point in the history
…ptimizer_test_for_id_as_any

Fix optimizer test cases for id-as-any
  • Loading branch information
aschwaighofer committed Jul 26, 2016
2 parents e051c61 + f0a04e0 commit 67aac58
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 32 deletions.
15 changes: 7 additions & 8 deletions test/SILOptimizer/cast_folding_objc_no_foundation.swift
Expand Up @@ -2,11 +2,10 @@
// REQUIRES: objc_interop

// TODO: Update optimizer for id-as-Any changes.
// XFAIL: *

// Note: no 'import Foundation'

struct DoesNotBridgeToObjC {}
struct PlainStruct {}

// CHECK-LABEL: sil hidden [noinline] @_TTSf4g___TF31cast_folding_objc_no_foundation23testAnyObjectToArrayIntFPs9AnyObject_Sb
// CHECK: bb0(%0 : $AnyObject):
Expand All @@ -28,14 +27,14 @@ func testAnyObjectToArrayString(_ a: AnyObject) -> Bool {
return a is [String]
}

// CHECK-LABEL: sil hidden [noinline] @_TTSf4d___TF31cast_folding_objc_no_foundation30testAnyObjectToArrayNotBridgedFPs9AnyObject_Sb
// CHECK-NEXT: bb0:
// CHECK: [[VALUE:%.*]] = integer_literal $Builtin.Int1, 0
// CHECK: [[RESULT:%.*]] = struct $Bool ([[VALUE]] : $Builtin.Int1)
// CHECK: return [[RESULT]]
// CHECK-LABEL: sil hidden [noinline] @{{.*}}testAnyObjectToArrayNotBridgedFPs9AnyObject{{.*}}
// CHECK: bb0(%0 : $AnyObject):
// CHECK: [[SOURCE:%.*]] = alloc_stack $AnyObject
// CHECK: [[TARGET:%.*]] = alloc_stack $Array<PlainStruct>
// CHECK: checked_cast_addr_br take_always AnyObject in [[SOURCE]] : $*AnyObject to Array<PlainStruct> in [[TARGET]] : $*Array<PlainStruct>, bb1, bb2
@inline(never)
func testAnyObjectToArrayNotBridged(_ a: AnyObject) -> Bool {
return a is [DoesNotBridgeToObjC]
return a is [PlainStruct]
}

// CHECK-LABEL: sil hidden [noinline] @_TTSf4g___TF31cast_folding_objc_no_foundation25testAnyObjectToDictionaryFPs9AnyObject_Sb
Expand Down
47 changes: 23 additions & 24 deletions test/SILOptimizer/sil_combine_objc_bridge.sil
Expand Up @@ -3,7 +3,6 @@
// REQUIRES: objc_interop

// TODO: Update optimizer for id-as-Any changes.
// XFAIL: *

sil_stage canonical

Expand Down Expand Up @@ -132,30 +131,30 @@ bb0(%0 : $AnArray<AnyObject>):
return %4 : $AnArray<AnyObject>
}

struct Unbridged {
struct PlainStruct {
}

// CHECK-LABEL: sil @failing_bridge_from_to_owned
// CHECK: apply
// CHECK: apply
// CHECK-LABEL: sil @plain_struct_bridge_from_to_owned
// CHECK-NOT: apply
// CHECK-NOT: apply
// CHECK: return
sil @failing_bridge_from_to_owned : $@convention(thin) (@owned AnNSArray) -> @owned AnNSArray {
sil @plain_struct_bridge_from_to_owned : $@convention(thin) (@owned AnNSArray) -> @owned AnNSArray {
bb0(%0 : $AnNSArray):
%1 = function_ref @bridgeFromObjectiveC : $@convention(thin) <Unbridged> (@owned AnNSArray) -> @owned AnArray<Unbridged>
%2 = apply %1<Unbridged>(%0) : $@convention(thin) <Unbridged> (@owned AnNSArray) -> @owned AnArray<Unbridged>
retain_value %2 : $AnArray<Unbridged>
release_value %2 : $AnArray<Unbridged>
%3 = function_ref @bridgeToObjectiveC : $@convention(method) <Unbridged> (@owned AnArray<Unbridged>) -> @owned AnNSArray
%4 = apply %3<Unbridged>(%2) : $@convention(method) <Unbridged> (@owned AnArray<Unbridged>) -> @owned AnNSArray
%1 = function_ref @bridgeFromObjectiveC : $@convention(thin) <PlainStruct> (@owned AnNSArray) -> @owned AnArray<PlainStruct>
%2 = apply %1<PlainStruct>(%0) : $@convention(thin) <PlainStruct> (@owned AnNSArray) -> @owned AnArray<PlainStruct>
retain_value %2 : $AnArray<PlainStruct>
release_value %2 : $AnArray<PlainStruct>
%3 = function_ref @bridgeToObjectiveC : $@convention(method) <PlainStruct> (@owned AnArray<PlainStruct>) -> @owned AnNSArray
%4 = apply %3<PlainStruct>(%2) : $@convention(method) <PlainStruct> (@owned AnArray<PlainStruct>) -> @owned AnNSArray
return %4 : $AnNSArray
}

// CHECK-LABEL: sil @failing_bridge_from_to_owned_generic
// CHECK: apply
// CHECK: apply
// CHECK-LABEL: sil @plain_struct_bridge_from_to_owned_generic
// CHECK-NOT: apply
// CHECK-NOT: apply
// CHECK: return

sil @failing_bridge_from_to_owned_generic : $@convention(thin) <T>(@owned AnNSArray) -> @owned AnNSArray {
sil @plain_struct_bridge_from_to_owned_generic : $@convention(thin) <T>(@owned AnNSArray) -> @owned AnNSArray {
bb0(%0 : $AnNSArray):
%1 = function_ref @bridgeFromObjectiveC : $@convention(thin) <T2> (@owned AnNSArray) -> @owned AnArray<T2>
%2 = apply %1<T>(%0) : $@convention(thin) <T2> (@owned AnNSArray) -> @owned AnArray<T2>
Expand All @@ -166,19 +165,19 @@ bb0(%0 : $AnNSArray):
return %4 : $AnNSArray
}

// CHECK-LABEL: sil @failing_bridge_from_to_owned_recursive_type
// CHECK: apply
// CHECK: apply
// CHECK-LABEL: sil @plain_struct_from_to_owned_recursive_type
// CHECK-NOT: apply
// CHECK-NOT: apply
// CHECK: return

sil @failing_bridge_from_to_owned_recursive_type : $@convention(thin) (@owned AnNSArray) -> @owned AnNSArray {
sil @plain_struct_from_to_owned_recursive_type : $@convention(thin) (@owned AnNSArray) -> @owned AnNSArray {
bb0(%0 : $AnNSArray):
%1 = function_ref @bridgeFromObjectiveC : $@convention(thin) <T> (@owned AnNSArray) -> @owned AnArray<T>
%2 = apply %1<AnArray<Unbridged>>(%0) : $@convention(thin) <T> (@owned AnNSArray) -> @owned AnArray<T>
retain_value %2 : $AnArray<AnArray<Unbridged>>
release_value %2 : $AnArray<AnArray<Unbridged>>
%2 = apply %1<AnArray<PlainStruct>>(%0) : $@convention(thin) <T> (@owned AnNSArray) -> @owned AnArray<T>
retain_value %2 : $AnArray<AnArray<PlainStruct>>
release_value %2 : $AnArray<AnArray<PlainStruct>>
%3 = function_ref @bridgeToObjectiveC : $@convention(method) <T> (@owned AnArray<T>) -> @owned AnNSArray
%4 = apply %3<AnArray<Unbridged>>(%2) : $@convention(method) <T> (@owned AnArray<T>) -> @owned AnNSArray
%4 = apply %3<AnArray<PlainStruct>>(%2) : $@convention(method) <T> (@owned AnArray<T>) -> @owned AnNSArray
return %4 : $AnNSArray
}

Expand Down

0 comments on commit 67aac58

Please sign in to comment.