blob: 0e5489e3950dc6c8996694a30a7be2412b3bdef7 [file] [log] [blame]
// RUN: %target-sil-opt -enable-sil-verify-all -inline -performance-constant-propagation -sil-verify-without-invalidation
sil_stage canonical
import Builtin
import Swift
import SwiftShims
private class Foo {
func speak()
deinit
init()
}
private class Foo2 : Foo {
override func speak()
deinit
override init()
}
// static Swift.Process._argc : Swift.Int32
sil_global [serialized] @_TZvOs7Process5_argcVs5Int32 : $Int32
// globalinit_33_1BDF70FFC18749BAB495A73B459ED2F0_token5
sil_global private_external [serialized] @globalinit_33_1BDF70FFC18749BAB495A73B459ED2F0_token5 : $Builtin.Word
// static Swift.Process._unsafeArgv : Swift.UnsafeMutablePointer<Swift.UnsafeMutablePointer<Swift.Int8>>
sil_global [serialized] @_TZvOs7Process11_unsafeArgvGVs20UnsafeMutablePointerGS0_Vs4Int8__ : $UnsafeMutablePointer<UnsafeMutablePointer<Int8>>
// main
sil @main : $@convention(c) (Int32, UnsafeMutablePointer<UnsafeMutablePointer<Int8>>) -> Int32 {
bb0(%0 : $Int32, %1 : $UnsafeMutablePointer<UnsafeMutablePointer<Int8>>):
%2 = global_addr @_TZvOs7Process5_argcVs5Int32 : $*Int32 // user: %3
store %0 to %2 : $*Int32 // id: %3
%4 = global_addr @globalinit_33_1BDF70FFC18749BAB495A73B459ED2F0_token5 : $*Builtin.Word // user: %5
%5 = address_to_pointer %4 : $*Builtin.Word to $Builtin.RawPointer // user: %7
// function_ref globalinit_33_1BDF70FFC18749BAB495A73B459ED2F0_func5
%6 = function_ref @globalinit_33_1BDF70FFC18749BAB495A73B459ED2F0_func5 : $@convention(thin) () -> () // user: %7
%7 = builtin "once"(%5 : $Builtin.RawPointer, %6 : $@convention(thin) () -> ()) : $()
%8 = global_addr @_TZvOs7Process11_unsafeArgvGVs20UnsafeMutablePointerGS0_Vs4Int8__ : $*UnsafeMutablePointer<UnsafeMutablePointer<Int8>> // user: %9
store %1 to %8 : $*UnsafeMutablePointer<UnsafeMutablePointer<Int8>> // id: %9
%10 = integer_literal $Builtin.Int32, 0 // user: %11
%11 = struct $Int32 (%10 : $Builtin.Int32) // user: %12
return %11 : $Int32 // id: %12
}
// Swift._didEnterMain (Swift.Int32, argv : Swift.UnsafeMutablePointer<Swift.UnsafeMutablePointer<Swift.Int8>>) -> ()
sil [transparent] [serialized] @_TFs13_didEnterMainFTVs5Int324argvGVs20UnsafeMutablePointerGS0_Vs4Int8___T_ : $@convention(thin) (Int32, UnsafeMutablePointer<UnsafeMutablePointer<Int8>>) -> ()
// main.(Foo in _9ACC0692747077F216D14C36CD927671).speak (main.(Foo in _9ACC0692747077F216D14C36CD927671))() -> ()
sil private @_TFC4mainP33_9ACC0692747077F216D14C36CD9276713Foo5speakfS0_FT_T_ : $@convention(method) (@guaranteed Foo) -> () {
bb0(%0 : $Foo):
debug_value %0 : $Foo // id: %1
// function_ref speakFoo
%2 = function_ref @speakFoo : $@convention(thin) () -> () // user: %3
%3 = apply %2() : $@convention(thin) () -> ()
%4 = tuple () // user: %5
return %4 : $() // id: %5
}
// speakFoo
sil hidden_external @speakFoo : $@convention(thin) () -> ()
// main.(Foo in _9ACC0692747077F216D14C36CD927671).__deallocating_deinit
sil private @_TFC4mainP33_9ACC0692747077F216D14C36CD9276713FooD : $@convention(method) (@owned Foo) -> () {
bb0(%0 : $Foo):
debug_value %0 : $Foo // id: %1
dealloc_ref %0 : $Foo // id: %2
%3 = tuple () // user: %4
return %3 : $() // id: %4
}
// main.(Foo in _9ACC0692747077F216D14C36CD927671).deinit
sil private @_TFC4mainP33_9ACC0692747077F216D14C36CD9276713Food : $@convention(method) (@guaranteed Foo) -> @owned Builtin.NativeObject {
bb0(%0 : $Foo):
debug_value %0 : $Foo // id: %1
%2 = unchecked_ref_cast %0 : $Foo to $Builtin.NativeObject // user: %3
return %2 : $Builtin.NativeObject // id: %3
}
// main.(Foo in _9ACC0692747077F216D14C36CD927671).init (main.(Foo in _9ACC0692747077F216D14C36CD927671).Type)() -> main.(Foo in _9ACC0692747077F216D14C36CD927671)
sil private @_TFC4mainP33_9ACC0692747077F216D14C36CD9276713FoocfMS0_FT_S0_ : $@convention(method) (@owned Foo) -> @owned Foo {
bb0(%0 : $Foo):
debug_value %0 : $Foo // id: %1
return %0 : $Foo // id: %2
}
// main.(Foo2 in _9ACC0692747077F216D14C36CD927671).speak (main.(Foo2 in _9ACC0692747077F216D14C36CD927671))() -> ()
sil private @_TFC4mainP33_9ACC0692747077F216D14C36CD9276714Foo25speakfS0_FT_T_ : $@convention(method) (@guaranteed Foo2) -> () {
bb0(%0 : $Foo2):
debug_value %0 : $Foo2 // id: %1
// function_ref speakFoo2
%2 = function_ref @speakFoo2 : $@convention(thin) () -> () // user: %3
%3 = apply %2() : $@convention(thin) () -> ()
%4 = tuple () // user: %5
return %4 : $() // id: %5
}
// speakFoo2
sil hidden_external @speakFoo2 : $@convention(thin) () -> ()
// main.(Foo2 in _9ACC0692747077F216D14C36CD927671).__deallocating_deinit
sil private @_TFC4mainP33_9ACC0692747077F216D14C36CD9276714Foo2D : $@convention(method) (@owned Foo2) -> () {
bb0(%0 : $Foo2):
debug_value %0 : $Foo2 // id: %1
dealloc_ref %0 : $Foo2 // id: %2
%3 = tuple () // user: %4
return %3 : $() // id: %4
}
// main.(Foo2 in _9ACC0692747077F216D14C36CD927671).deinit
sil private @_TFC4mainP33_9ACC0692747077F216D14C36CD9276714Foo2d : $@convention(method) (@guaranteed Foo2) -> @owned Builtin.NativeObject {
bb0(%0 : $Foo2):
debug_value %0 : $Foo2 // id: %1
%2 = unchecked_ref_cast %0 : $Foo2 to $Builtin.NativeObject // user: %3
return %2 : $Builtin.NativeObject // id: %3
}
// main.(Foo2 in _9ACC0692747077F216D14C36CD927671).init (main.(Foo2 in _9ACC0692747077F216D14C36CD927671).Type)() -> main.(Foo2 in _9ACC0692747077F216D14C36CD927671)
sil private @_TFC4mainP33_9ACC0692747077F216D14C36CD9276714Foo2cfMS0_FT_S0_ : $@convention(method) (@owned Foo2) -> @owned Foo2 {
bb0(%0 : $Foo2):
return %0 : $Foo2 // id: %2
}
// main.(Foo2 in _9ACC0692747077F216D14C36CD927671).__allocating_init (main.(Foo2 in _9ACC0692747077F216D14C36CD927671).Type)() -> main.(Foo2 in _9ACC0692747077F216D14C36CD927671)
sil private @_TFC4mainP33_9ACC0692747077F216D14C36CD9276714Foo2CfMS0_FT_S0_ : $@convention(thin) (@thick Foo2.Type) -> @owned Foo2 {
bb0(%0 : $@thick Foo2.Type):
%1 = alloc_ref $Foo2 // user: %3
return %1 : $Foo2 // id: %3
}
// main.callSpeak () -> ()
sil hidden @_TF4main9callSpeakFT_T_ : $@convention(thin) () -> () {
bb0:
%0 = alloc_ref $Foo2 // users: %2, %3, %4, %27
debug_value %0 : $Foo2 // id: %2
strong_retain %0 : $Foo2 // id: %3
%4 = upcast %0 : $Foo2 to $Foo // users: %5, %6, %17, %23
checked_cast_br %0 : $Foo2 to $Foo2, bb1, bb6 // id: %6
bb1(%7 : $Foo2): // Preds: bb0
%8 = enum $Optional<Foo2>, #Optional.some!enumelt.1, %7 : $Foo2 // user: %9
br bb2(%8 : $Optional<Foo2>) // id: %9
bb2(%10 : $Optional<Foo2>): // Preds: bb1 bb6
switch_enum %10 : $Optional<Foo2>, case #Optional.some!enumelt.1: bb3, default bb5 // id: %11
bb3(%12 : $Foo2): // Preds: bb2
// function_ref speakFoo2
%13 = function_ref @speakFoo2 : $@convention(thin) () -> () // user: %14
%14 = apply %13() : $@convention(thin) () -> ()
strong_release %12 : $Foo2 // id: %15
br bb4 // id: %16
bb4: // Preds: bb3 bb5
strong_release %4 : $Foo // id: %17
%18 = tuple () // user: %19
br bb7(%18 : $()) // id: %19
bb5: // Preds: bb2
// function_ref speakFoo2
%20 = function_ref @speakFoo2 : $@convention(thin) () -> () // user: %21
%21 = apply %20() : $@convention(thin) () -> ()
br bb4 // id: %22
bb6: // Preds: bb0
strong_release %4 : $Foo // id: %23
%24 = enum $Optional<Foo2>, #Optional.none!enumelt // user: %25
br bb2(%24 : $Optional<Foo2>) // id: %25
bb7(%26 : $()): // Preds: bb4
strong_release %0 : $Foo2 // id: %27
%28 = tuple () // user: %29
return %28 : $() // id: %29
}
// main.(speak in _9ACC0692747077F216D14C36CD927671) (main.(Foo in _9ACC0692747077F216D14C36CD927671)) -> ()
sil private [always_inline] @_TF4mainP33_9ACC0692747077F216D14C36CD9276715speakFCS_P33_9ACC0692747077F216D14C36CD9276713FooT_ : $@convention(thin) (@owned Foo) -> () {
bb0(%0 : $Foo):
debug_value %0 : $Foo // id: %1
strong_retain %0 : $Foo // id: %2
checked_cast_br %0 : $Foo to $Foo2, bb1, bb2 // id: %3
bb1(%4 : $Foo2): // Preds: bb0
%5 = enum $Optional<Foo2>, #Optional.some!enumelt.1, %4 : $Foo2 // user: %6
br bb3(%5 : $Optional<Foo2>) // id: %6
bb2: // Preds: bb0
strong_release %0 : $Foo // id: %7
%8 = enum $Optional<Foo2>, #Optional.none!enumelt // user: %9
br bb3(%8 : $Optional<Foo2>) // id: %9
bb3(%10 : $Optional<Foo2>): // Preds: bb1 bb2
switch_enum %10 : $Optional<Foo2>, case #Optional.some!enumelt.1: bb4, default bb5 // id: %11
bb4(%12 : $Foo2): // Preds: bb3
debug_value %12 : $Foo2 // id: %13
// function_ref speakFoo2
%14 = function_ref @speakFoo2 : $@convention(thin) () -> () // user: %15
%15 = apply %14() : $@convention(thin) () -> ()
strong_release %12 : $Foo2 // id: %16
br bb6 // id: %17
bb5: // Preds: bb3
%18 = class_method %0 : $Foo, #Foo.speak!1 : Foo -> () -> (), $@convention(method) (@guaranteed Foo) -> () // user: %19
%19 = apply %18(%0) : $@convention(method) (@guaranteed Foo) -> ()
br bb6 // id: %20
bb6: // Preds: bb4 bb5
strong_release %0 : $Foo // id: %21
%22 = tuple () // user: %23
return %22 : $() // id: %23
}
// globalinit_33_1BDF70FFC18749BAB495A73B459ED2F0_func5
sil private_external [serialized] @globalinit_33_1BDF70FFC18749BAB495A73B459ED2F0_func5 : $@convention(thin) () -> () {
bb0:
%0 = global_addr @_TZvOs7Process11_unsafeArgvGVs20UnsafeMutablePointerGS0_Vs4Int8__ : $*UnsafeMutablePointer<UnsafeMutablePointer<Int8>> // user: %4
%1 = integer_literal $Builtin.Int8, 0 // user: %2
%2 = builtin "inttoptr_Int8"(%1 : $Builtin.Int8) : $Builtin.RawPointer // user: %3
%3 = struct $UnsafeMutablePointer<UnsafeMutablePointer<Int8>> (%2 : $Builtin.RawPointer) // user: %4
store %3 to %0 : $*UnsafeMutablePointer<UnsafeMutablePointer<Int8>> // id: %4
%5 = tuple () // user: %6
return %5 : $() // id: %6
}
sil_vtable Foo {
#Foo.speak!1: @_TFC4mainP33_9ACC0692747077F216D14C36CD9276713Foo5speakfS0_FT_T_ // main.(Foo in _9ACC0692747077F216D14C36CD927671).speak (main.(Foo in _9ACC0692747077F216D14C36CD927671))() -> ()
#Foo.deinit!deallocator.1: @_TFC4mainP33_9ACC0692747077F216D14C36CD9276713FooD // main.(Foo in _9ACC0692747077F216D14C36CD927671).__deallocating_deinit
#Foo.init!initializer.1: @_TFC4mainP33_9ACC0692747077F216D14C36CD9276713FoocfMS0_FT_S0_ // main.(Foo in _9ACC0692747077F216D14C36CD927671).init (main.(Foo in _9ACC0692747077F216D14C36CD927671).Type)() -> main.(Foo in _9ACC0692747077F216D14C36CD927671)
}
sil_vtable Foo2 {
#Foo.speak!1: @_TFC4mainP33_9ACC0692747077F216D14C36CD9276714Foo25speakfS0_FT_T_ // main.(Foo2 in _9ACC0692747077F216D14C36CD927671).speak (main.(Foo2 in _9ACC0692747077F216D14C36CD927671))() -> ()
#Foo.init!initializer.1: @_TFC4mainP33_9ACC0692747077F216D14C36CD9276714Foo2cfMS0_FT_S0_ // main.(Foo2 in _9ACC0692747077F216D14C36CD927671).init (main.(Foo2 in _9ACC0692747077F216D14C36CD927671).Type)() -> main.(Foo2 in _9ACC0692747077F216D14C36CD927671)
#Foo2.deinit!deallocator.1: @_TFC4mainP33_9ACC0692747077F216D14C36CD9276714Foo2D // main.(Foo2 in _9ACC0692747077F216D14C36CD927671).__deallocating_deinit
}