@@ -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