1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
// RUN: %target-sil-opt -test-runner %s 2>&1 | %FileCheck %s
import Builtin
import Swift
class C {}
struct X {}
sil [ossa] @get_owned_c : $@convention(thin) () -> (@owned C)
sil [ossa] @callee_guaranteed: $@convention(thin) (@guaranteed C) -> ()
sil [ossa] @barrier : $@convention(thin) () -> ()
// CHECK-LABEL: begin running test 1 of {{[^,]+}} on nohoist_over_rewritten_copy
// CHECK-NOT: DELETED:
// CHECK-NOT: end_borrow
// CHECK: Result: did not shrink
// CHECK-LABEL: end running test 1 of {{[^,]+}} on nohoist_over_rewritten_copy
sil [ossa] @nohoist_over_rewritten_copy : $@convention(thin) () -> (@owned C, @owned C) {
entry:
specify_test "shrink_borrow_scope %lifetime"
%get_owned_c = function_ref @get_owned_c : $@convention(thin) () -> (@owned C)
%instance = apply %get_owned_c() : $@convention(thin) () -> (@owned C)
%lifetime = begin_borrow [lexical] %instance : $C
debug_value [trace] %lifetime : $C
%callee_guaranteed = function_ref @callee_guaranteed : $@convention(thin) (@guaranteed C) -> ()
apply %callee_guaranteed(%lifetime) : $@convention(thin) (@guaranteed C) -> ()
%copy = copy_value %lifetime : $C
debug_value [trace] %copy : $C
end_borrow %lifetime : $C
%retval = tuple (%copy : $C, %instance : $C)
return %retval : $(C, C)
}
// CHECK-LABEL: begin running test {{.*}} on nohoist_over_access_scope_barrier_1
// CHECK: Result: did not shrink
// CHECK-LABEL: end running test {{.*}} on nohoist_over_access_scope_barrier_1
sil [ossa] @nohoist_over_access_scope_barrier_1 : $@convention(thin) (@guaranteed C, @inout X) -> () {
entry(%c : @guaranteed $C, %addr : $*X):
%borrow = begin_borrow %c : $C
specify_test "shrink_borrow_scope %borrow"
%access = begin_access [modify] [dynamic] %addr : $*X
cond_br undef, kill_introducer, newly_local_gen
kill_introducer:
cond_br undef, left, right
left:
%barrier = function_ref @barrier : $@convention(thin) () -> ()
apply %barrier() : $@convention(thin) () -> ()
end_access %access : $*X
end_borrow %borrow : $C
br exit
right:
end_access %access : $*X
end_borrow %borrow : $C
br exit
newly_local_gen:
end_access %access : $*X
end_borrow %borrow : $C
br exit
exit:
%retval = tuple ()
return %retval : $()
}
|