[AutoDiff upstream] Add differentiability_witness_function instruction. (#29765)

The `differentiability_witness_function` instruction looks up a
differentiability witness function (JVP, VJP, or transpose) for a referenced
function via SIL differentiability witnesses.

Add round-trip parsing/serialization and IRGen tests.

Notes:
- Differentiability witnesses for linear functions require more support.
  `differentiability_witness_function [transpose]` instructions do not yet
  have IRGen.
- Nothing currently generates `differentiability_witness_function` instructions.
  The differentiation transform does, but it hasn't been upstreamed yet.

Resolves TF-1141.
This commit is contained in:
Dan Zheng
2020-02-13 16:55:46 -08:00
committed by GitHub
parent 94983ce43c
commit a49428ca7c
22 changed files with 557 additions and 2 deletions

View File

@@ -875,6 +875,7 @@ InlineCost swift::instructionInlineCost(SILInstruction &I) {
case SILInstructionKind::SelectValueInst:
case SILInstructionKind::KeyPathInst:
case SILInstructionKind::GlobalValueInst:
case SILInstructionKind::DifferentiabilityWitnessFunctionInst:
#define COMMON_ALWAYS_OR_SOMETIMES_LOADABLE_CHECKED_REF_STORAGE(Name) \
case SILInstructionKind::Name##ToRefInst: \
case SILInstructionKind::RefTo##Name##Inst: \