| // RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -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]], [[WORD]]) |
| // CHECK-32: define hidden swiftcc void @test1([[WORD:i32]], [[WORD]]) |
| 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.1: bb1, case #Optional.none!enumelt: bb2 |
| |
| // CHECK: [[FNPTR:%.*]] = inttoptr [[WORD]] %0 to i8* |
| // CHECK: [[CTX:%.*]] = inttoptr [[WORD]] %1 to %swift.refcounted* |
| // CHECK: br label |
| // CHECK: [[FNPTR2:%.*]] = phi i8* [ [[FNPTR]], {{%.*}} ] |
| // CHECK: [[CTX2:%.*]] = phi %swift.refcounted* [ [[CTX]], {{%.*}} ] |
| bb1(%1 : $() -> ()): |
| |
| // CHECK: [[FNPTR3:%.*]] = bitcast i8* [[FNPTR2]] to void (%swift.refcounted*)* |
| // CHECK: call swiftcc void [[FNPTR3]](%swift.refcounted* 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 : $() |
| } |