mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
50 lines
1.4 KiB
Plaintext
50 lines
1.4 KiB
Plaintext
// RUN: %target-swift-frontend -primary-file %s -gnone -emit-ir | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize
|
|
|
|
// REQUIRES: CPU=x86_64
|
|
|
|
sil_stage canonical
|
|
|
|
import Swift
|
|
|
|
sil hidden @test_helper : $@convention(thin) () -> () {
|
|
bb0:
|
|
%0 = tuple ()
|
|
return %0 : $()
|
|
}
|
|
|
|
// CHECK-64: define hidden swiftcc void @test1([[WORD:i64]] %0, [[WORD]] %1)
|
|
// CHECK-32: define hidden swiftcc void @test1([[WORD:i32]] %0, [[WORD]] %1)
|
|
sil hidden @test1 : $@convention(thin) (@owned Optional<() -> ()>) -> () {
|
|
bb0(%0 : $Optional<() -> ()>):
|
|
// CHECK: call void @"$sIey_SgWOy"
|
|
retain_value %0 : $Optional<() -> ()>
|
|
|
|
// CHECK: icmp eq i64 %0, 0
|
|
switch_enum %0 : $Optional<() -> ()>, case #Optional.some!enumelt: bb1, case #Optional.none!enumelt: bb2
|
|
|
|
// CHECK: [[FNPTR:%.*]] = inttoptr [[WORD]] %0 to ptr
|
|
// CHECK: [[CTX:%.*]] = inttoptr [[WORD]] %1 to ptr
|
|
// CHECK: br label
|
|
// CHECK: [[FNPTR2:%.*]] = phi ptr [ [[FNPTR]], {{%.*}} ]
|
|
// CHECK: [[CTX2:%.*]] = phi ptr [ [[CTX]], {{%.*}} ]
|
|
bb1(%1 : $() -> ()):
|
|
|
|
// CHECK: call swiftcc void [[FNPTR2]](ptr swiftself [[CTX2]])
|
|
apply %1() : $() -> ()
|
|
|
|
// CHECK: br label [[CONT:%[0-9]+]]
|
|
br bb3
|
|
|
|
bb2:
|
|
%4 = function_ref @test_helper : $@convention(thin) () -> ()
|
|
apply %4() : $@convention(thin) () -> ()
|
|
// CHECK: call swiftcc void @test_helper()
|
|
// CHECK: br label [[CONT]]
|
|
br bb3
|
|
|
|
bb3:
|
|
%5 = tuple ()
|
|
// CHECK: ret void
|
|
return %5 : $()
|
|
}
|