// 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 : $() }