-
Notifications
You must be signed in to change notification settings - Fork 10.5k
[LoadableByAddr] unchecked_bitwise_cast error. #71744
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
One other data point: if we go into |
For some reason I cannot reproduce it (yet) with freshly-built swift / swiftpm from the repo. Likely there are some additional options that triggers some particular transformation. Anyway, I can reproduce it by latest nightly toolchain snapshot and working on smaller standalone reproducer. We are hitting an unimplemented assert in https://github.com/apple/swift/blob/main/lib/IRGen/LoadableByAddress.cpp#L3579 on the following SIL instruction: %94 = unchecked_bitwise_cast %93 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb10__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @owned
S<Double, Double>) to $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb10__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @out S<Double, Doubl
e>) // users: %95, %96 @atrick @aschwaighofer Does this look familiar? |
So, it is triggered only if Here is the original function: Input SIL// x #1 (n:) in A.testA()
sil private [ossa] @$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF : $@convention(thin) (F<Double, Double>) -> Double {
// %0 "n" // users: %114, %65, %16, %1
bb0(%0 : $F<Double, Double>):
debug_value %0 : $F<Double, Double>, let, name "n", argno 1 // id: %1
%2 = alloc_stack $Double, var, name "r" // users: %158, %7, %51, %100, %149, %155
%3 = float_literal $Builtin.FPIEEE64, 0x0 // 0 // user: %6
%4 = metatype $@thin Double.Type // user: %6
// function_ref Double.init(_builtinFloatLiteral:)
%5 = function_ref @$sSd20_builtinFloatLiteralSdBf64__tcfC : $@convention(method) (Builtin.FPIEEE64, @thin Double.Type) -> Double // user: %6
%6 = apply %5(%3, %4) : $@convention(method) (Builtin.FPIEEE64, @thin Double.Type) -> Double // user: %7
store %6 to [trivial] %2 : $*Double // id: %7
%8 = metatype $@thin Double.Type // user: %53
%9 = string_literal utf8 "a" // user: %14
%10 = integer_literal $Builtin.Word, 1 // user: %14
%11 = integer_literal $Builtin.Int1, -1 // user: %14
%12 = metatype $@thin String.Type // user: %14
// function_ref String.init(_builtinStringLiteral:utf8CodeUnitCount:isASCII:)
%13 = function_ref @$sSS21_builtinStringLiteral17utf8CodeUnitCount7isASCIISSBp_BwBi1_tcfC : $@convention(method) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, @thin String.Type) -> @owned String // user: %14
%14 = apply %13(%9, %10, %11, %12) : $@convention(method) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, @thin String.Type) -> @owned String // users: %56, %16
// function_ref F.subscript.getter
%15 = function_ref @$s15InternalPackage1FVyAA1SVyxq_GSgSScig : $@convention(method) <τ_0_0, τ_0_1 where τ_0_0 : E> (@guaranteed String, F<τ_0_0, τ_0_1>) -> @owned Optional<S<τ_0_0, τ_0_1>> // user: %16
%16 = apply %15<Double, Double>(%14, %0) : $@convention(method) <τ_0_0, τ_0_1 where τ_0_0 : E> (@guaranteed String, F<τ_0_0, τ_0_1>) -> @owned Optional<S<τ_0_0, τ_0_1>> // user: %17
switch_enum %16 : $Optional<S<Double, Double>>, case #Optional.some!enumelt: bb2, case #Optional.none!enumelt: bb1 // id: %17
bb1: // Preds: bb0
%18 = string_literal utf8 "ReproducerTests/T.swift" // user: %25
%19 = integer_literal $Builtin.Word, 23 // user: %25
%20 = integer_literal $Builtin.Int1, -1 // user: %25
%21 = integer_literal $Builtin.Word, 5 // user: %25
%22 = integer_literal $Builtin.Word, 24
%23 = integer_literal $Builtin.Int1, 0 // user: %25
// function_ref _diagnoseUnexpectedNilOptional(_filenameStart:_filenameLength:_filenameIsASCII:_line:_isImplicitUnwrap:)
%24 = function_ref @$ss30_diagnoseUnexpectedNilOptional14_filenameStart01_E6Length01_E7IsASCII5_line17_isImplicitUnwrapyBp_BwBi1_BwBi1_tF : $@convention(thin) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, Builtin.Word, Builtin.Int1) -> () // user: %25
%25 = apply %24(%18, %19, %20, %21, %23) : $@convention(thin) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, Builtin.Word, Builtin.Int1) -> ()
unreachable // id: %26
// %27 // users: %36, %39
bb2(%27 : @owned $S<Double, Double>): // Preds: bb0
%28 = float_literal $Builtin.FPIEEE64, 0x0 // 0 // user: %31
%29 = metatype $@thin Double.Type // user: %31
// function_ref Double.init(_builtinFloatLiteral:)
%30 = function_ref @$sSd20_builtinFloatLiteralSdBf64__tcfC : $@convention(method) (Builtin.FPIEEE64, @thin Double.Type) -> Double // user: %31
%31 = apply %30(%28, %29) : $@convention(method) (Builtin.FPIEEE64, @thin Double.Type) -> Double // user: %34
%32 = alloc_stack $Optional<Double> // users: %55, %38, %36
%33 = alloc_stack $Double // users: %37, %36, %34
store %31 to [trivial] %33 : $*Double // id: %34
// function_ref S.subscript.getter
%35 = function_ref @$s15InternalPackage1SVyq_Sgxcig : $@convention(method) <τ_0_0, τ_0_1 where τ_0_0 : E> (@in_guaranteed τ_0_0, @guaranteed S<τ_0_0, τ_0_1>) -> @out Optional<τ_0_1> // user: %36
%36 = apply %35<Double, Double>(%32, %33, %27) : $@convention(method) <τ_0_0, τ_0_1 where τ_0_0 : E> (@in_guaranteed τ_0_0, @guaranteed S<τ_0_0, τ_0_1>) -> @out Optional<τ_0_1>
dealloc_stack %33 : $*Double // id: %37
%38 = load [trivial] %32 : $*Optional<Double> // user: %40
destroy_value %27 : $S<Double, Double> // id: %39
switch_enum %38 : $Optional<Double>, case #Optional.some!enumelt: bb4, case #Optional.none!enumelt: bb3 // id: %40
bb3: // Preds: bb2
%41 = string_literal utf8 "ReproducerTests/T.swift" // user: %48
%42 = integer_literal $Builtin.Word, 23 // user: %48
%43 = integer_literal $Builtin.Int1, -1 // user: %48
%44 = integer_literal $Builtin.Word, 5 // user: %48
%45 = integer_literal $Builtin.Word, 30
%46 = integer_literal $Builtin.Int1, 0 // user: %48
// function_ref _diagnoseUnexpectedNilOptional(_filenameStart:_filenameLength:_filenameIsASCII:_line:_isImplicitUnwrap:)
%47 = function_ref @$ss30_diagnoseUnexpectedNilOptional14_filenameStart01_E6Length01_E7IsASCII5_line17_isImplicitUnwrapyBp_BwBi1_BwBi1_tF : $@convention(thin) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, Builtin.Word, Builtin.Int1) -> () // user: %48
%48 = apply %47(%41, %42, %43, %44, %46) : $@convention(thin) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, Builtin.Word, Builtin.Int1) -> ()
unreachable // id: %49
// %50 // user: %53
bb4(%50 : $Double): // Preds: bb2
%51 = begin_access [modify] [static] %2 : $*Double // users: %54, %53
// function_ref static Double.+= infix(_:_:)
%52 = function_ref @$sSd2peoiyySdz_SdtFZ : $@convention(method) (@inout Double, Double, @thin Double.Type) -> () // user: %53
%53 = apply %52(%51, %50, %8) : $@convention(method) (@inout Double, Double, @thin Double.Type) -> ()
end_access %51 : $*Double // id: %54
dealloc_stack %32 : $*Optional<Double> // id: %55
destroy_value %14 : $String // id: %56
%57 = metatype $@thin Double.Type // user: %102
%58 = string_literal utf8 "b" // user: %63
%59 = integer_literal $Builtin.Word, 1 // user: %63
%60 = integer_literal $Builtin.Int1, -1 // user: %63
%61 = metatype $@thin String.Type // user: %63
// function_ref String.init(_builtinStringLiteral:utf8CodeUnitCount:isASCII:)
%62 = function_ref @$sSS21_builtinStringLiteral17utf8CodeUnitCount7isASCIISSBp_BwBi1_tcfC : $@convention(method) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, @thin String.Type) -> @owned String // user: %63
%63 = apply %62(%58, %59, %60, %61) : $@convention(method) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, @thin String.Type) -> @owned String // users: %105, %65
// function_ref F.subscript.getter
%64 = function_ref @$s15InternalPackage1FVyAA1SVyxq_GSgSScig : $@convention(method) <τ_0_0, τ_0_1 where τ_0_0 : E> (@guaranteed String, F<τ_0_0, τ_0_1>) -> @owned Optional<S<τ_0_0, τ_0_1>> // user: %65
%65 = apply %64<Double, Double>(%63, %0) : $@convention(method) <τ_0_0, τ_0_1 where τ_0_0 : E> (@guaranteed String, F<τ_0_0, τ_0_1>) -> @owned Optional<S<τ_0_0, τ_0_1>> // user: %66
switch_enum %65 : $Optional<S<Double, Double>>, case #Optional.some!enumelt: bb6, case #Optional.none!enumelt: bb5 // id: %66
bb5: // Preds: bb4
%67 = string_literal utf8 "ReproducerTests/T.swift" // user: %74
%68 = integer_literal $Builtin.Word, 23 // user: %74
%69 = integer_literal $Builtin.Int1, -1 // user: %74
%70 = integer_literal $Builtin.Word, 6 // user: %74
%71 = integer_literal $Builtin.Word, 24
%72 = integer_literal $Builtin.Int1, 0 // user: %74
// function_ref _diagnoseUnexpectedNilOptional(_filenameStart:_filenameLength:_filenameIsASCII:_line:_isImplicitUnwrap:)
%73 = function_ref @$ss30_diagnoseUnexpectedNilOptional14_filenameStart01_E6Length01_E7IsASCII5_line17_isImplicitUnwrapyBp_BwBi1_BwBi1_tF : $@convention(thin) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, Builtin.Word, Builtin.Int1) -> () // user: %74
%74 = apply %73(%67, %68, %69, %70, %72) : $@convention(thin) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, Builtin.Word, Builtin.Int1) -> ()
unreachable // id: %75
// %76 // users: %85, %88
bb6(%76 : @owned $S<Double, Double>): // Preds: bb4
%77 = float_literal $Builtin.FPIEEE64, 0x3FF0000000000000 // 1 // user: %80
%78 = metatype $@thin Double.Type // user: %80
// function_ref Double.init(_builtinFloatLiteral:)
%79 = function_ref @$sSd20_builtinFloatLiteralSdBf64__tcfC : $@convention(method) (Builtin.FPIEEE64, @thin Double.Type) -> Double // user: %80
%80 = apply %79(%77, %78) : $@convention(method) (Builtin.FPIEEE64, @thin Double.Type) -> Double // user: %83
%81 = alloc_stack $Optional<Double> // users: %104, %87, %85
%82 = alloc_stack $Double // users: %86, %85, %83
store %80 to [trivial] %82 : $*Double // id: %83
// function_ref S.subscript.getter
%84 = function_ref @$s15InternalPackage1SVyq_Sgxcig : $@convention(method) <τ_0_0, τ_0_1 where τ_0_0 : E> (@in_guaranteed τ_0_0, @guaranteed S<τ_0_0, τ_0_1>) -> @out Optional<τ_0_1> // user: %85
%85 = apply %84<Double, Double>(%81, %82, %76) : $@convention(method) <τ_0_0, τ_0_1 where τ_0_0 : E> (@in_guaranteed τ_0_0, @guaranteed S<τ_0_0, τ_0_1>) -> @out Optional<τ_0_1>
dealloc_stack %82 : $*Double // id: %86
%87 = load [trivial] %81 : $*Optional<Double> // user: %89
destroy_value %76 : $S<Double, Double> // id: %88
switch_enum %87 : $Optional<Double>, case #Optional.some!enumelt: bb8, case #Optional.none!enumelt: bb7 // id: %89
bb7: // Preds: bb6
%90 = string_literal utf8 "ReproducerTests/T.swift" // user: %97
%91 = integer_literal $Builtin.Word, 23 // user: %97
%92 = integer_literal $Builtin.Int1, -1 // user: %97
%93 = integer_literal $Builtin.Word, 6 // user: %97
%94 = integer_literal $Builtin.Word, 30
%95 = integer_literal $Builtin.Int1, 0 // user: %97
// function_ref _diagnoseUnexpectedNilOptional(_filenameStart:_filenameLength:_filenameIsASCII:_line:_isImplicitUnwrap:)
%96 = function_ref @$ss30_diagnoseUnexpectedNilOptional14_filenameStart01_E6Length01_E7IsASCII5_line17_isImplicitUnwrapyBp_BwBi1_BwBi1_tF : $@convention(thin) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, Builtin.Word, Builtin.Int1) -> () // user: %97
%97 = apply %96(%90, %91, %92, %93, %95) : $@convention(thin) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, Builtin.Word, Builtin.Int1) -> ()
unreachable // id: %98
// %99 // user: %102
bb8(%99 : $Double): // Preds: bb6
%100 = begin_access [modify] [static] %2 : $*Double // users: %103, %102
// function_ref static Double.+= infix(_:_:)
%101 = function_ref @$sSd2peoiyySdz_SdtFZ : $@convention(method) (@inout Double, Double, @thin Double.Type) -> () // user: %102
%102 = apply %101(%100, %99, %57) : $@convention(method) (@inout Double, Double, @thin Double.Type) -> ()
end_access %100 : $*Double // id: %103
dealloc_stack %81 : $*Optional<Double> // id: %104
destroy_value %63 : $String // id: %105
%106 = metatype $@thin Double.Type // user: %151
%107 = string_literal utf8 "c" // user: %112
%108 = integer_literal $Builtin.Word, 1 // user: %112
%109 = integer_literal $Builtin.Int1, -1 // user: %112
%110 = metatype $@thin String.Type // user: %112
// function_ref String.init(_builtinStringLiteral:utf8CodeUnitCount:isASCII:)
%111 = function_ref @$sSS21_builtinStringLiteral17utf8CodeUnitCount7isASCIISSBp_BwBi1_tcfC : $@convention(method) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, @thin String.Type) -> @owned String // user: %112
%112 = apply %111(%107, %108, %109, %110) : $@convention(method) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, @thin String.Type) -> @owned String // users: %154, %114
// function_ref F.subscript.getter
%113 = function_ref @$s15InternalPackage1FVyAA1SVyxq_GSgSScig : $@convention(method) <τ_0_0, τ_0_1 where τ_0_0 : E> (@guaranteed String, F<τ_0_0, τ_0_1>) -> @owned Optional<S<τ_0_0, τ_0_1>> // user: %114
%114 = apply %113<Double, Double>(%112, %0) : $@convention(method) <τ_0_0, τ_0_1 where τ_0_0 : E> (@guaranteed String, F<τ_0_0, τ_0_1>) -> @owned Optional<S<τ_0_0, τ_0_1>> // user: %115
switch_enum %114 : $Optional<S<Double, Double>>, case #Optional.some!enumelt: bb10, case #Optional.none!enumelt: bb9 // id: %115
bb9: // Preds: bb8
%116 = string_literal utf8 "ReproducerTests/T.swift" // user: %123
%117 = integer_literal $Builtin.Word, 23 // user: %123
%118 = integer_literal $Builtin.Int1, -1 // user: %123
%119 = integer_literal $Builtin.Word, 7 // user: %123
%120 = integer_literal $Builtin.Word, 24
%121 = integer_literal $Builtin.Int1, 0 // user: %123
// function_ref _diagnoseUnexpectedNilOptional(_filenameStart:_filenameLength:_filenameIsASCII:_line:_isImplicitUnwrap:)
%122 = function_ref @$ss30_diagnoseUnexpectedNilOptional14_filenameStart01_E6Length01_E7IsASCII5_line17_isImplicitUnwrapyBp_BwBi1_BwBi1_tF : $@convention(thin) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, Builtin.Word, Builtin.Int1) -> () // user: %123
%123 = apply %122(%116, %117, %118, %119, %121) : $@convention(thin) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, Builtin.Word, Builtin.Int1) -> ()
unreachable // id: %124
// %125 // users: %134, %137
bb10(%125 : @owned $S<Double, Double>): // Preds: bb8
%126 = float_literal $Builtin.FPIEEE64, 0x0 // 0 // user: %129
%127 = metatype $@thin Double.Type // user: %129
// function_ref Double.init(_builtinFloatLiteral:)
%128 = function_ref @$sSd20_builtinFloatLiteralSdBf64__tcfC : $@convention(method) (Builtin.FPIEEE64, @thin Double.Type) -> Double // user: %129
%129 = apply %128(%126, %127) : $@convention(method) (Builtin.FPIEEE64, @thin Double.Type) -> Double // user: %132
%130 = alloc_stack $Optional<Double> // users: %153, %136, %134
%131 = alloc_stack $Double // users: %135, %134, %132
store %129 to [trivial] %131 : $*Double // id: %132
// function_ref S.subscript.getter
%133 = function_ref @$s15InternalPackage1SVyq_Sgxcig : $@convention(method) <τ_0_0, τ_0_1 where τ_0_0 : E> (@in_guaranteed τ_0_0, @guaranteed S<τ_0_0, τ_0_1>) -> @out Optional<τ_0_1> // user: %134
%134 = apply %133<Double, Double>(%130, %131, %125) : $@convention(method) <τ_0_0, τ_0_1 where τ_0_0 : E> (@in_guaranteed τ_0_0, @guaranteed S<τ_0_0, τ_0_1>) -> @out Optional<τ_0_1>
dealloc_stack %131 : $*Double // id: %135
%136 = load [trivial] %130 : $*Optional<Double> // user: %138
destroy_value %125 : $S<Double, Double> // id: %137
switch_enum %136 : $Optional<Double>, case #Optional.some!enumelt: bb12, case #Optional.none!enumelt: bb11 // id: %138
bb11: // Preds: bb10
%139 = string_literal utf8 "ReproducerTests/T.swift" // user: %146
%140 = integer_literal $Builtin.Word, 23 // user: %146
%141 = integer_literal $Builtin.Int1, -1 // user: %146
%142 = integer_literal $Builtin.Word, 7 // user: %146
%143 = integer_literal $Builtin.Word, 30
%144 = integer_literal $Builtin.Int1, 0 // user: %146
// function_ref _diagnoseUnexpectedNilOptional(_filenameStart:_filenameLength:_filenameIsASCII:_line:_isImplicitUnwrap:)
%145 = function_ref @$ss30_diagnoseUnexpectedNilOptional14_filenameStart01_E6Length01_E7IsASCII5_line17_isImplicitUnwrapyBp_BwBi1_BwBi1_tF : $@convention(thin) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, Builtin.Word, Builtin.Int1) -> () // user: %146
%146 = apply %145(%139, %140, %141, %142, %144) : $@convention(thin) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, Builtin.Word, Builtin.Int1) -> ()
unreachable // id: %147
// %148 // user: %151
bb12(%148 : $Double): // Preds: bb10
%149 = begin_access [modify] [static] %2 : $*Double // users: %152, %151
// function_ref static Double.+= infix(_:_:)
%150 = function_ref @$sSd2peoiyySdz_SdtFZ : $@convention(method) (@inout Double, Double, @thin Double.Type) -> () // user: %151
%151 = apply %150(%149, %148, %106) : $@convention(method) (@inout Double, Double, @thin Double.Type) -> ()
end_access %149 : $*Double // id: %152
dealloc_stack %130 : $*Optional<Double> // id: %153
destroy_value %112 : $String // id: %154
%155 = begin_access [read] [static] %2 : $*Double // users: %157, %156
%156 = load [trivial] %155 : $*Double // user: %159
end_access %155 : $*Double // id: %157
dealloc_stack %2 : $*Double // id: %158
return %156 : $Double // id: %159
} // end sil function '$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF' Here is generated pullback: Generated SIL// pullback of x #1 (n:) in A.testA()
sil private [ossa] @$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tFTJpSpSr : $@convention(thin) (Double, @owned _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb12__Pred__src_0_wrt_0, @owned @callee_guaranteed (@inout Double) -> Double) -> F<Double, Double>.TangentVector {
// %0 // user: %80
// %1 // user: %180
// %2 // users: %87, %86
bb0(%0 : $Double, %1 : @owned $_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb12__Pred__src_0_wrt_0, %2 : @owned $@callee_guaranteed (@inout Double) -> Double):
%3 = alloc_stack $Optional<Double>.TangentVector // users: %576, %575, %173, %6
%4 = witness_method $Optional<Double>.TangentVector, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %6
%5 = metatype $@thick Optional<Double>.TangentVector.Type // user: %6
%6 = apply %4<Optional<Double>.TangentVector>(%3, %5) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%7 = alloc_stack $Optional<Double>.TangentVector // users: %574, %573, %146, %10
%8 = witness_method $Optional<Double>.TangentVector, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %10
%9 = metatype $@thick Optional<Double>.TangentVector.Type // user: %10
%10 = apply %8<Optional<Double>.TangentVector>(%7, %9) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%11 = alloc_stack $Optional<Double>.TangentVector // users: %572, %571, %119, %14
%12 = witness_method $Optional<Double>.TangentVector, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %14
%13 = metatype $@thick Optional<Double>.TangentVector.Type // user: %14
%14 = apply %12<Optional<Double>.TangentVector>(%11, %13) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%15 = alloc_stack $Double, var, name "derivative of 'r' in scope at /Users/asl/Projects/swift-project/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/uncheckedBitCast/Tests/ReproducerTests/T.swift:7:13 (scope #12)" // users: %570, %569, %104, %86, %83, %18
%16 = witness_method $Double, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %18
%17 = metatype $@thick Double.Type // user: %18
%18 = apply %16<Double>(%15, %17) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%19 = alloc_stack $Double, var, name "derivative of 'r' in scope at /Users/asl/Projects/swift-project/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/uncheckedBitCast/Tests/ReproducerTests/T.swift:4:41 (scope #0)" // users: %568, %567, %536, %533, %503, %22
%20 = witness_method $Double, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %22
%21 = metatype $@thick Double.Type // user: %22
%22 = apply %20<Double>(%19, %21) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%23 = alloc_stack $Optional<Double>.TangentVector // users: %566, %565, %473, %468, %450, %26
%24 = witness_method $Optional<Double>.TangentVector, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %26
%25 = metatype $@thick Optional<Double>.TangentVector.Type // user: %26
%26 = apply %24<Optional<Double>.TangentVector>(%23, %25) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%27 = alloc_stack $Double, var, name "derivative of 'r' in scope at /Users/asl/Projects/swift-project/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/uncheckedBitCast/Tests/ReproducerTests/T.swift:5:26 (scope #2)" // users: %564, %563, %503, %447, %30
%28 = witness_method $Double, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %30
%29 = metatype $@thick Double.Type // user: %30
%30 = apply %28<Double>(%27, %29) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%31 = alloc_stack $Optional<Double>.TangentVector // users: %562, %561, %450, %382, %34
%32 = witness_method $Optional<Double>.TangentVector, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %34
%33 = metatype $@thick Optional<Double>.TangentVector.Type // user: %34
%34 = apply %32<Optional<Double>.TangentVector>(%31, %33) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%35 = alloc_stack $Double, var, name "derivative of 'r' in scope at /Users/asl/Projects/swift-project/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/uncheckedBitCast/Tests/ReproducerTests/T.swift:5:13 (scope #4)" // users: %560, %559, %447, %420, %379, %38
%36 = witness_method $Double, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %38
%37 = metatype $@thick Double.Type // user: %38
%38 = apply %36<Double>(%35, %37) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%39 = alloc_stack $Optional<Double>.TangentVector // users: %558, %557, %349, %344, %320, %42
%40 = witness_method $Optional<Double>.TangentVector, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %42
%41 = metatype $@thick Optional<Double>.TangentVector.Type // user: %42
%42 = apply %40<Optional<Double>.TangentVector>(%39, %41) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%43 = alloc_stack $Optional<Double>.TangentVector // users: %556, %555, %382, %317, %46
%44 = witness_method $Optional<Double>.TangentVector, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %46
%45 = metatype $@thick Optional<Double>.TangentVector.Type // user: %46
%46 = apply %44<Optional<Double>.TangentVector>(%43, %45) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%47 = alloc_stack $Double, var, name "derivative of 'r' in scope at /Users/asl/Projects/swift-project/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/uncheckedBitCast/Tests/ReproducerTests/T.swift:6:26 (scope #6)" // users: %554, %553, %379, %314, %50
%48 = witness_method $Double, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %50
%49 = metatype $@thick Double.Type // user: %50
%50 = apply %48<Double>(%47, %49) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%51 = alloc_stack $Optional<Double>.TangentVector // users: %552, %551, %320, %243, %54
%52 = witness_method $Optional<Double>.TangentVector, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %54
%53 = metatype $@thick Optional<Double>.TangentVector.Type // user: %54
%54 = apply %52<Optional<Double>.TangentVector>(%51, %53) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%55 = alloc_stack $Optional<Double>.TangentVector // users: %550, %549, %317, %240, %58
%56 = witness_method $Optional<Double>.TangentVector, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %58
%57 = metatype $@thick Optional<Double>.TangentVector.Type // user: %58
%58 = apply %56<Optional<Double>.TangentVector>(%55, %57) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%59 = alloc_stack $Double, var, name "derivative of 'r' in scope at /Users/asl/Projects/swift-project/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/uncheckedBitCast/Tests/ReproducerTests/T.swift:6:13 (scope #8)" // users: %548, %547, %314, %287, %237, %62
%60 = witness_method $Double, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %62
%61 = metatype $@thick Double.Type // user: %62
%62 = apply %60<Double>(%59, %61) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%63 = alloc_stack $Optional<Double>.TangentVector // users: %546, %545, %207, %202, %173, %66
%64 = witness_method $Optional<Double>.TangentVector, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %66
%65 = metatype $@thick Optional<Double>.TangentVector.Type // user: %66
%66 = apply %64<Optional<Double>.TangentVector>(%63, %65) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%67 = alloc_stack $Optional<Double>.TangentVector // users: %544, %543, %243, %146, %70
%68 = witness_method $Optional<Double>.TangentVector, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %70
%69 = metatype $@thick Optional<Double>.TangentVector.Type // user: %70
%70 = apply %68<Optional<Double>.TangentVector>(%67, %69) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%71 = alloc_stack $Optional<Double>.TangentVector // users: %542, %541, %240, %119, %74
%72 = witness_method $Optional<Double>.TangentVector, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %74
%73 = metatype $@thick Optional<Double>.TangentVector.Type // user: %74
%74 = apply %72<Optional<Double>.TangentVector>(%71, %73) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%75 = alloc_stack $Double, var, name "derivative of 'r' in scope at /Users/asl/Projects/swift-project/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/uncheckedBitCast/Tests/ReproducerTests/T.swift:7:26 (scope #10)" // users: %540, %539, %237, %104, %78
%76 = witness_method $Double, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %78
%77 = metatype $@thick Double.Type // user: %78
%78 = apply %76<Double>(%75, %77) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%79 = alloc_stack $Double // users: %85, %84, %83, %80
store %0 to [trivial] %79 : $*Double // id: %80
%81 = witness_method $Double, #AdditiveArithmetic."+=" : <Self where Self : AdditiveArithmetic> (Self.Type) -> (inout Self, Self) -> () : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@inout τ_0_0, @in_guaranteed τ_0_0, @thick τ_0_0.Type) -> () // user: %83
%82 = metatype $@thick Double.Type // user: %83
%83 = apply %81<Double>(%15, %79, %82) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@inout τ_0_0, @in_guaranteed τ_0_0, @thick τ_0_0.Type) -> ()
destroy_addr %79 : $*Double // id: %84
dealloc_stack %79 : $*Double // id: %85
%86 = apply %2(%15) : $@callee_guaranteed (@inout Double) -> Double // user: %90
destroy_value %2 : $@callee_guaranteed (@inout Double) -> Double // id: %87
%88 = alloc_stack $Optional<Double>.TangentVector // users: %97, %96, %94
%89 = alloc_stack $Optional<Double> // users: %95, %94, %91
%90 = enum $Optional<Double>, #Optional.some!enumelt, %86 : $Double // user: %91
store %90 to [trivial] %89 : $*Optional<Double> // id: %91
// function_ref Optional<A>.TangentVector.init(_:)
%92 = function_ref @$sSq16_DifferentiationAA14DifferentiableRzlE13TangentVectorVyADyx_GACQzSgcfC : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@in Optional<τ_0_0.TangentVector>, @thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector // user: %94
%93 = metatype $@thin Optional<Double>.TangentVector.Type // user: %94
%94 = apply %92<Double>(%88, %89, %93) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@in Optional<τ_0_0.TangentVector>, @thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
dealloc_stack %89 : $*Optional<Double> // id: %95
%96 = load [trivial] %88 : $*Optional<Double>.TangentVector // user: %182
dealloc_stack %88 : $*Optional<Double>.TangentVector // id: %97
%98 = alloc_stack $F<Double, Double>.TangentVector // users: %103, %102, %101
%99 = witness_method $F<Double, Double>.TangentVector, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %101
%100 = metatype $@thick F<Double, Double>.TangentVector.Type // user: %101
%101 = apply %99<F<Double, Double>.TangentVector>(%98, %100) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%102 = load [trivial] %98 : $*F<Double, Double>.TangentVector // user: %182
dealloc_stack %98 : $*F<Double, Double>.TangentVector // id: %103
copy_addr %15 to %75 : $*Double // id: %104
%105 = alloc_stack $Optional<S<Double, Double>>.TangentVector // users: %110, %109, %108
%106 = witness_method $Optional<S<Double, Double>>.TangentVector, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %108
%107 = metatype $@thick Optional<S<Double, Double>>.TangentVector.Type // user: %108
%108 = apply %106<Optional<S<Double, Double>>.TangentVector>(%105, %107) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%109 = load [take] %105 : $*Optional<S<Double, Double>>.TangentVector // users: %174, %111
dealloc_stack %105 : $*Optional<S<Double, Double>>.TangentVector // id: %110
%111 = copy_value %109 : $Optional<S<Double, Double>>.TangentVector // user: %182
%112 = alloc_stack $S<Double, Double> // users: %117, %116, %115
%113 = witness_method $S<Double, Double>, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %115
%114 = metatype $@thick S<Double, Double>.Type // user: %115
%115 = apply %113<S<Double, Double>>(%112, %114) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%116 = load [take] %112 : $*S<Double, Double> // users: %175, %118
dealloc_stack %112 : $*S<Double, Double> // id: %117
%118 = copy_value %116 : $S<Double, Double> // user: %182
copy_addr %11 to %71 : $*Optional<Double>.TangentVector // id: %119
%120 = alloc_stack $Optional<Double>.TangentVector // users: %125, %124, %123
%121 = witness_method $Optional<Double>.TangentVector, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %123
%122 = metatype $@thick Optional<Double>.TangentVector.Type // user: %123
%123 = apply %121<Optional<Double>.TangentVector>(%120, %122) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%124 = load [trivial] %120 : $*Optional<Double>.TangentVector // user: %182
dealloc_stack %120 : $*Optional<Double>.TangentVector // id: %125
%126 = alloc_stack $Double // users: %131, %130, %129
%127 = witness_method $Double, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %129
%128 = metatype $@thick Double.Type // user: %129
%129 = apply %127<Double>(%126, %128) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%130 = load [trivial] %126 : $*Double // user: %182
dealloc_stack %126 : $*Double // id: %131
%132 = alloc_stack $Optional<S<Double, Double>>.TangentVector // users: %137, %136, %135
%133 = witness_method $Optional<S<Double, Double>>.TangentVector, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %135
%134 = metatype $@thick Optional<S<Double, Double>>.TangentVector.Type // user: %135
%135 = apply %133<Optional<S<Double, Double>>.TangentVector>(%132, %134) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%136 = load [take] %132 : $*Optional<S<Double, Double>>.TangentVector // users: %176, %138
dealloc_stack %132 : $*Optional<S<Double, Double>>.TangentVector // id: %137
%138 = copy_value %136 : $Optional<S<Double, Double>>.TangentVector // user: %182
%139 = alloc_stack $S<Double, Double> // users: %144, %143, %142
%140 = witness_method $S<Double, Double>, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %142
%141 = metatype $@thick S<Double, Double>.Type // user: %142
%142 = apply %140<S<Double, Double>>(%139, %141) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%143 = load [take] %139 : $*S<Double, Double> // users: %177, %145
dealloc_stack %139 : $*S<Double, Double> // id: %144
%145 = copy_value %143 : $S<Double, Double> // user: %182
copy_addr %7 to %67 : $*Optional<Double>.TangentVector // id: %146
%147 = alloc_stack $Optional<Double>.TangentVector // users: %152, %151, %150
%148 = witness_method $Optional<Double>.TangentVector, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %150
%149 = metatype $@thick Optional<Double>.TangentVector.Type // user: %150
%150 = apply %148<Optional<Double>.TangentVector>(%147, %149) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%151 = load [trivial] %147 : $*Optional<Double>.TangentVector // user: %182
dealloc_stack %147 : $*Optional<Double>.TangentVector // id: %152
%153 = alloc_stack $Double // users: %158, %157, %156
%154 = witness_method $Double, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %156
%155 = metatype $@thick Double.Type // user: %156
%156 = apply %154<Double>(%153, %155) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%157 = load [trivial] %153 : $*Double // user: %182
dealloc_stack %153 : $*Double // id: %158
%159 = alloc_stack $Optional<S<Double, Double>>.TangentVector // users: %164, %163, %162
%160 = witness_method $Optional<S<Double, Double>>.TangentVector, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %162
%161 = metatype $@thick Optional<S<Double, Double>>.TangentVector.Type // user: %162
%162 = apply %160<Optional<S<Double, Double>>.TangentVector>(%159, %161) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%163 = load [take] %159 : $*Optional<S<Double, Double>>.TangentVector // users: %178, %165
dealloc_stack %159 : $*Optional<S<Double, Double>>.TangentVector // id: %164
%165 = copy_value %163 : $Optional<S<Double, Double>>.TangentVector // user: %182
%166 = alloc_stack $S<Double, Double> // users: %171, %170, %169
%167 = witness_method $S<Double, Double>, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %169
%168 = metatype $@thick S<Double, Double>.Type // user: %169
%169 = apply %167<S<Double, Double>>(%166, %168) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
%170 = load [take] %166 : $*S<Double, Double> // users: %179, %172
dealloc_stack %166 : $*S<Double, Double> // id: %171
%172 = copy_value %170 : $S<Double, Double> // user: %182
copy_addr %3 to %63 : $*Optional<Double>.TangentVector // id: %173
destroy_value %109 : $Optional<S<Double, Double>>.TangentVector // id: %174
destroy_value %116 : $S<Double, Double> // id: %175
destroy_value %136 : $Optional<S<Double, Double>>.TangentVector // id: %176
destroy_value %143 : $S<Double, Double> // id: %177
destroy_value %163 : $Optional<S<Double, Double>>.TangentVector // id: %178
destroy_value %170 : $S<Double, Double> // id: %179
switch_enum %1 : $_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb12__Pred__src_0_wrt_0, case #_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb12__Pred__src_0_wrt_0.bb10!enumelt: bb1 // id: %180
// %181 // user: %182
bb1(%181 : @owned $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb10__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>)): // Preds: bb0
br bb2(%102 : $F<Double, Double>.TangentVector, %111 : $Optional<S<Double, Double>>.TangentVector, %118 : $S<Double, Double>, %124 : $Optional<Double>.TangentVector, %130 : $Double, %138 : $Optional<S<Double, Double>>.TangentVector, %145 : $S<Double, Double>, %151 : $Optional<Double>.TangentVector, %157 : $Double, %165 : $Optional<S<Double, Double>>.TangentVector, %172 : $S<Double, Double>, %96 : $Optional<Double>.TangentVector, %181 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb10__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>)) // id: %182
// %183 // users: %256, %236
// %184 // users: %245, %238
// %185 // users: %246, %239
// %186 // user: %256
// %187 // user: %256
// %188 // users: %247, %241
// %189 // users: %248, %242
// %190 // user: %256
// %191 // user: %256
// %192 // user: %249
// %193 // users: %250, %209
// %194 // user: %199
// %195 // user: %196
bb2(%183 : $F<Double, Double>.TangentVector, %184 : @owned $Optional<S<Double, Double>>.TangentVector, %185 : @owned $S<Double, Double>, %186 : $Optional<Double>.TangentVector, %187 : $Double, %188 : @owned $Optional<S<Double, Double>>.TangentVector, %189 : @owned $S<Double, Double>, %190 : $Optional<Double>.TangentVector, %191 : $Double, %192 : @owned $Optional<S<Double, Double>>.TangentVector, %193 : @owned $S<Double, Double>, %194 : $Optional<Double>.TangentVector, %195 : @owned $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb10__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>)): // Preds: bb1
(%196, %197) = destructure_tuple %195 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb10__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>) // users: %254, %206
%198 = alloc_stack $Optional<Double>.TangentVector // users: %204, %203, %202, %199
store %194 to [trivial] %198 : $*Optional<Double>.TangentVector // id: %199
%200 = witness_method $Optional<Double>.TangentVector, #AdditiveArithmetic."+=" : <Self where Self : AdditiveArithmetic> (Self.Type) -> (inout Self, Self) -> () : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@inout τ_0_0, @in_guaranteed τ_0_0, @thick τ_0_0.Type) -> () // user: %202
%201 = metatype $@thick Optional<Double>.TangentVector.Type // user: %202
%202 = apply %200<Optional<Double>.TangentVector>(%63, %198, %201) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@inout τ_0_0, @in_guaranteed τ_0_0, @thick τ_0_0.Type) -> ()
destroy_addr %198 : $*Optional<Double>.TangentVector // id: %203
dealloc_stack %198 : $*Optional<Double>.TangentVector // id: %204
// function_ref thunk for @escaping @callee_guaranteed (@unowned Double?<A>.TangentVector) -> (@owned S<Double, Double>)
%205 = function_ref @$sSq16_DifferentiationAA14DifferentiableRzlE13TangentVectorVySd_G15InternalPackage1SVyS2dGIegyo_AeIIegno_TR : $@convention(thin) (@in_guaranteed Optional<Double>.TangentVector, @guaranteed @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>) -> @owned S<Double, Double> // user: %206
%206 = partial_apply [callee_guaranteed] %205(%197) : $@convention(thin) (@in_guaranteed Optional<Double>.TangentVector, @guaranteed @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>) -> @owned S<Double, Double> // users: %208, %207
%207 = apply %206(%63) : $@callee_guaranteed (@in_guaranteed Optional<Double>.TangentVector) -> @owned S<Double, Double> // users: %251, %210
destroy_value %206 : $@callee_guaranteed (@in_guaranteed Optional<Double>.TangentVector) -> @owned S<Double, Double> // id: %208
%209 = copy_value %193 : $S<Double, Double> // user: %214
%210 = copy_value %207 : $S<Double, Double> // user: %215
%211 = alloc_stack $S<Double, Double> // users: %224, %223, %218
%212 = alloc_stack $S<Double, Double> // users: %222, %219, %218, %214
%213 = alloc_stack $S<Double, Double> // users: %221, %220, %218, %215
store %209 to [init] %212 : $*S<Double, Double> // id: %214
store %210 to [init] %213 : $*S<Double, Double> // id: %215
%216 = witness_method $S<Double, Double>, #AdditiveArithmetic."+" : <Self where Self : AdditiveArithmetic> (Self.Type) -> (Self, Self) -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_0, @thick τ_0_0.Type) -> @out τ_0_0 // user: %218
%217 = metatype $@thick S<Double, Double>.Type // user: %218
%218 = apply %216<S<Double, Double>>(%211, %213, %212, %217) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_0, @thick τ_0_0.Type) -> @out τ_0_0
destroy_addr %212 : $*S<Double, Double> // id: %219
destroy_addr %213 : $*S<Double, Double> // id: %220
dealloc_stack %213 : $*S<Double, Double> // id: %221
dealloc_stack %212 : $*S<Double, Double> // id: %222
%223 = load [take] %211 : $*S<Double, Double> // users: %252, %225
dealloc_stack %211 : $*S<Double, Double> // id: %224
%225 = copy_value %223 : $S<Double, Double> // user: %228
%226 = alloc_stack $Optional<S<Double, Double>>.TangentVector // users: %235, %234, %232
%227 = alloc_stack $Optional<S<Double, Double>> // users: %233, %232, %229
%228 = enum $Optional<S<Double, Double>>, #Optional.some!enumelt, %225 : $S<Double, Double> // user: %229
store %228 to [init] %227 : $*Optional<S<Double, Double>> // id: %229
// function_ref Optional<A>.TangentVector.init(_:)
%230 = function_ref @$sSq16_DifferentiationAA14DifferentiableRzlE13TangentVectorVyADyx_GACQzSgcfC : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@in Optional<τ_0_0.TangentVector>, @thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector // user: %232
%231 = metatype $@thin Optional<S<Double, Double>>.TangentVector.Type // user: %232
%232 = apply %230<S<Double, Double>>(%226, %227, %231) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@in Optional<τ_0_0.TangentVector>, @thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
dealloc_stack %227 : $*Optional<S<Double, Double>> // id: %233
%234 = load [take] %226 : $*Optional<S<Double, Double>>.TangentVector // users: %253, %244
dealloc_stack %226 : $*Optional<S<Double, Double>>.TangentVector // id: %235
debug_value %183 : $F<Double, Double>.TangentVector, let, name "n", argno 1 // id: %236
copy_addr %75 to %59 : $*Double // id: %237
%238 = copy_value %184 : $Optional<S<Double, Double>>.TangentVector // user: %256
%239 = copy_value %185 : $S<Double, Double> // user: %256
copy_addr %71 to %55 : $*Optional<Double>.TangentVector // id: %240
%241 = copy_value %188 : $Optional<S<Double, Double>>.TangentVector // user: %256
%242 = copy_value %189 : $S<Double, Double> // user: %256
copy_addr %67 to %51 : $*Optional<Double>.TangentVector // id: %243
%244 = copy_value %234 : $Optional<S<Double, Double>>.TangentVector // user: %256
destroy_value %184 : $Optional<S<Double, Double>>.TangentVector // id: %245
destroy_value %185 : $S<Double, Double> // id: %246
destroy_value %188 : $Optional<S<Double, Double>>.TangentVector // id: %247
destroy_value %189 : $S<Double, Double> // id: %248
destroy_value %192 : $Optional<S<Double, Double>>.TangentVector // id: %249
destroy_value %193 : $S<Double, Double> // id: %250
destroy_value %207 : $S<Double, Double> // id: %251
destroy_value %223 : $S<Double, Double> // id: %252
destroy_value %234 : $Optional<S<Double, Double>>.TangentVector // id: %253
switch_enum %196 : $_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb10__Pred__src_0_wrt_0, case #_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb10__Pred__src_0_wrt_0.bb8!enumelt: bb3 // id: %254
// %255 // user: %256
bb3(%255 : @owned $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb8__Pred__src_0_wrt_0, @callee_guaranteed (@inout Double) -> Double, @callee_guaranteed (@guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector)): // Preds: bb2
br bb4(%183 : $F<Double, Double>.TangentVector, %238 : $Optional<S<Double, Double>>.TangentVector, %239 : $S<Double, Double>, %186 : $Optional<Double>.TangentVector, %187 : $Double, %241 : $Optional<S<Double, Double>>.TangentVector, %242 : $S<Double, Double>, %190 : $Optional<Double>.TangentVector, %191 : $Double, %244 : $Optional<S<Double, Double>>.TangentVector, %255 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb8__Pred__src_0_wrt_0, @callee_guaranteed (@inout Double) -> Double, @callee_guaranteed (@guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector)) // id: %256
// %257 // user: %276
// %258 // users: %321, %315
// %259 // users: %322, %316
// %260 // user: %328
// %261 // user: %328
// %262 // users: %323, %318
// %263 // users: %324, %319
// %265 // user: %292
// %266 // users: %325, %271
// %267 // user: %268
bb4(%257 : $F<Double, Double>.TangentVector, %258 : @owned $Optional<S<Double, Double>>.TangentVector, %259 : @owned $S<Double, Double>, %260 : $Optional<Double>.TangentVector, %261 : $Double, %262 : @owned $Optional<S<Double, Double>>.TangentVector, %263 : @owned $S<Double, Double>, %264 : $Optional<Double>.TangentVector, %265 : $Double, %266 : @owned $Optional<S<Double, Double>>.TangentVector, %267 : @owned $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb8__Pred__src_0_wrt_0, @callee_guaranteed (@inout Double) -> Double, @callee_guaranteed (@guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector)): // Preds: bb3
(%268, %269, %270) = destructure_tuple %267 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb8__Pred__src_0_wrt_0, @callee_guaranteed (@inout Double) -> Double, @callee_guaranteed (@guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector) // users: %326, %288, %287, %272, %271
%271 = apply %270(%266) : $@callee_guaranteed (@guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector // user: %277
destroy_value %270 : $@callee_guaranteed (@guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector // id: %272
%273 = alloc_stack $F<Double, Double>.TangentVector // users: %286, %285, %280
%274 = alloc_stack $F<Double, Double>.TangentVector // users: %284, %281, %280, %276
%275 = alloc_stack $F<Double, Double>.TangentVector // users: %283, %282, %280, %277
store %257 to [trivial] %274 : $*F<Double, Double>.TangentVector // id: %276
store %271 to [trivial] %275 : $*F<Double, Double>.TangentVector // id: %277
%278 = witness_method $F<Double, Double>.TangentVector, #AdditiveArithmetic."+" : <Self where Self : AdditiveArithmetic> (Self.Type) -> (Self, Self) -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_0, @thick τ_0_0.Type) -> @out τ_0_0 // user: %280
%279 = metatype $@thick F<Double, Double>.TangentVector.Type // user: %280
%280 = apply %278<F<Double, Double>.TangentVector>(%273, %275, %274, %279) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_0, @thick τ_0_0.Type) -> @out τ_0_0
destroy_addr %274 : $*F<Double, Double>.TangentVector // id: %281
destroy_addr %275 : $*F<Double, Double>.TangentVector // id: %282
dealloc_stack %275 : $*F<Double, Double>.TangentVector // id: %283
dealloc_stack %274 : $*F<Double, Double>.TangentVector // id: %284
%285 = load [trivial] %273 : $*F<Double, Double>.TangentVector // users: %328, %313
dealloc_stack %273 : $*F<Double, Double>.TangentVector // id: %286
%287 = apply %269(%59) : $@callee_guaranteed (@inout Double) -> Double // user: %293
destroy_value %269 : $@callee_guaranteed (@inout Double) -> Double // id: %288
%289 = alloc_stack $Double // users: %302, %301, %296
%290 = alloc_stack $Double // users: %300, %297, %296, %292
%291 = alloc_stack $Double // users: %299, %298, %296, %293
store %265 to [trivial] %290 : $*Double // id: %292
store %287 to [trivial] %291 : $*Double // id: %293
%294 = witness_method $Double, #AdditiveArithmetic."+" : <Self where Self : AdditiveArithmetic> (Self.Type) -> (Self, Self) -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_0, @thick τ_0_0.Type) -> @out τ_0_0 // user: %296
%295 = metatype $@thick Double.Type // user: %296
%296 = apply %294<Double>(%289, %291, %290, %295) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_0, @thick τ_0_0.Type) -> @out τ_0_0
destroy_addr %290 : $*Double // id: %297
destroy_addr %291 : $*Double // id: %298
dealloc_stack %291 : $*Double // id: %299
dealloc_stack %290 : $*Double // id: %300
%301 = load [trivial] %289 : $*Double // user: %305
dealloc_stack %289 : $*Double // id: %302
%303 = alloc_stack $Optional<Double>.TangentVector // users: %312, %311, %309
%304 = alloc_stack $Optional<Double> // users: %310, %309, %306
%305 = enum $Optional<Double>, #Optional.some!enumelt, %301 : $Double // user: %306
store %305 to [trivial] %304 : $*Optional<Double> // id: %306
// function_ref Optional<A>.TangentVector.init(_:)
%307 = function_ref @$sSq16_DifferentiationAA14DifferentiableRzlE13TangentVectorVyADyx_GACQzSgcfC : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@in Optional<τ_0_0.TangentVector>, @thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector // user: %309
%308 = metatype $@thin Optional<Double>.TangentVector.Type // user: %309
%309 = apply %307<Double>(%303, %304, %308) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@in Optional<τ_0_0.TangentVector>, @thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
dealloc_stack %304 : $*Optional<Double> // id: %310
%311 = load [trivial] %303 : $*Optional<Double>.TangentVector // user: %328
dealloc_stack %303 : $*Optional<Double>.TangentVector // id: %312
debug_value %285 : $F<Double, Double>.TangentVector, let, name "n", argno 1 // id: %313
copy_addr %59 to %47 : $*Double // id: %314
%315 = copy_value %258 : $Optional<S<Double, Double>>.TangentVector // user: %328
%316 = copy_value %259 : $S<Double, Double> // user: %328
copy_addr %55 to %43 : $*Optional<Double>.TangentVector // id: %317
%318 = copy_value %262 : $Optional<S<Double, Double>>.TangentVector // user: %328
%319 = copy_value %263 : $S<Double, Double> // user: %328
copy_addr %51 to %39 : $*Optional<Double>.TangentVector // id: %320
destroy_value %258 : $Optional<S<Double, Double>>.TangentVector // id: %321
destroy_value %259 : $S<Double, Double> // id: %322
destroy_value %262 : $Optional<S<Double, Double>>.TangentVector // id: %323
destroy_value %263 : $S<Double, Double> // id: %324
destroy_value %266 : $Optional<S<Double, Double>>.TangentVector // id: %325
switch_enum %268 : $_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb8__Pred__src_0_wrt_0, case #_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb8__Pred__src_0_wrt_0.bb6!enumelt: bb5 // id: %326
// %327 // user: %328
bb5(%327 : @owned $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb6__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>)): // Preds: bb4
br bb6(%285 : $F<Double, Double>.TangentVector, %315 : $Optional<S<Double, Double>>.TangentVector, %316 : $S<Double, Double>, %260 : $Optional<Double>.TangentVector, %261 : $Double, %318 : $Optional<S<Double, Double>>.TangentVector, %319 : $S<Double, Double>, %311 : $Optional<Double>.TangentVector, %327 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb6__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>)) // id: %328
// %329 // users: %393, %378
// %330 // users: %384, %380
// %331 // users: %385, %381
// %332 // user: %393
// %333 // user: %393
// %334 // user: %386
// %335 // users: %387, %351
// %336 // user: %341
// %337 // user: %338
bb6(%329 : $F<Double, Double>.TangentVector, %330 : @owned $Optional<S<Double, Double>>.TangentVector, %331 : @owned $S<Double, Double>, %332 : $Optional<Double>.TangentVector, %333 : $Double, %334 : @owned $Optional<S<Double, Double>>.TangentVector, %335 : @owned $S<Double, Double>, %336 : $Optional<Double>.TangentVector, %337 : @owned $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb6__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>)): // Preds: bb5
(%338, %339) = destructure_tuple %337 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb6__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>) // users: %391, %348
%340 = alloc_stack $Optional<Double>.TangentVector // users: %346, %345, %344, %341
store %336 to [trivial] %340 : $*Optional<Double>.TangentVector // id: %341
%342 = witness_method $Optional<Double>.TangentVector, #AdditiveArithmetic."+=" : <Self where Self : AdditiveArithmetic> (Self.Type) -> (inout Self, Self) -> () : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@inout τ_0_0, @in_guaranteed τ_0_0, @thick τ_0_0.Type) -> () // user: %344
%343 = metatype $@thick Optional<Double>.TangentVector.Type // user: %344
%344 = apply %342<Optional<Double>.TangentVector>(%39, %340, %343) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@inout τ_0_0, @in_guaranteed τ_0_0, @thick τ_0_0.Type) -> ()
destroy_addr %340 : $*Optional<Double>.TangentVector // id: %345
dealloc_stack %340 : $*Optional<Double>.TangentVector // id: %346
// function_ref thunk for @escaping @callee_guaranteed (@unowned Double?<A>.TangentVector) -> (@owned S<Double, Double>)
%347 = function_ref @$sSq16_DifferentiationAA14DifferentiableRzlE13TangentVectorVySd_G15InternalPackage1SVyS2dGIegyo_AeIIegno_TR : $@convention(thin) (@in_guaranteed Optional<Double>.TangentVector, @guaranteed @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>) -> @owned S<Double, Double> // user: %348
%348 = partial_apply [callee_guaranteed] %347(%339) : $@convention(thin) (@in_guaranteed Optional<Double>.TangentVector, @guaranteed @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>) -> @owned S<Double, Double> // users: %350, %349
%349 = apply %348(%39) : $@callee_guaranteed (@in_guaranteed Optional<Double>.TangentVector) -> @owned S<Double, Double> // users: %388, %352
destroy_value %348 : $@callee_guaranteed (@in_guaranteed Optional<Double>.TangentVector) -> @owned S<Double, Double> // id: %350
%351 = copy_value %335 : $S<Double, Double> // user: %356
%352 = copy_value %349 : $S<Double, Double> // user: %357
%353 = alloc_stack $S<Double, Double> // users: %366, %365, %360
%354 = alloc_stack $S<Double, Double> // users: %364, %361, %360, %356
%355 = alloc_stack $S<Double, Double> // users: %363, %362, %360, %357
store %351 to [init] %354 : $*S<Double, Double> // id: %356
store %352 to [init] %355 : $*S<Double, Double> // id: %357
%358 = witness_method $S<Double, Double>, #AdditiveArithmetic."+" : <Self where Self : AdditiveArithmetic> (Self.Type) -> (Self, Self) -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_0, @thick τ_0_0.Type) -> @out τ_0_0 // user: %360
%359 = metatype $@thick S<Double, Double>.Type // user: %360
%360 = apply %358<S<Double, Double>>(%353, %355, %354, %359) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_0, @thick τ_0_0.Type) -> @out τ_0_0
destroy_addr %354 : $*S<Double, Double> // id: %361
destroy_addr %355 : $*S<Double, Double> // id: %362
dealloc_stack %355 : $*S<Double, Double> // id: %363
dealloc_stack %354 : $*S<Double, Double> // id: %364
%365 = load [take] %353 : $*S<Double, Double> // users: %389, %367
dealloc_stack %353 : $*S<Double, Double> // id: %366
%367 = copy_value %365 : $S<Double, Double> // user: %370
%368 = alloc_stack $Optional<S<Double, Double>>.TangentVector // users: %377, %376, %374
%369 = alloc_stack $Optional<S<Double, Double>> // users: %375, %374, %371
%370 = enum $Optional<S<Double, Double>>, #Optional.some!enumelt, %367 : $S<Double, Double> // user: %371
store %370 to [init] %369 : $*Optional<S<Double, Double>> // id: %371
// function_ref Optional<A>.TangentVector.init(_:)
%372 = function_ref @$sSq16_DifferentiationAA14DifferentiableRzlE13TangentVectorVyADyx_GACQzSgcfC : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@in Optional<τ_0_0.TangentVector>, @thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector // user: %374
%373 = metatype $@thin Optional<S<Double, Double>>.TangentVector.Type // user: %374
%374 = apply %372<S<Double, Double>>(%368, %369, %373) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@in Optional<τ_0_0.TangentVector>, @thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
dealloc_stack %369 : $*Optional<S<Double, Double>> // id: %375
%376 = load [take] %368 : $*Optional<S<Double, Double>>.TangentVector // users: %390, %383
dealloc_stack %368 : $*Optional<S<Double, Double>>.TangentVector // id: %377
debug_value %329 : $F<Double, Double>.TangentVector, let, name "n", argno 1 // id: %378
copy_addr %47 to %35 : $*Double // id: %379
%380 = copy_value %330 : $Optional<S<Double, Double>>.TangentVector // user: %393
%381 = copy_value %331 : $S<Double, Double> // user: %393
copy_addr %43 to %31 : $*Optional<Double>.TangentVector // id: %382
%383 = copy_value %376 : $Optional<S<Double, Double>>.TangentVector // user: %393
destroy_value %330 : $Optional<S<Double, Double>>.TangentVector // id: %384
destroy_value %331 : $S<Double, Double> // id: %385
destroy_value %334 : $Optional<S<Double, Double>>.TangentVector // id: %386
destroy_value %335 : $S<Double, Double> // id: %387
destroy_value %349 : $S<Double, Double> // id: %388
destroy_value %365 : $S<Double, Double> // id: %389
destroy_value %376 : $Optional<S<Double, Double>>.TangentVector // id: %390
switch_enum %338 : $_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb6__Pred__src_0_wrt_0, case #_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb6__Pred__src_0_wrt_0.bb4!enumelt: bb7 // id: %391
// %392 // user: %393
bb7(%392 : @owned $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb4__Pred__src_0_wrt_0, @callee_guaranteed (@inout Double) -> Double, @callee_guaranteed (@guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector)): // Preds: bb6
br bb8(%329 : $F<Double, Double>.TangentVector, %380 : $Optional<S<Double, Double>>.TangentVector, %381 : $S<Double, Double>, %332 : $Optional<Double>.TangentVector, %333 : $Double, %383 : $Optional<S<Double, Double>>.TangentVector, %392 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb4__Pred__src_0_wrt_0, @callee_guaranteed (@inout Double) -> Double, @callee_guaranteed (@guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector)) // id: %393
// %394 // user: %409
// %395 // users: %451, %448
// %396 // users: %452, %449
// %398 // user: %425
// %399 // users: %453, %404
// %400 // user: %401
bb8(%394 : $F<Double, Double>.TangentVector, %395 : @owned $Optional<S<Double, Double>>.TangentVector, %396 : @owned $S<Double, Double>, %397 : $Optional<Double>.TangentVector, %398 : $Double, %399 : @owned $Optional<S<Double, Double>>.TangentVector, %400 : @owned $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb4__Pred__src_0_wrt_0, @callee_guaranteed (@inout Double) -> Double, @callee_guaranteed (@guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector)): // Preds: bb7
(%401, %402, %403) = destructure_tuple %400 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb4__Pred__src_0_wrt_0, @callee_guaranteed (@inout Double) -> Double, @callee_guaranteed (@guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector) // users: %454, %421, %420, %405, %404
%404 = apply %403(%399) : $@callee_guaranteed (@guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector // user: %410
destroy_value %403 : $@callee_guaranteed (@guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector // id: %405
%406 = alloc_stack $F<Double, Double>.TangentVector // users: %419, %418, %413
%407 = alloc_stack $F<Double, Double>.TangentVector // users: %417, %414, %413, %409
%408 = alloc_stack $F<Double, Double>.TangentVector // users: %416, %415, %413, %410
store %394 to [trivial] %407 : $*F<Double, Double>.TangentVector // id: %409
store %404 to [trivial] %408 : $*F<Double, Double>.TangentVector // id: %410
%411 = witness_method $F<Double, Double>.TangentVector, #AdditiveArithmetic."+" : <Self where Self : AdditiveArithmetic> (Self.Type) -> (Self, Self) -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_0, @thick τ_0_0.Type) -> @out τ_0_0 // user: %413
%412 = metatype $@thick F<Double, Double>.TangentVector.Type // user: %413
%413 = apply %411<F<Double, Double>.TangentVector>(%406, %408, %407, %412) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_0, @thick τ_0_0.Type) -> @out τ_0_0
destroy_addr %407 : $*F<Double, Double>.TangentVector // id: %414
destroy_addr %408 : $*F<Double, Double>.TangentVector // id: %415
dealloc_stack %408 : $*F<Double, Double>.TangentVector // id: %416
dealloc_stack %407 : $*F<Double, Double>.TangentVector // id: %417
%418 = load [trivial] %406 : $*F<Double, Double>.TangentVector // users: %456, %446
dealloc_stack %406 : $*F<Double, Double>.TangentVector // id: %419
%420 = apply %402(%35) : $@callee_guaranteed (@inout Double) -> Double // user: %426
destroy_value %402 : $@callee_guaranteed (@inout Double) -> Double // id: %421
%422 = alloc_stack $Double // users: %435, %434, %429
%423 = alloc_stack $Double // users: %433, %430, %429, %425
%424 = alloc_stack $Double // users: %432, %431, %429, %426
store %398 to [trivial] %423 : $*Double // id: %425
store %420 to [trivial] %424 : $*Double // id: %426
%427 = witness_method $Double, #AdditiveArithmetic."+" : <Self where Self : AdditiveArithmetic> (Self.Type) -> (Self, Self) -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_0, @thick τ_0_0.Type) -> @out τ_0_0 // user: %429
%428 = metatype $@thick Double.Type // user: %429
%429 = apply %427<Double>(%422, %424, %423, %428) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_0, @thick τ_0_0.Type) -> @out τ_0_0
destroy_addr %423 : $*Double // id: %430
destroy_addr %424 : $*Double // id: %431
dealloc_stack %424 : $*Double // id: %432
dealloc_stack %423 : $*Double // id: %433
%434 = load [trivial] %422 : $*Double // user: %438
dealloc_stack %422 : $*Double // id: %435
%436 = alloc_stack $Optional<Double>.TangentVector // users: %445, %444, %442
%437 = alloc_stack $Optional<Double> // users: %443, %442, %439
%438 = enum $Optional<Double>, #Optional.some!enumelt, %434 : $Double // user: %439
store %438 to [trivial] %437 : $*Optional<Double> // id: %439
// function_ref Optional<A>.TangentVector.init(_:)
%440 = function_ref @$sSq16_DifferentiationAA14DifferentiableRzlE13TangentVectorVyADyx_GACQzSgcfC : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@in Optional<τ_0_0.TangentVector>, @thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector // user: %442
%441 = metatype $@thin Optional<Double>.TangentVector.Type // user: %442
%442 = apply %440<Double>(%436, %437, %441) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@in Optional<τ_0_0.TangentVector>, @thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
dealloc_stack %437 : $*Optional<Double> // id: %443
%444 = load [trivial] %436 : $*Optional<Double>.TangentVector // user: %456
dealloc_stack %436 : $*Optional<Double>.TangentVector // id: %445
debug_value %418 : $F<Double, Double>.TangentVector, let, name "n", argno 1 // id: %446
copy_addr %35 to %27 : $*Double // id: %447
%448 = copy_value %395 : $Optional<S<Double, Double>>.TangentVector // user: %456
%449 = copy_value %396 : $S<Double, Double> // user: %456
copy_addr %31 to %23 : $*Optional<Double>.TangentVector // id: %450
destroy_value %395 : $Optional<S<Double, Double>>.TangentVector // id: %451
destroy_value %396 : $S<Double, Double> // id: %452
destroy_value %399 : $Optional<S<Double, Double>>.TangentVector // id: %453
switch_enum %401 : $_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb4__Pred__src_0_wrt_0, case #_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb4__Pred__src_0_wrt_0.bb2!enumelt: bb9 // id: %454
// %455 // user: %456
bb9(%455 : @owned $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb2__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>)): // Preds: bb8
br bb10(%418 : $F<Double, Double>.TangentVector, %448 : $Optional<S<Double, Double>>.TangentVector, %449 : $S<Double, Double>, %444 : $Optional<Double>.TangentVector, %455 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb2__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>)) // id: %456
// %457 // users: %512, %502
// %458 // user: %505
// %459 // users: %506, %475
// %460 // user: %465
// %461 // user: %462
bb10(%457 : $F<Double, Double>.TangentVector, %458 : @owned $Optional<S<Double, Double>>.TangentVector, %459 : @owned $S<Double, Double>, %460 : $Optional<Double>.TangentVector, %461 : @owned $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb2__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>)): // Preds: bb9
(%462, %463) = destructure_tuple %461 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb2__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>) // users: %510, %472
%464 = alloc_stack $Optional<Double>.TangentVector // users: %470, %469, %468, %465
store %460 to [trivial] %464 : $*Optional<Double>.TangentVector // id: %465
%466 = witness_method $Optional<Double>.TangentVector, #AdditiveArithmetic."+=" : <Self where Self : AdditiveArithmetic> (Self.Type) -> (inout Self, Self) -> () : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@inout τ_0_0, @in_guaranteed τ_0_0, @thick τ_0_0.Type) -> () // user: %468
%467 = metatype $@thick Optional<Double>.TangentVector.Type // user: %468
%468 = apply %466<Optional<Double>.TangentVector>(%23, %464, %467) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@inout τ_0_0, @in_guaranteed τ_0_0, @thick τ_0_0.Type) -> ()
destroy_addr %464 : $*Optional<Double>.TangentVector // id: %469
dealloc_stack %464 : $*Optional<Double>.TangentVector // id: %470
// function_ref thunk for @escaping @callee_guaranteed (@unowned Double?<A>.TangentVector) -> (@owned S<Double, Double>)
%471 = function_ref @$sSq16_DifferentiationAA14DifferentiableRzlE13TangentVectorVySd_G15InternalPackage1SVyS2dGIegyo_AeIIegno_TR : $@convention(thin) (@in_guaranteed Optional<Double>.TangentVector, @guaranteed @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>) -> @owned S<Double, Double> // user: %472
%472 = partial_apply [callee_guaranteed] %471(%463) : $@convention(thin) (@in_guaranteed Optional<Double>.TangentVector, @guaranteed @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>) -> @owned S<Double, Double> // users: %474, %473
%473 = apply %472(%23) : $@callee_guaranteed (@in_guaranteed Optional<Double>.TangentVector) -> @owned S<Double, Double> // users: %507, %476
destroy_value %472 : $@callee_guaranteed (@in_guaranteed Optional<Double>.TangentVector) -> @owned S<Double, Double> // id: %474
%475 = copy_value %459 : $S<Double, Double> // user: %480
%476 = copy_value %473 : $S<Double, Double> // user: %481
%477 = alloc_stack $S<Double, Double> // users: %490, %489, %484
%478 = alloc_stack $S<Double, Double> // users: %488, %485, %484, %480
%479 = alloc_stack $S<Double, Double> // users: %487, %486, %484, %481
store %475 to [init] %478 : $*S<Double, Double> // id: %480
store %476 to [init] %479 : $*S<Double, Double> // id: %481
%482 = witness_method $S<Double, Double>, #AdditiveArithmetic."+" : <Self where Self : AdditiveArithmetic> (Self.Type) -> (Self, Self) -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_0, @thick τ_0_0.Type) -> @out τ_0_0 // user: %484
%483 = metatype $@thick S<Double, Double>.Type // user: %484
%484 = apply %482<S<Double, Double>>(%477, %479, %478, %483) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_0, @thick τ_0_0.Type) -> @out τ_0_0
destroy_addr %478 : $*S<Double, Double> // id: %485
destroy_addr %479 : $*S<Double, Double> // id: %486
dealloc_stack %479 : $*S<Double, Double> // id: %487
dealloc_stack %478 : $*S<Double, Double> // id: %488
%489 = load [take] %477 : $*S<Double, Double> // users: %508, %491
dealloc_stack %477 : $*S<Double, Double> // id: %490
%491 = copy_value %489 : $S<Double, Double> // user: %494
%492 = alloc_stack $Optional<S<Double, Double>>.TangentVector // users: %501, %500, %498
%493 = alloc_stack $Optional<S<Double, Double>> // users: %499, %498, %495
%494 = enum $Optional<S<Double, Double>>, #Optional.some!enumelt, %491 : $S<Double, Double> // user: %495
store %494 to [init] %493 : $*Optional<S<Double, Double>> // id: %495
// function_ref Optional<A>.TangentVector.init(_:)
%496 = function_ref @$sSq16_DifferentiationAA14DifferentiableRzlE13TangentVectorVyADyx_GACQzSgcfC : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@in Optional<τ_0_0.TangentVector>, @thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector // user: %498
%497 = metatype $@thin Optional<S<Double, Double>>.TangentVector.Type // user: %498
%498 = apply %496<S<Double, Double>>(%492, %493, %497) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@in Optional<τ_0_0.TangentVector>, @thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
dealloc_stack %493 : $*Optional<S<Double, Double>> // id: %499
%500 = load [take] %492 : $*Optional<S<Double, Double>>.TangentVector // users: %509, %504
dealloc_stack %492 : $*Optional<S<Double, Double>>.TangentVector // id: %501
debug_value %457 : $F<Double, Double>.TangentVector, let, name "n", argno 1 // id: %502
copy_addr %27 to %19 : $*Double // id: %503
%504 = copy_value %500 : $Optional<S<Double, Double>>.TangentVector // user: %512
destroy_value %458 : $Optional<S<Double, Double>>.TangentVector // id: %505
destroy_value %459 : $S<Double, Double> // id: %506
destroy_value %473 : $S<Double, Double> // id: %507
destroy_value %489 : $S<Double, Double> // id: %508
destroy_value %500 : $Optional<S<Double, Double>>.TangentVector // id: %509
switch_enum %462 : $_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb2__Pred__src_0_wrt_0, case #_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb2__Pred__src_0_wrt_0.bb0!enumelt: bb11 // id: %510
// %511 // user: %512
bb11(%511 : @owned $(_: @callee_guaranteed (@guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector)): // Preds: bb10
br bb12(%457 : $F<Double, Double>.TangentVector, %504 : $Optional<S<Double, Double>>.TangentVector, %511 : $(_: @callee_guaranteed (@guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector)) // id: %512
// %513 // user: %522
// %514 // users: %538, %517
// %515 // user: %516
bb12(%513 : $F<Double, Double>.TangentVector, %514 : @owned $Optional<S<Double, Double>>.TangentVector, %515 : @owned $(_: @callee_guaranteed (@guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector)): // Preds: bb11
%516 = destructure_tuple %515 : $(_: @callee_guaranteed (@guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector) // users: %518, %517
%517 = apply %516(%514) : $@callee_guaranteed (@guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector // user: %523
destroy_value %516 : $@callee_guaranteed (@guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector // id: %518
%519 = alloc_stack $F<Double, Double>.TangentVector // users: %532, %531, %526
%520 = alloc_stack $F<Double, Double>.TangentVector // users: %530, %527, %526, %522
%521 = alloc_stack $F<Double, Double>.TangentVector // users: %529, %528, %526, %523
store %513 to [trivial] %520 : $*F<Double, Double>.TangentVector // id: %522
store %517 to [trivial] %521 : $*F<Double, Double>.TangentVector // id: %523
%524 = witness_method $F<Double, Double>.TangentVector, #AdditiveArithmetic."+" : <Self where Self : AdditiveArithmetic> (Self.Type) -> (Self, Self) -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_0, @thick τ_0_0.Type) -> @out τ_0_0 // user: %526
%525 = metatype $@thick F<Double, Double>.TangentVector.Type // user: %526
%526 = apply %524<F<Double, Double>.TangentVector>(%519, %521, %520, %525) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_0, @thick τ_0_0.Type) -> @out τ_0_0
destroy_addr %520 : $*F<Double, Double>.TangentVector // id: %527
destroy_addr %521 : $*F<Double, Double>.TangentVector // id: %528
dealloc_stack %521 : $*F<Double, Double>.TangentVector // id: %529
dealloc_stack %520 : $*F<Double, Double>.TangentVector // id: %530
%531 = load [trivial] %519 : $*F<Double, Double>.TangentVector // users: %577, %537
dealloc_stack %519 : $*F<Double, Double>.TangentVector // id: %532
%533 = load [trivial] %19 : $*Double
%534 = witness_method $Double, #AdditiveArithmetic.zero!getter : <Self where Self : AdditiveArithmetic> (Self.Type) -> () -> Self : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0 // user: %536
%535 = metatype $@thick Double.Type // user: %536
%536 = apply %534<Double>(%19, %535) : $@convention(witness_method: AdditiveArithmetic) <τ_0_0 where τ_0_0 : AdditiveArithmetic> (@thick τ_0_0.Type) -> @out τ_0_0
debug_value %531 : $F<Double, Double>.TangentVector, let, name "n", argno 1 // id: %537
destroy_value %514 : $Optional<S<Double, Double>>.TangentVector // id: %538
destroy_addr %75 : $*Double // id: %539
dealloc_stack %75 : $*Double // id: %540
destroy_addr %71 : $*Optional<Double>.TangentVector // id: %541
dealloc_stack %71 : $*Optional<Double>.TangentVector // id: %542
destroy_addr %67 : $*Optional<Double>.TangentVector // id: %543
dealloc_stack %67 : $*Optional<Double>.TangentVector // id: %544
destroy_addr %63 : $*Optional<Double>.TangentVector // id: %545
dealloc_stack %63 : $*Optional<Double>.TangentVector // id: %546
destroy_addr %59 : $*Double // id: %547
dealloc_stack %59 : $*Double // id: %548
destroy_addr %55 : $*Optional<Double>.TangentVector // id: %549
dealloc_stack %55 : $*Optional<Double>.TangentVector // id: %550
destroy_addr %51 : $*Optional<Double>.TangentVector // id: %551
dealloc_stack %51 : $*Optional<Double>.TangentVector // id: %552
destroy_addr %47 : $*Double // id: %553
dealloc_stack %47 : $*Double // id: %554
destroy_addr %43 : $*Optional<Double>.TangentVector // id: %555
dealloc_stack %43 : $*Optional<Double>.TangentVector // id: %556
destroy_addr %39 : $*Optional<Double>.TangentVector // id: %557
dealloc_stack %39 : $*Optional<Double>.TangentVector // id: %558
destroy_addr %35 : $*Double // id: %559
dealloc_stack %35 : $*Double // id: %560
destroy_addr %31 : $*Optional<Double>.TangentVector // id: %561
dealloc_stack %31 : $*Optional<Double>.TangentVector // id: %562
destroy_addr %27 : $*Double // id: %563
dealloc_stack %27 : $*Double // id: %564
destroy_addr %23 : $*Optional<Double>.TangentVector // id: %565
dealloc_stack %23 : $*Optional<Double>.TangentVector // id: %566
destroy_addr %19 : $*Double // id: %567
dealloc_stack %19 : $*Double // id: %568
destroy_addr %15 : $*Double // id: %569
dealloc_stack %15 : $*Double // id: %570
destroy_addr %11 : $*Optional<Double>.TangentVector // id: %571
dealloc_stack %11 : $*Optional<Double>.TangentVector // id: %572
destroy_addr %7 : $*Optional<Double>.TangentVector // id: %573
dealloc_stack %7 : $*Optional<Double>.TangentVector // id: %574
destroy_addr %3 : $*Optional<Double>.TangentVector // id: %575
dealloc_stack %3 : $*Optional<Double>.TangentVector // id: %576
return %531 : $F<Double, Double>.TangentVector // id: %577
} // end sil function '$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tFTJpSpSr' Here is the optimized code on input of Input SIL// pullback of x #1 (n:) in A.testA()
sil private @$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tFTJpSpSr : $@convention(thin) (Double, @in _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb12__Pred__src_0_wrt_0, @owned @callee_guaranteed (@inout Double) -> Double) -> F<Double, Double>.TangentVector {
[%1: noescape v**, read **, write **, copy **, destroy **]
[%2: noescape v**, read v**.c*.v**, write v**.c*.v**, copy v**.c*.v**, destroy v**.c*.v**]
[global: read,write,copy,destroy,allocate,deinit_barrier]
// %0 // users: %56, %55
// %1 // user: %15
// %2 // users: %61, %60
bb0(%0 : $Double, %1 : $*_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb12__Pred__src_0_wrt_0, %2 : $@callee_guaranteed (@inout Double) -> Double):
%3 = alloc_stack $_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb12__Pred__src_0_wrt_0 // users: %109, %108
%4 = alloc_stack $_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb12__Pred__src_0_wrt_0 // users: %108, %16
%5 = alloc_stack $Optional<S<Double, Double>>.TangentVector // users: %149, %150, %141, %292
%6 = alloc_stack $Optional<S<Double, Double>>.TangentVector // users: %207, %208, %199, %291
%7 = alloc_stack $Optional<S<Double, Double>>.TangentVector // users: %258, %259, %253, %290
%8 = alloc_stack $Array<Optional<Double>> // users: %131, %130, %289
%9 = alloc_stack $Optional<String> // users: %134, %133, %288
%10 = alloc_stack $Array<Optional<Double>> // users: %189, %188, %287
%11 = alloc_stack $Optional<String> // users: %192, %191, %286
%12 = alloc_stack $Array<Optional<Double>> // users: %243, %242, %285
%13 = alloc_stack $Optional<String> // users: %246, %245, %284
%14 = alloc_stack $_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb12__Pred__src_0_wrt_0 // users: %16, %17, %283, %15
copy_addr [take] %1 to [init] %14 : $*_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb12__Pred__src_0_wrt_0 // id: %15
copy_addr [take] %14 to [init] %4 : $*_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb12__Pred__src_0_wrt_0 // id: %16
%17 = load %14 : $*_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb12__Pred__src_0_wrt_0 // user: %110
%18 = alloc_stack $S<Double, Double> // users: %239, %238, %282
%19 = alloc_stack $S<Double, Double> // users: %185, %184, %281
%20 = alloc_stack $S<Double, Double> // users: %127, %126, %280
%21 = alloc_stack $S<Double, Double> // users: %106, %129, %132, %279
%22 = alloc_stack $S<Double, Double> // users: %95, %187, %190, %278
%23 = alloc_stack $S<Double, Double> // users: %84, %241, %244, %277
%24 = alloc_stack $Optional<Double>.TangentVector // users: %107, %27, %276
%25 = metatype $@thin Optional<Double>.TangentVector.Type // users: %233, %219, %179, %164, %121, %98, %87, %67, %54, %52, %50, %47, %45, %43, %41, %38, %36, %31, %29, %27
// function_ref static Optional<A>.TangentVector.zero.getter
%26 = function_ref @$sSq16_DifferentiationAA14DifferentiableRzlE13TangentVectorV4zeroADyx_GvgZ : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector // users: %101, %98, %90, %87, %77, %54, %52, %50, %47, %45, %43, %41, %38, %36, %31, %29, %27
%27 = apply %26<Double>(%24, %25) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
%28 = alloc_stack $Optional<Double>.TangentVector // users: %96, %29, %275
%29 = apply %26<Double>(%28, %25) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
%30 = alloc_stack $Optional<Double>.TangentVector // users: %85, %31, %274
%31 = apply %26<Double>(%30, %25) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
%32 = alloc_stack $Double, var, name "derivative of 'r' in scope at /Users/asl/Projects/swift-project/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/uncheckedBitCast/Tests/ReproducerTests/T.swift:7:13 (scope #12)" // users: %74, %59, %273, %60
%33 = integer_literal $Builtin.Int64, 0 // user: %34
%34 = builtin "sitofp_Int64_FPIEEE64"(%33 : $Builtin.Int64) : $Builtin.FPIEEE64 // users: %158, %213, %57
%35 = alloc_stack [lexical] $Optional<Double>.TangentVector // users: %36, %272
%36 = apply %26<Double>(%35, %25) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
%37 = alloc_stack $Optional<Double>.TangentVector // users: %38, %271
%38 = apply %26<Double>(%37, %25) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
%39 = alloc_stack $Double, var, name "derivative of 'r' in scope at /Users/asl/Projects/swift-project/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/uncheckedBitCast/Tests/ReproducerTests/T.swift:5:13 (scope #4)" // users: %201, %270, %210
%40 = alloc_stack [lexical] $Optional<Double>.TangentVector // users: %41, %269
%41 = apply %26<Double>(%40, %25) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
%42 = alloc_stack $Optional<Double>.TangentVector // users: %43, %268
%43 = apply %26<Double>(%42, %25) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
%44 = alloc_stack $Optional<Double>.TangentVector // users: %45, %267
%45 = apply %26<Double>(%44, %25) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
%46 = alloc_stack $Optional<Double>.TangentVector // users: %47, %266
%47 = apply %26<Double>(%46, %25) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
%48 = alloc_stack $Double, var, name "derivative of 'r' in scope at /Users/asl/Projects/swift-project/build/Ninja-RelWithDebInfoAssert/swift-macosx-arm64/bin/uncheckedBitCast/Tests/ReproducerTests/T.swift:6:13 (scope #8)" // users: %168, %143, %265, %155
%49 = alloc_stack [lexical] $Optional<Double>.TangentVector // users: %50, %264
%50 = apply %26<Double>(%49, %25) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
%51 = alloc_stack $Optional<Double>.TangentVector // users: %52, %263
%52 = apply %26<Double>(%51, %25) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
%53 = alloc_stack $Optional<Double>.TangentVector // users: %54, %262
%54 = apply %26<Double>(%53, %25) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
%55 = struct_extract %0 : $Double, #Double._value // user: %57
debug_value %0 : $Double // id: %56
%57 = builtin "fadd_FPIEEE64"(%34 : $Builtin.FPIEEE64, %55 : $Builtin.FPIEEE64) : $Builtin.FPIEEE64 // user: %58
%58 = struct $Double (%57 : $Builtin.FPIEEE64) // user: %59
store %58 to %32 : $*Double // id: %59
%60 = apply %2(%32) : $@callee_guaranteed (@inout Double) -> Double // user: %64
strong_release %2 : $@callee_guaranteed (@inout Double) -> Double // id: %61
%62 = alloc_stack $Optional<Double>.TangentVector // users: %69, %70, %67
%63 = alloc_stack $Optional<Double> // users: %65, %68, %67
%64 = enum $Optional<Double>, #Optional.some!enumelt, %60 : $Double // user: %65
store %64 to %63 : $*Optional<Double> // id: %65
// function_ref Optional<A>.TangentVector.init(_:)
%66 = function_ref @$sSq16_DifferentiationAA14DifferentiableRzlE13TangentVectorVyADyx_GACQzSgcfC : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@in Optional<τ_0_0.TangentVector>, @thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector // users: %251, %219, %197, %164, %139, %67
%67 = apply %66<Double>(%62, %63, %25) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@in Optional<τ_0_0.TangentVector>, @thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
dealloc_stack %63 : $*Optional<Double> // id: %68
%69 = load %62 : $*Optional<Double>.TangentVector // users: %114, %119
dealloc_stack %62 : $*Optional<Double>.TangentVector // id: %70
%71 = metatype $@thin F<Double, Double>.TangentVector.Type // users: %154, %73
// function_ref static F<>.TangentVector.zero.getter
%72 = function_ref @$s15InternalPackage1FVAA07AnotheraB01ZR_13TangentVector16_Differentiation14DifferentiablePQy_Rs_rlEAFV4zeroAKyxq__GvgZ : $@convention(method) <τ_0_0, τ_0_1 where τ_0_0 : E, τ_0_1 : Z, τ_0_1 == τ_0_1.TangentVector> (@thin F<τ_0_0, τ_0_1>.TangentVector.Type) -> F<τ_0_0, τ_0_1>.TangentVector // user: %73
%73 = apply %72<Double, Double>(%71) : $@convention(method) <τ_0_0, τ_0_1 where τ_0_0 : E, τ_0_1 : Z, τ_0_1 == τ_0_1.TangentVector> (@thin F<τ_0_0, τ_0_1>.TangentVector.Type) -> F<τ_0_0, τ_0_1>.TangentVector
%74 = load %32 : $*Double // user: %143
%75 = alloc_stack $Optional<S<Double, Double>>.TangentVector // users: %78, %77, %81
%76 = metatype $@thin Optional<S<Double, Double>>.TangentVector.Type // users: %251, %197, %139, %101, %90, %77
%77 = apply %26<S<Double, Double>>(%75, %76) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
%78 = struct_element_addr %75 : $*Optional<S<Double, Double>>.TangentVector, #Optional.TangentVector.value // user: %79
%79 = load %78 : $*Optional<S<Double, Double>> // user: %80
release_value %79 : $Optional<S<Double, Double>> // id: %80
dealloc_stack %75 : $*Optional<S<Double, Double>>.TangentVector // id: %81
%82 = metatype $@thin S<Double, Double>.Type // users: %106, %95, %84
// function_ref static S<>.zero.getter
%83 = function_ref @$s15InternalPackage1SVAAs18AdditiveArithmeticR_rlE4zeroACyxq_GvgZ : $@convention(method) <τ_0_0, τ_0_1 where τ_0_0 : E, τ_0_1 : AdditiveArithmetic> (@thin S<τ_0_0, τ_0_1>.Type) -> @out S<τ_0_0, τ_0_1> // users: %106, %95, %84
%84 = apply %83<Double, Double>(%23, %82) : $@convention(method) <τ_0_0, τ_0_1 where τ_0_0 : E, τ_0_1 : AdditiveArithmetic> (@thin S<τ_0_0, τ_0_1>.Type) -> @out S<τ_0_0, τ_0_1>
%85 = load %30 : $*Optional<Double>.TangentVector // user: %230
%86 = alloc_stack $Optional<Double>.TangentVector // users: %87, %88
%87 = apply %26<Double>(%86, %25) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
dealloc_stack %86 : $*Optional<Double>.TangentVector // id: %88
%89 = alloc_stack $Optional<S<Double, Double>>.TangentVector // users: %91, %90, %94
%90 = apply %26<S<Double, Double>>(%89, %76) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
%91 = struct_element_addr %89 : $*Optional<S<Double, Double>>.TangentVector, #Optional.TangentVector.value // user: %92
%92 = load %91 : $*Optional<S<Double, Double>> // user: %93
release_value %92 : $Optional<S<Double, Double>> // id: %93
dealloc_stack %89 : $*Optional<S<Double, Double>>.TangentVector // id: %94
%95 = apply %83<Double, Double>(%22, %82) : $@convention(method) <τ_0_0, τ_0_1 where τ_0_0 : E, τ_0_1 : AdditiveArithmetic> (@thin S<τ_0_0, τ_0_1>.Type) -> @out S<τ_0_0, τ_0_1>
%96 = load %28 : $*Optional<Double>.TangentVector // user: %176
%97 = alloc_stack $Optional<Double>.TangentVector // users: %98, %99
%98 = apply %26<Double>(%97, %25) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
dealloc_stack %97 : $*Optional<Double>.TangentVector // id: %99
%100 = alloc_stack $Optional<S<Double, Double>>.TangentVector // users: %102, %101, %105
%101 = apply %26<S<Double, Double>>(%100, %76) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
%102 = struct_element_addr %100 : $*Optional<S<Double, Double>>.TangentVector, #Optional.TangentVector.value // user: %103
%103 = load %102 : $*Optional<S<Double, Double>> // user: %104
release_value %103 : $Optional<S<Double, Double>> // id: %104
dealloc_stack %100 : $*Optional<S<Double, Double>>.TangentVector // id: %105
%106 = apply %83<Double, Double>(%21, %82) : $@convention(method) <τ_0_0, τ_0_1 where τ_0_0 : E, τ_0_1 : AdditiveArithmetic> (@thin S<τ_0_0, τ_0_1>.Type) -> @out S<τ_0_0, τ_0_1>
%107 = load %24 : $*Optional<Double>.TangentVector // user: %117
copy_addr [take] %4 to [init] %3 : $*_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb12__Pred__src_0_wrt_0 // id: %108
%109 = unchecked_take_enum_data_addr %3 : $*_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb12__Pred__src_0_wrt_0, #_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb12__Pred__src_0_wrt_0.bb10!enumelt
%110 = unchecked_enum_data %17 : $_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb12__Pred__src_0_wrt_0, #_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb12__Pred__src_0_wrt_0.bb10!enumelt // user: %111
%111 = unchecked_bitwise_cast %110 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb10__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>) to $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb10__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @out S<Double, Double>) // users: %112, %113
%112 = tuple_extract %111 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb10__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @out S<Double, Double>), 0 // user: %144
%113 = tuple_extract %111 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb10__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @out S<Double, Double>), 1 // users: %126, %128
debug_value %69 : $Optional<Double>.TangentVector // id: %114
%115 = alloc_stack $Optional<Double>.TangentVector // users: %122, %125, %121
%116 = alloc_stack $Optional<Double>.TangentVector // users: %124, %121, %117
store %107 to %116 : $*Optional<Double>.TangentVector // id: %117
%118 = alloc_stack $Optional<Double>.TangentVector // users: %123, %121, %119
store %69 to %118 : $*Optional<Double>.TangentVector // id: %119
// function_ref static Optional<A>.TangentVector.+ infix(_:_:)
%120 = function_ref @$sSq16_DifferentiationAA14DifferentiableRzlE13TangentVectorV1poiyADyx_GAF_AFtFZ : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@in_guaranteed Optional<τ_0_0>.TangentVector, @in_guaranteed Optional<τ_0_0>.TangentVector, @thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector // users: %233, %179, %121
%121 = apply %120<Double>(%115, %116, %118, %25) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@in_guaranteed Optional<τ_0_0>.TangentVector, @in_guaranteed Optional<τ_0_0>.TangentVector, @thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
%122 = load %115 : $*Optional<Double>.TangentVector // user: %126
dealloc_stack %118 : $*Optional<Double>.TangentVector // id: %123
dealloc_stack %116 : $*Optional<Double>.TangentVector // id: %124
dealloc_stack %115 : $*Optional<Double>.TangentVector // id: %125
%126 = apply %113(%20, %122) : $@callee_guaranteed (Optional<Double>.TangentVector) -> @out S<Double, Double>
%127 = load %20 : $*S<Double, Double> // user: %137
strong_release %113 : $@callee_guaranteed (Optional<Double>.TangentVector) -> @out S<Double, Double> // id: %128
%129 = struct_element_addr %21 : $*S<Double, Double>, #S.d // user: %130
copy_addr [take] %129 to [init] %8 : $*Array<Optional<Double>> // id: %130
release_value_addr %8 : $*Array<Optional<Double>> // id: %131
%132 = struct_element_addr %21 : $*S<Double, Double>, #S.n // user: %133
copy_addr [take] %132 to [init] %9 : $*Optional<String> // id: %133
release_value_addr %9 : $*Optional<String> // id: %134
%135 = alloc_stack $Optional<S<Double, Double>>.TangentVector // users: %141, %142, %139
%136 = alloc_stack $Optional<S<Double, Double>> // users: %138, %140, %139
%137 = enum $Optional<S<Double, Double>>, #Optional.some!enumelt, %127 : $S<Double, Double> // user: %138
store %137 to %136 : $*Optional<S<Double, Double>> // id: %138
%139 = apply %66<S<Double, Double>>(%135, %136, %76) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@in Optional<τ_0_0.TangentVector>, @thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
dealloc_stack %136 : $*Optional<S<Double, Double>> // id: %140
copy_addr [take] %135 to [init] %5 : $*Optional<S<Double, Double>>.TangentVector // id: %141
dealloc_stack %135 : $*Optional<S<Double, Double>>.TangentVector // id: %142
store %74 to %48 : $*Double // id: %143
%144 = unchecked_enum_data %112 : $_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb10__Pred__src_0_wrt_0, #_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb10__Pred__src_0_wrt_0.bb8!enumelt // user: %145
%145 = unchecked_bitwise_cast %144 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb8__Pred__src_0_wrt_0, @callee_guaranteed (@inout Double) -> Double, @callee_guaranteed (@guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector) to $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb8__Pred__src_0_wrt_0, @callee_guaranteed (@inout Double) -> Double, @callee_guaranteed (@in_guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector) // users: %146, %147, %148
%146 = tuple_extract %145 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb8__Pred__src_0_wrt_0, @callee_guaranteed (@inout Double) -> Double, @callee_guaranteed (@in_guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector), 0 // user: %169
%147 = tuple_extract %145 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb8__Pred__src_0_wrt_0, @callee_guaranteed (@inout Double) -> Double, @callee_guaranteed (@in_guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector), 1 // users: %156, %155
%148 = tuple_extract %145 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb8__Pred__src_0_wrt_0, @callee_guaranteed (@inout Double) -> Double, @callee_guaranteed (@in_guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector), 2 // users: %149, %151
%149 = apply %148(%5) : $@callee_guaranteed (@in_guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector
release_value_addr %5 : $*Optional<S<Double, Double>>.TangentVector // id: %150
strong_release %148 : $@callee_guaranteed (@in_guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector // id: %151
%152 = struct $F<Double, Double>.TangentVector () // users: %293, %261, %154, %154
// function_ref static F<>.TangentVector.+ infix(_:_:)
%153 = function_ref @$s15InternalPackage1FVAA07AnotheraB01ZR_13TangentVector16_Differentiation14DifferentiablePQy_Rs_rlEAFV1poiyAKyxq__GAM_AMtFZ : $@convention(method) <τ_0_0, τ_0_1 where τ_0_0 : E, τ_0_1 : Z, τ_0_1 == τ_0_1.TangentVector> (F<τ_0_0, τ_0_1>.TangentVector, F<τ_0_0, τ_0_1>.TangentVector, @thin F<τ_0_0, τ_0_1>.TangentVector.Type) -> F<τ_0_0, τ_0_1>.TangentVector // user: %154
%154 = apply %153<Double, Double>(%152, %152, %71) : $@convention(method) <τ_0_0, τ_0_1 where τ_0_0 : E, τ_0_1 : Z, τ_0_1 == τ_0_1.TangentVector> (F<τ_0_0, τ_0_1>.TangentVector, F<τ_0_0, τ_0_1>.TangentVector, @thin F<τ_0_0, τ_0_1>.TangentVector.Type) -> F<τ_0_0, τ_0_1>.TangentVector
%155 = apply %147(%48) : $@callee_guaranteed (@inout Double) -> Double // user: %157
strong_release %147 : $@callee_guaranteed (@inout Double) -> Double // id: %156
%157 = struct_extract %155 : $Double, #Double._value // user: %158
%158 = builtin "fadd_FPIEEE64"(%157 : $Builtin.FPIEEE64, %34 : $Builtin.FPIEEE64) : $Builtin.FPIEEE64 // user: %159
%159 = struct $Double (%158 : $Builtin.FPIEEE64) // user: %162
%160 = alloc_stack $Optional<Double>.TangentVector // users: %166, %167, %164
%161 = alloc_stack $Optional<Double> // users: %163, %165, %164
%162 = enum $Optional<Double>, #Optional.some!enumelt, %159 : $Double // user: %163
store %162 to %161 : $*Optional<Double> // id: %163
%164 = apply %66<Double>(%160, %161, %25) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@in Optional<τ_0_0.TangentVector>, @thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
dealloc_stack %161 : $*Optional<Double> // id: %165
%166 = load %160 : $*Optional<Double>.TangentVector // users: %173, %178
dealloc_stack %160 : $*Optional<Double>.TangentVector // id: %167
%168 = load %48 : $*Double // user: %201
%169 = unchecked_enum_data %146 : $_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb8__Pred__src_0_wrt_0, #_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb8__Pred__src_0_wrt_0.bb6!enumelt // user: %170
%170 = unchecked_bitwise_cast %169 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb6__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>) to $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb6__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @out S<Double, Double>) // users: %171, %172
%171 = tuple_extract %170 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb6__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @out S<Double, Double>), 0 // user: %202
%172 = tuple_extract %170 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb6__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @out S<Double, Double>), 1 // users: %184, %186
debug_value %166 : $Optional<Double>.TangentVector // id: %173
%174 = alloc_stack $Optional<Double>.TangentVector // users: %180, %183, %179
%175 = alloc_stack $Optional<Double>.TangentVector // users: %182, %179, %176
store %96 to %175 : $*Optional<Double>.TangentVector // id: %176
%177 = alloc_stack $Optional<Double>.TangentVector // users: %181, %179, %178
store %166 to %177 : $*Optional<Double>.TangentVector // id: %178
%179 = apply %120<Double>(%174, %175, %177, %25) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@in_guaranteed Optional<τ_0_0>.TangentVector, @in_guaranteed Optional<τ_0_0>.TangentVector, @thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
%180 = load %174 : $*Optional<Double>.TangentVector // user: %184
dealloc_stack %177 : $*Optional<Double>.TangentVector // id: %181
dealloc_stack %175 : $*Optional<Double>.TangentVector // id: %182
dealloc_stack %174 : $*Optional<Double>.TangentVector // id: %183
%184 = apply %172(%19, %180) : $@callee_guaranteed (Optional<Double>.TangentVector) -> @out S<Double, Double>
%185 = load %19 : $*S<Double, Double> // user: %195
strong_release %172 : $@callee_guaranteed (Optional<Double>.TangentVector) -> @out S<Double, Double> // id: %186
%187 = struct_element_addr %22 : $*S<Double, Double>, #S.d // user: %188
copy_addr [take] %187 to [init] %10 : $*Array<Optional<Double>> // id: %188
release_value_addr %10 : $*Array<Optional<Double>> // id: %189
%190 = struct_element_addr %22 : $*S<Double, Double>, #S.n // user: %191
copy_addr [take] %190 to [init] %11 : $*Optional<String> // id: %191
release_value_addr %11 : $*Optional<String> // id: %192
%193 = alloc_stack $Optional<S<Double, Double>>.TangentVector // users: %199, %200, %197
%194 = alloc_stack $Optional<S<Double, Double>> // users: %196, %198, %197
%195 = enum $Optional<S<Double, Double>>, #Optional.some!enumelt, %185 : $S<Double, Double> // user: %196
store %195 to %194 : $*Optional<S<Double, Double>> // id: %196
%197 = apply %66<S<Double, Double>>(%193, %194, %76) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@in Optional<τ_0_0.TangentVector>, @thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
dealloc_stack %194 : $*Optional<S<Double, Double>> // id: %198
copy_addr [take] %193 to [init] %6 : $*Optional<S<Double, Double>>.TangentVector // id: %199
dealloc_stack %193 : $*Optional<S<Double, Double>>.TangentVector // id: %200
store %168 to %39 : $*Double // id: %201
%202 = unchecked_enum_data %171 : $_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb6__Pred__src_0_wrt_0, #_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb6__Pred__src_0_wrt_0.bb4!enumelt // user: %203
%203 = unchecked_bitwise_cast %202 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb4__Pred__src_0_wrt_0, @callee_guaranteed (@inout Double) -> Double, @callee_guaranteed (@guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector) to $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb4__Pred__src_0_wrt_0, @callee_guaranteed (@inout Double) -> Double, @callee_guaranteed (@in_guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector) // users: %204, %205, %206
%204 = tuple_extract %203 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb4__Pred__src_0_wrt_0, @callee_guaranteed (@inout Double) -> Double, @callee_guaranteed (@in_guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector), 0 // user: %223
%205 = tuple_extract %203 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb4__Pred__src_0_wrt_0, @callee_guaranteed (@inout Double) -> Double, @callee_guaranteed (@in_guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector), 1 // users: %211, %210
%206 = tuple_extract %203 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb4__Pred__src_0_wrt_0, @callee_guaranteed (@inout Double) -> Double, @callee_guaranteed (@in_guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector), 2 // users: %207, %209
%207 = apply %206(%6) : $@callee_guaranteed (@in_guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector
release_value_addr %6 : $*Optional<S<Double, Double>>.TangentVector // id: %208
strong_release %206 : $@callee_guaranteed (@in_guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector // id: %209
%210 = apply %205(%39) : $@callee_guaranteed (@inout Double) -> Double // user: %212
strong_release %205 : $@callee_guaranteed (@inout Double) -> Double // id: %211
%212 = struct_extract %210 : $Double, #Double._value // user: %213
%213 = builtin "fadd_FPIEEE64"(%212 : $Builtin.FPIEEE64, %34 : $Builtin.FPIEEE64) : $Builtin.FPIEEE64 // user: %214
%214 = struct $Double (%213 : $Builtin.FPIEEE64) // user: %217
%215 = alloc_stack $Optional<Double>.TangentVector // users: %221, %222, %219
%216 = alloc_stack $Optional<Double> // users: %218, %220, %219
%217 = enum $Optional<Double>, #Optional.some!enumelt, %214 : $Double // user: %218
store %217 to %216 : $*Optional<Double> // id: %218
%219 = apply %66<Double>(%215, %216, %25) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@in Optional<τ_0_0.TangentVector>, @thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
dealloc_stack %216 : $*Optional<Double> // id: %220
%221 = load %215 : $*Optional<Double>.TangentVector // users: %227, %232
dealloc_stack %215 : $*Optional<Double>.TangentVector // id: %222
%223 = unchecked_enum_data %204 : $_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb4__Pred__src_0_wrt_0, #_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb4__Pred__src_0_wrt_0.bb2!enumelt // user: %224
%224 = unchecked_bitwise_cast %223 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb2__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>) to $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb2__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @out S<Double, Double>) // users: %225, %226
%225 = tuple_extract %224 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb2__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @out S<Double, Double>), 0 // users: %255, %260
%226 = tuple_extract %224 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb2__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @out S<Double, Double>), 1 // users: %238, %240
debug_value %221 : $Optional<Double>.TangentVector // id: %227
%228 = alloc_stack $Optional<Double>.TangentVector // users: %234, %237, %233
%229 = alloc_stack $Optional<Double>.TangentVector // users: %236, %233, %230
store %85 to %229 : $*Optional<Double>.TangentVector // id: %230
%231 = alloc_stack $Optional<Double>.TangentVector // users: %235, %233, %232
store %221 to %231 : $*Optional<Double>.TangentVector // id: %232
%233 = apply %120<Double>(%228, %229, %231, %25) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@in_guaranteed Optional<τ_0_0>.TangentVector, @in_guaranteed Optional<τ_0_0>.TangentVector, @thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
%234 = load %228 : $*Optional<Double>.TangentVector // user: %238
dealloc_stack %231 : $*Optional<Double>.TangentVector // id: %235
dealloc_stack %229 : $*Optional<Double>.TangentVector // id: %236
dealloc_stack %228 : $*Optional<Double>.TangentVector // id: %237
%238 = apply %226(%18, %234) : $@callee_guaranteed (Optional<Double>.TangentVector) -> @out S<Double, Double>
%239 = load %18 : $*S<Double, Double> // user: %249
strong_release %226 : $@callee_guaranteed (Optional<Double>.TangentVector) -> @out S<Double, Double> // id: %240
%241 = struct_element_addr %23 : $*S<Double, Double>, #S.d // user: %242
copy_addr [take] %241 to [init] %12 : $*Array<Optional<Double>> // id: %242
release_value_addr %12 : $*Array<Optional<Double>> // id: %243
%244 = struct_element_addr %23 : $*S<Double, Double>, #S.n // user: %245
copy_addr [take] %244 to [init] %13 : $*Optional<String> // id: %245
release_value_addr %13 : $*Optional<String> // id: %246
%247 = alloc_stack $Optional<S<Double, Double>>.TangentVector // users: %253, %254, %251
%248 = alloc_stack $Optional<S<Double, Double>> // users: %250, %252, %251
%249 = enum $Optional<S<Double, Double>>, #Optional.some!enumelt, %239 : $S<Double, Double> // user: %250
store %249 to %248 : $*Optional<S<Double, Double>> // id: %250
%251 = apply %66<S<Double, Double>>(%247, %248, %76) : $@convention(method) <τ_0_0 where τ_0_0 : Differentiable> (@in Optional<τ_0_0.TangentVector>, @thin Optional<τ_0_0>.TangentVector.Type) -> @out Optional<τ_0_0>.TangentVector
dealloc_stack %248 : $*Optional<S<Double, Double>> // id: %252
copy_addr [take] %247 to [init] %7 : $*Optional<S<Double, Double>>.TangentVector // id: %253
dealloc_stack %247 : $*Optional<S<Double, Double>>.TangentVector // id: %254
%255 = unchecked_enum_data %225 : $_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb2__Pred__src_0_wrt_0, #_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb2__Pred__src_0_wrt_0.bb0!enumelt // user: %256
%256 = unchecked_bitwise_cast %255 : $(_: @callee_guaranteed (@guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector) to $(_: @callee_guaranteed (@in_guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector) // user: %257
%257 = tuple_extract %256 : $(_: @callee_guaranteed (@in_guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector), 0 // user: %258
%258 = apply %257(%7) : $@callee_guaranteed (@in_guaranteed Optional<S<Double, Double>>.TangentVector) -> F<Double, Double>.TangentVector
release_value_addr %7 : $*Optional<S<Double, Double>>.TangentVector // id: %259
release_value %225 : $_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb2__Pred__src_0_wrt_0 // id: %260
debug_value %152 : $F<Double, Double>.TangentVector, let, name "n", argno 1 // id: %261
dealloc_stack %53 : $*Optional<Double>.TangentVector // id: %262
dealloc_stack %51 : $*Optional<Double>.TangentVector // id: %263
dealloc_stack %49 : $*Optional<Double>.TangentVector // id: %264
dealloc_stack %48 : $*Double // id: %265
dealloc_stack %46 : $*Optional<Double>.TangentVector // id: %266
dealloc_stack %44 : $*Optional<Double>.TangentVector // id: %267
dealloc_stack %42 : $*Optional<Double>.TangentVector // id: %268
dealloc_stack %40 : $*Optional<Double>.TangentVector // id: %269
dealloc_stack %39 : $*Double // id: %270
dealloc_stack %37 : $*Optional<Double>.TangentVector // id: %271
dealloc_stack %35 : $*Optional<Double>.TangentVector // id: %272
dealloc_stack %32 : $*Double // id: %273
dealloc_stack %30 : $*Optional<Double>.TangentVector // id: %274
dealloc_stack %28 : $*Optional<Double>.TangentVector // id: %275
dealloc_stack %24 : $*Optional<Double>.TangentVector // id: %276
dealloc_stack %23 : $*S<Double, Double> // id: %277
dealloc_stack %22 : $*S<Double, Double> // id: %278
dealloc_stack %21 : $*S<Double, Double> // id: %279
dealloc_stack %20 : $*S<Double, Double> // id: %280
dealloc_stack %19 : $*S<Double, Double> // id: %281
dealloc_stack %18 : $*S<Double, Double> // id: %282
dealloc_stack %14 : $*_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb12__Pred__src_0_wrt_0 // id: %283
dealloc_stack %13 : $*Optional<String> // id: %284
dealloc_stack %12 : $*Array<Optional<Double>> // id: %285
dealloc_stack %11 : $*Optional<String> // id: %286
dealloc_stack %10 : $*Array<Optional<Double>> // id: %287
dealloc_stack %9 : $*Optional<String> // id: %288
dealloc_stack %8 : $*Array<Optional<Double>> // id: %289
dealloc_stack %7 : $*Optional<S<Double, Double>>.TangentVector // id: %290
dealloc_stack %6 : $*Optional<S<Double, Double>>.TangentVector // id: %291
dealloc_stack %5 : $*Optional<S<Double, Double>>.TangentVector // id: %292
return %152 : $F<Double, Double>.TangentVector // id: %293
} // end sil function '$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tFTJpSpSr' Assertion is triggerred on: 111 = unchecked_bitwise_cast %110 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb10__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>) to $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb10__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @out S<Double, Double>) // users: %112, %113 Original raw SIL is as follows: // %181 // user: %182
bb1(%181 : @owned $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb10__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>)): // Preds: bb0
br bb2(%102 : $F<Double, Double>.TangentVector, %111 : $Optional<S<Double, Double>>.TangentVector, %118 : $S<Double, Double>, %124 : $Optional<Double>.TangentVector, %130 : $Double, %138 : $Optional<S<Double, Double>>.TangentVector, %145 : $S<Double, Double>, %151 : $Optional<Double>.TangentVector, %157 : $Double, %165 : $Optional<S<Double, Double>>.TangentVector, %172 : $S<Double, Double>, %96 : $Optional<Double>.TangentVector, %181 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb10__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>)) // id: %182
// %183 // users: %256, %236
// %184 // users: %245, %238
// %185 // users: %246, %239
// %186 // user: %256
// %187 // user: %256
// %188 // users: %247, %241
// %189 // users: %248, %242
// %190 // user: %256
// %191 // user: %256
// %192 // user: %249
// %193 // users: %250, %209
// %194 // user: %199
// %195 // user: %196
bb2(%183 : $F<Double, Double>.TangentVector, %184 : @owned $Optional<S<Double, Double>>.TangentVector, %185 : @owned $S<Double, Double>, %186 : $Optional<Double>.TangentVector, %187 : $Double, %188 : @owned $Optional<S<Double, Double>>.TangentVector, %189 : @owned $S<Double, Double>, %190 : $Optional<Double>.TangentVector, %191 : $Double, %192 : @owned $Optional<S<Double, Double>>.TangentVector, %193 : @owned $S<Double, Double>, %194 : $Optional<Double>.TangentVector, %195 : @owned $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb10__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>)): // Preds: bb1
(%196, %197) = destructure_tuple %195 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb10__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>) // users: %254, %206 After some optimizations we end with: %87 = unchecked_enum_data %1 : $_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb12__Pred__src_0_wrt_0, #_AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb12__Pred__src_0_wrt_0.bb10!enumelt // users: %89, %88
%88 = tuple_extract %87 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb10__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>), 0 // user: %117
%89 = tuple_extract %87 : $(predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb10__Pred__src_0_wrt_0, @callee_guaranteed (Optional<Double>.TangentVector) -> @owned S<Double, Double>), 1 // users: %103, %102 where the enum payload is: enum _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb12__Pred__src_0_wrt_0 {
case bb10((predecessor: _AD__$s15ReproducerTests1AC5testAyyKF1xL_1nSd15InternalPackage1FVyS2dG_tF_bb10__Pred__src_0_wrt_0, (Optional<Double>.TangentVector) -> S<Double, Double>))
} |
The test started to fail after 5e2144b Tagging @aschwaighofer |
Current workaround is to use |
Yes, if I run the above reduced example, or the original package, with As a side issue, I'm running into a runtime segfault with the original, unreduced package, now that the compilation succeeds. I'll investigate and post a separate issue if needed. Thanks for taking a look! |
Fixes swiftlang#71744 Cherry-picked from a63078f rdar://135227988
Fixes swiftlang#71744 Cherry-picked from a63078f rdar://135227988
Fixes swiftlang#71744 (cherry picked from commit a63078f)
Fixes swiftlang#71744 (cherry picked from commit a63078f) (cherry picked from commit 2250314)
Fixes swiftlang#71744 (cherry picked from commit a63078f)
Description
The attached code fails to compile with certain nightly toolchains when the test is run in Release mode. It compiles and runs successfully in Debug mode.
This requires two internal Packages in addition to the actual test file. As such, this reproducer has been archived and attached.
uncheckedBitCast.zip
Reproduction
Extract the attached file into a new directory and run
swift test
in release mode. For example:/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2024-01-30-a.xctoolchain/usr/bin/swift test -c release
Opening the enclosed attachment and building the test target in Release mode in Xcode will also work.
Upon building, this will generate about 50KB of SIL code as part of the error message (not attached). The test won't actually execute.
Expected behavior
The compilation should complete successfully, and the test should complete.
Environment
The 2024-01-30a and 2024-02-14a nightly toolchains generate this error message, but the 2024-01-22a toolchain does not.
Additional information
Stack trace (excluding the SIL-related error message):
Note that there are certain modifications to the code that will cause the compilation to succeed. For example, commenting out
r += n["b"]![1.0]!;
inT.swift
. All three+=
operations are required to generate this error.The text was updated successfully, but these errors were encountered: