@@ -315,9 +315,10 @@ SILType VJPEmitter::getNominalDeclLoweredType(NominalTypeDecl *nominal) {
315315  return  getLoweredType (nominalType);
316316}
317317
318- StructInst *VJPEmitter::buildPullbackValueStructValue (SILBasicBlock *origBB) {
319-   assert (origBB->getParent () == original);
320-   auto  loc = origBB->getParent ()->getLocation ();
318+ StructInst *VJPEmitter::buildPullbackValueStructValue (TermInst *termInst) {
319+   assert (termInst->getFunction () == original);
320+   auto  loc = RegularLocation::getAutoGeneratedLocation ();
321+   auto  origBB = termInst->getParent ();
321322  auto  *vjpBB = BBMap[origBB];
322323  auto  *pbStruct = pullbackInfo.getLinearMapStruct (origBB);
323324  auto  structLoweredTy = getNominalDeclLoweredType (pbStruct);
@@ -326,14 +327,15 @@ StructInst *VJPEmitter::buildPullbackValueStructValue(SILBasicBlock *origBB) {
326327    auto  *predEnumArg = vjpBB->getArguments ().back ();
327328    bbPullbackValues.insert (bbPullbackValues.begin (), predEnumArg);
328329  }
330+   getBuilder ().setCurrentDebugScope (getOpScope (termInst->getDebugScope ()));
329331  return  getBuilder ().createStruct (loc, structLoweredTy, bbPullbackValues);
330332}
331333
332334EnumInst *VJPEmitter::buildPredecessorEnumValue (SILBuilder &builder,
333335                                                SILBasicBlock *predBB,
334336                                                SILBasicBlock *succBB,
335337                                                SILValue pbStructVal) {
336-   auto  loc = pbStructVal. getLoc ();
338+   auto  loc = RegularLocation::getAutoGeneratedLocation ();
337339  auto  *succEnum = pullbackInfo.getBranchingTraceDecl (succBB);
338340  auto  enumLoweredTy = getNominalDeclLoweredType (succEnum);
339341  auto  *enumEltDecl =
@@ -361,7 +363,7 @@ void VJPEmitter::visitReturnInst(ReturnInst *ri) {
361363
362364  //  Build pullback struct value for original block.
363365  auto  *origExit = ri->getParent ();
364-   auto  *pbStructVal = buildPullbackValueStructValue (origExit );
366+   auto  *pbStructVal = buildPullbackValueStructValue (ri );
365367
366368  //  Get the value in the VJP corresponding to the original result.
367369  auto  *origRetInst = cast<ReturnInst>(origExit->getTerminator ());
@@ -416,7 +418,7 @@ void VJPEmitter::visitBranchInst(BranchInst *bi) {
416418  //  Build pullback struct value for original block.
417419  //  Build predecessor enum value for destination block.
418420  auto  *origBB = bi->getParent ();
419-   auto  *pbStructVal = buildPullbackValueStructValue (origBB );
421+   auto  *pbStructVal = buildPullbackValueStructValue (bi );
420422  auto  *enumVal = buildPredecessorEnumValue (getBuilder (), origBB,
421423                                            bi->getDestBB (), pbStructVal);
422424
@@ -433,7 +435,7 @@ void VJPEmitter::visitBranchInst(BranchInst *bi) {
433435
434436void  VJPEmitter::visitCondBranchInst (CondBranchInst *cbi) {
435437  //  Build pullback struct value for original block.
436-   auto  *pbStructVal = buildPullbackValueStructValue (cbi-> getParent () );
438+   auto  *pbStructVal = buildPullbackValueStructValue (cbi);
437439  //  Create a new `cond_br` instruction.
438440  getBuilder ().createCondBranch (
439441      cbi->getLoc (), getOpValue (cbi->getCondition ()),
@@ -443,7 +445,7 @@ void VJPEmitter::visitCondBranchInst(CondBranchInst *cbi) {
443445
444446void  VJPEmitter::visitSwitchEnumInstBase (SwitchEnumInstBase *sei) {
445447  //  Build pullback struct value for original block.
446-   auto  *pbStructVal = buildPullbackValueStructValue (sei-> getParent () );
448+   auto  *pbStructVal = buildPullbackValueStructValue (sei);
447449
448450  //  Create trampoline successor basic blocks.
449451  SmallVector<std::pair<EnumElementDecl *, SILBasicBlock *>, 4 > caseBBs;
@@ -483,7 +485,7 @@ void VJPEmitter::visitSwitchEnumAddrInst(SwitchEnumAddrInst *seai) {
483485
484486void  VJPEmitter::visitCheckedCastBranchInst (CheckedCastBranchInst *ccbi) {
485487  //  Build pullback struct value for original block.
486-   auto  *pbStructVal = buildPullbackValueStructValue (ccbi-> getParent () );
488+   auto  *pbStructVal = buildPullbackValueStructValue (ccbi);
487489  //  Create a new `checked_cast_branch` instruction.
488490  getBuilder ().createCheckedCastBranch (
489491      ccbi->getLoc (), ccbi->isExact (), getOpValue (ccbi->getOperand ()),
@@ -497,7 +499,7 @@ void VJPEmitter::visitCheckedCastBranchInst(CheckedCastBranchInst *ccbi) {
497499void  VJPEmitter::visitCheckedCastValueBranchInst (
498500    CheckedCastValueBranchInst *ccvbi) {
499501  //  Build pullback struct value for original block.
500-   auto  *pbStructVal = buildPullbackValueStructValue (ccvbi-> getParent () );
502+   auto  *pbStructVal = buildPullbackValueStructValue (ccvbi);
501503  //  Create a new `checked_cast_value_branch` instruction.
502504  getBuilder ().createCheckedCastValueBranch (
503505      ccvbi->getLoc (), getOpValue (ccvbi->getOperand ()),
@@ -511,7 +513,7 @@ void VJPEmitter::visitCheckedCastValueBranchInst(
511513void  VJPEmitter::visitCheckedCastAddrBranchInst (
512514    CheckedCastAddrBranchInst *ccabi) {
513515  //  Build pullback struct value for original block.
514-   auto  *pbStructVal = buildPullbackValueStructValue (ccabi-> getParent () );
516+   auto  *pbStructVal = buildPullbackValueStructValue (ccabi);
515517  //  Create a new `checked_cast_addr_branch` instruction.
516518  getBuilder ().createCheckedCastAddrBranch (
517519      ccabi->getLoc (), ccabi->getConsumptionKind (), getOpValue (ccabi->getSrc ()),
0 commit comments