Files
swift-mirror/test/SILOptimizer/assume_single_threaded.sil
Roman Levenstein 354fd29f31 Add a new -assume-single-threaded option
This is a hidden option. It should be used like: -assume-single-threaded

When this function is provided, the compiler assumes that the code will be executed in the single threaded mode. It then performs certain optimizations that can benefit from it, e.g. it  marks as non-atomic all reference counting instructions in the user code being compiled.
2016-12-05 10:05:34 -08:00

52 lines
1.2 KiB
Plaintext

// RUN: %target-swift-frontend -emit-sil -assume-parsing-unqualified-ownership-sil %s -assume-single-threaded | %FileCheck %s
// RUN: %target-swift-frontend -emit-sil -assume-parsing-unqualified-ownership-sil %s -O -assume-single-threaded | %FileCheck %s
// Check that all reference counting instructions are converted to [nonatomic]
// if -assume-single-threaded is used.
sil_stage canonical
import Builtin
import Swift
import SwiftShims
public class C {
deinit
init()
}
// CHECK-LABEL: sil{{.*}}@test_atomic_to_nonatomic_retain
// CHECK: strong_retain [nonatomic]
// CHECK: return
sil @test_atomic_to_nonatomic_retain: $@convention(thin) () -> @owned C {
bb0:
%1 = alloc_ref $C
strong_retain %1 : $C
return %1 : $C
}
// CHECK-LABEL: sil{{.*}}@test_atomic_to_nonatomic_release
// CHECK: strong_release [nonatomic]
// CHECK: return
sil @test_atomic_to_nonatomic_release: $@convention(thin) (C) -> C {
bb0(%0 : $C):
strong_release %0 : $C
return %0 : $C
}
// C.__deallocating_deinit
sil @_TFC28nonatomic_reference_counting1CD : $@convention(method) (@owned C) -> () {
bb0(%0 : $C):
dealloc_ref %0 : $C
%4 = tuple ()
return %4 : $()
}
sil_vtable C {
#C.deinit!deallocator: _TFC28nonatomic_reference_counting1CD // C.__deallocating_deinit
}