// RUN: %target-swift-frontend %s -emit-ir -disable-objc-interop | %FileCheck %s

// REQUIRES: objc_interop

// CHECK: @test_dynamically_replaceableTX = global %swift.dyn_repl_link_entry { i8* bitcast (void ()* @test_dynamically_replaceableTI to i8*), %swift.dyn_repl_link_entry* null }
// CHECK: @test_dynamically_replaceableTx = constant %swift.dyn_repl_key { i32{{.*}}%swift.dyn_repl_link_entry* @test_dynamically_replaceableTX{{.*}}, i32 0 }, section "__TEXT,__const"
// CHECK: @test_replacementTX = global %swift.dyn_repl_link_entry zeroinitializer

// CHECK: @"\01l_unnamed_dynamic_replacements" = private constant { i32, i32, [1 x { i32, i32, i32, i32 }] }
// CHECK: { i32 0,
// CHECK:   i32 1,
// CHECK:  [1 x { i32, i32, i32, i32 }]
// CHECK:  [{ i32, i32, i32, i32 }
// CHECK:  %swift.dyn_repl_key* @test_dynamically_replaceableTx
// CHECK:  @test_replacement
// CHECK:  %swift.dyn_repl_link_entry* @test_replacementTX
// CHECK:  i32 0 }] }, section "__TEXT,__const"

// CHECK: @"\01l_auto_dynamic_replacements" = private constant { i32, i32, [1 x i32] }
// CHECK: { i32 0, i32 1,
// CHECK: [1 x i32] [{{.*}}@"\01l_unnamed_dynamic_replacements"{{.*}}]
// CHECK: }, section "__TEXT, __swift5_replace, regular, no_dead_strip"

// CHECK-LABEL: define swiftcc void @test_dynamically_replaceable()
// CHECK-NEXT: entry:
// CHECK-NEXT:   [[FUN_PTR:%.*]] = load i8*, i8** getelementptr inbounds (%swift.dyn_repl_link_entry, %swift.dyn_repl_link_entry* @test_dynamically_replaceableTX, i32 0, i32 0)
// CHECK-NEXT:   [[TYPED_PTR:%.*]] = bitcast i8* [[FUN_PTR]] to void ()*
// CHECK-NEXT:   tail call swiftcc void [[TYPED_PTR]]()
// CHECK-NEXT:   ret void
// CHECK-NEXT: }

// CHECK-LABEL: define swiftcc void @test_dynamically_replaceableTI()
// CHECK: entry:
// CHECK:   ret void
// CHECK: }

sil [dynamically_replacable] @test_dynamically_replaceable : $@convention(thin) () -> () {
bb0:
  %0 = tuple ()
  return %0 : $()
}

// CHECK-LABEL: define swiftcc void @test_replacement()
// CHECK: entry:
// CHECK:   call swiftcc void @test_replacementTI()
// CHECK:   ret void
// CHECK: }

// The thunk that implement the prev_dynamic_function_ref lookup.
// CHECK-LABEL: define swiftcc void @test_replacementTI()
// CHECK: entry:
// CHECK:   [[FUN_PTR:%.*]] = load i8*, i8** getelementptr inbounds (%swift.dyn_repl_link_entry, %swift.dyn_repl_link_entry* @test_replacementTX, i32 0, i32 0)
// CHECK:   [[TYPED_PTR:%.*]] = bitcast i8* [[FUN_PTR]] to void ()*
// CHECK:   call swiftcc void [[TYPED_PTR]]()
// CHECK:   ret void
// CHECK: }
sil [dynamic_replacement_for "test_dynamically_replaceable"] @test_replacement : $@convention(thin) () -> () {
bb0:
  %0 = prev_dynamic_function_ref @test_replacement : $@convention(thin) () -> ()
  %1 = apply %0() : $@convention(thin) () -> ()
  %2 = tuple ()
  return %2 : $()
}

// CHECK-LABEL: define swiftcc void @test_dynamic_call()
// CHECK: entry:
// CHECK:   call swiftcc void @test_dynamically_replaceable()
// CHECK:   ret void
// CHECK: }
sil @test_dynamic_call : $@convention(thin) () -> () {
bb0:
  %0 = dynamic_function_ref @test_dynamically_replaceable : $@convention(thin) () -> ()
  %1 = apply %0() : $@convention(thin) () -> ()
  %2 = tuple ()
  return %2 : $()
}
