Skip to content
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

[AutoDiff] Conform Optional to Differentiable. #32948

Merged
merged 2 commits into from
Jul 17, 2020

Conversation

dan-zheng
Copy link
Contributor

Make Optional conditionally conform to Differentiable when the Wrapped type does.

Optional.TangentVector is a wrapper around Wrapped.TangentVector?, following the design in the Differentiable Programming Manifesto.

Also, fix Array.TangentVector.zeroTangentVectorInitializer.


Resolves TF-1301.
Stepping stone towards differentiation support of optional-related operations: TF-1153.

Make `Optional` conditionally conform to `Differentiable` when the `Wrapped` type does.
`Optional.TangentVector` is a wrapper around `Wrapped.TangentVector?`.

Also, fix `Array.TangentVector.zeroTangentVectorInitializer`.

Resolves TF-1301.
@dan-zheng
Copy link
Contributor Author

cc @efremale

@dan-zheng dan-zheng requested review from rxwei and marcrasi July 17, 2020 08:08
}

public static var zero: Self {
return Self(.zero)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: it seems more efficient to use Optional.TangentVector(nil) as Optional.TangentVector.zero. We can explore the implications when working on differentiation support for Optional.

@dan-zheng
Copy link
Contributor Author

@swift-ci Please smoke test

@dan-zheng dan-zheng merged commit f3685f9 into swiftlang:master Jul 17, 2020
@dan-zheng dan-zheng deleted the differentiable-optional branch July 17, 2020 19:07
@shahmishal
Copy link
Member

We are seeing build failure on Swift CI, it might be related to this change.

https://ci.swift.org/job/oss-swift-package-linux-ubuntu-16_04/5328/console

07:40:40 ******************** TEST 'Swift(linux-x86_64) :: AutoDiff/validation-test/differentiable_protocol_requirements.swift' FAILED ********************
07:40:40 Script:
07:40:40 --
07:40:40 : 'RUN: at line 1';   rm -rf "/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/test-linux-x86_64/AutoDiff/validation-test/Output/differentiable_protocol_requirements.swift.tmp" && mkdir -p "/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/test-linux-x86_64/AutoDiff/validation-test/Output/differentiable_protocol_requirements.swift.tmp" && /home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/bin/swiftc -target x86_64-unknown-linux-gnu -toolchain-stdlib-rpath  -module-cache-path '/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/swift-test-results/x86_64-unknown-linux-gnu/clang-module-cache' -swift-version 4  -Xfrontend -ignore-module-source-info -O -module-cache-path '/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/swift-test-results/x86_64-unknown-linux-gnu/clang-module-cache' /home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/swift/test/AutoDiff/validation-test/differentiable_protocol_requirements.swift -o /home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/test-linux-x86_64/AutoDiff/validation-test/Output/differentiable_protocol_requirements.swift.tmp/a.out -module-name main  && echo /home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/test-linux-x86_64/AutoDiff/validation-test/Output/differentiable_protocol_requirements.swift.tmp/a.out && /usr/bin/env DYLD_LIBRARY_PATH='/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/lib/swift/linux/x86_64' LD_LIBRARY_PATH='/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/lib/swift/linux/x86_64:/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/libdispatch-linux-x86_64' SIMCTL_CHILD_DYLD_LIBRARY_PATH='/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/lib/swift/linux/x86_64'  /home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/test-linux-x86_64/AutoDiff/validation-test/Output/differentiable_protocol_requirements.swift.tmp/a.out
07:40:40 --
07:40:40 Exit Code: 254
07:40:40 
07:40:40 Command Output (stderr):
07:40:40 --
07:40:40 swift-frontend: /home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/swift/lib/SIL/IR/SILInstructions.cpp:2436: static swift::ConvertFunctionInst *swift::ConvertFunctionInst::create(swift::SILDebugLocation, swift::SILValue, swift::SILType, swift::SILFunction &, swift::SILOpenedArchetypesState &, bool): Assertion `opTI->isABICompatibleWith(resTI, F).isCompatible() && "Can not convert in between ABI incompatible function types"' failed.
07:40:40 Stack dump:
07:40:40 0.	Program arguments: /home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/bin/swift-frontend -frontend -c -primary-file /home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/swift/test/AutoDiff/validation-test/differentiable_protocol_requirements.swift -target x86_64-unknown-linux-gnu -disable-objc-interop -module-cache-path /home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/swift-test-results/x86_64-unknown-linux-gnu/clang-module-cache -swift-version 4 -O -ignore-module-source-info -module-name main -o /home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/tmp/differentiable_protocol_requirements-b9935d.o 
07:40:40 1.	Swift version 5.3-dev (LLVM e3586932cc1c511, Swift 71f6797c8fc2c27)
07:40:40 2.	While evaluating request ExecuteSILPipelineRequest(Run pipelines { PrepareOptimizationPasses, EarlyModulePasses, HighLevel,Function+EarlyLoopOpt, HighLevel,Module+StackPromote, Serialize, MidLevel,Function, ClosureSpecialize, LowLevel,Function, LateLoopOpt, SIL Debug Info Generator } on SIL for main.main)
07:40:40 3.	While running pass #17491 SILFunctionTransform "Devirtualizer" on SILFunction "@$s0131AD__$s4main11derivatives2at2in23DifferentiationUnittest7TrackedVySfG_A3HtAH_xmtAA12FunctionsOfXRzlFA2HcfU___vjp_src_0_wrt_0_4main12mnO04main04TestmN1XV_Tg5".
07:40:40  for expression at [/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/swift/test/AutoDiff/validation-test/differentiable_protocol_requirements.swift:104:30 - line:104:47] RangeText="{ x in F(x: x).x "
07:40:40  #0 0x000000000573a7f4 PrintStackTraceSignalHandler(void*) (/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/bin/swift-frontend+0x573a7f4)
07:40:40  #1 0x00000000057382f0 llvm::sys::RunSignalHandlers() (/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/bin/swift-frontend+0x57382f0)
07:40:40  #2 0x000000000573aaea SignalHandler(int) (/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/bin/swift-frontend+0x573aaea)
07:40:40  #3 0x00007ff57e877390 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x11390)
07:40:40  #4 0x00007ff57d1dc428 raise (/lib/x86_64-linux-gnu/libc.so.6+0x35428)
07:40:40  #5 0x00007ff57d1de02a abort (/lib/x86_64-linux-gnu/libc.so.6+0x3702a)
07:40:40  #6 0x00007ff57d1d4bd7 (/lib/x86_64-linux-gnu/libc.so.6+0x2dbd7)
07:40:40  #7 0x00007ff57d1d4c82 (/lib/x86_64-linux-gnu/libc.so.6+0x2dc82)
07:40:40  #8 0x0000000001144967 swift::ConvertFunctionInst::create(swift::SILDebugLocation, swift::SILValue, swift::SILType, swift::SILFunction&, swift::SILOpenedArchetypesState&, bool) (/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/bin/swift-frontend+0x1144967)
07:40:40  #9 0x0000000000ca0542 swift::castValueToABICompatibleType(swift::SILBuilder*, swift::SILLocation, swift::SILValue, swift::SILType, swift::SILType) (/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/bin/swift-frontend+0xca0542)
07:40:40 #10 0x0000000000c80b41 replaceApplySite(swift::SILBuilder&, swift::SILLocation, swift::ApplySite, swift::SILValue, swift::SubstitutionMap, llvm::ArrayRef<swift::SILValue>, swift::SILFunctionConventions, llvm::ArrayRef<swift::SILValue>) (/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/bin/swift-frontend+0xc80b41)
07:40:40 #11 0x0000000000c819b9 swift::tryDevirtualizeWitnessMethod(swift::ApplySite, swift::OptRemark::Emitter*) (/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/bin/swift-frontend+0xc819b9)
07:40:40 #12 0x0000000000c820dd swift::tryDevirtualizeApply(swift::ApplySite, swift::ClassHierarchyAnalysis*, swift::OptRemark::Emitter*) (/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/bin/swift-frontend+0xc820dd)
07:40:40 #13 0x0000000000b81ac2 (anonymous namespace)::Devirtualizer::run() (/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/bin/swift-frontend+0xb81ac2)
07:40:40 #14 0x0000000000abb564 swift::SILPassManager::runPassOnFunction(unsigned int, swift::SILFunction*) (/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/bin/swift-frontend+0xabb564)
07:40:40 #15 0x0000000000abc3fb swift::SILPassManager::runFunctionPasses(unsigned int, unsigned int) (/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/bin/swift-frontend+0xabc3fb)
07:40:40 #16 0x0000000000abf4ee swift::SILPassManager::execute() (/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/bin/swift-frontend+0xabf4ee)
07:40:40 #17 0x0000000000ab9788 swift::SILPassManager::executePassPipelinePlan(swift::SILPassPipelinePlan const&) (/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/bin/swift-frontend+0xab9788)
07:40:40 #18 0x0000000000ab974c swift::ExecuteSILPipelineRequest::evaluate(swift::Evaluator&, swift::SILPipelineExecutionDescriptor) const (/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/bin/swift-frontend+0xab974c)
07:40:40 #19 0x0000000000ad593b swift::SimpleRequest<swift::ExecuteSILPipelineRequest, std::tuple<> (swift::SILPipelineExecutionDescriptor), (swift::RequestFlags)1>::evaluateRequest(swift::ExecuteSILPipelineRequest const&, swift::Evaluator&) (/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/bin/swift-frontend+0xad593b)
07:40:40 #20 0x0000000000ac4641 llvm::Expected<swift::ExecuteSILPipelineRequest::OutputType> swift::Evaluator::getResultUncached<swift::ExecuteSILPipelineRequest>(swift::ExecuteSILPipelineRequest const&) (/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/bin/swift-frontend+0xac4641)
07:40:40 #21 0x0000000000ab9955 swift::executePassPipelinePlan(swift::SILModule*, swift::SILPassPipelinePlan const&, bool, swift::irgen::IRGenModule*) (/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/bin/swift-frontend+0xab9955)
07:40:40 #22 0x0000000000ac7588 swift::runSILOptimizationPasses(swift::SILModule&) (/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/bin/swift-frontend+0xac7588)
07:40:40 #23 0x00000000006838db swift::CompilerInstance::performSILProcessing(swift::SILModule*) (/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/bin/swift-frontend+0x6838db)
07:40:40 #24 0x000000000050e6ef performCompileStepsPostSILGen(swift::CompilerInstance&, std::unique_ptr<swift::SILModule, std::default_delete<swift::SILModule> >, llvm::PointerUnion<swift::ModuleDecl*, swift::SourceFile*>, swift::PrimarySpecificPaths const&, int&, swift::FrontendObserver*) (/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/bin/swift-frontend+0x50e6ef)
07:40:40 #25 0x00000000004ffd5d swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) (/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/bin/swift-frontend+0x4ffd5d)
07:40:40 #26 0x000000000047cf9b main (/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/bin/swift-frontend+0x47cf9b)
07:40:40 #27 0x00007ff57d1c7830 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x20830)
07:40:40 #28 0x000000000047ca59 _start (/home/buildnode/jenkins/workspace/oss-swift-package-linux-ubuntu-16_04/build/buildbot_linux/swift-linux-x86_64/bin/swift-frontend+0x47ca59)
07:40:40 
<unknown>:0: error: unable to execute command: Aborted
07:40:40 <unknown>:0: error: compile command failed due to signal 6 (use -v to see invocation)
07:40:40 
07:40:40 --
07:40:40 
07:40:40 ********************

@dan-zheng
Copy link
Contributor Author

Sorry about the test failure! I created #32981 to disable the test.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants