@@ -1259,23 +1259,29 @@ void UseState::initializeLiveness(
12591259 << *livenessInstAndValue.first ;
12601260 liveness.print (llvm::dbgs ()));
12611261 }
1262+
1263+ auto updateForLivenessAccess = [&](BeginAccessInst *beginAccess,
1264+ const SmallBitVector &livenessMask) {
1265+ for (auto *endAccess : beginAccess->getEndAccesses ()) {
1266+ liveness.updateForUse (endAccess, livenessMask, false /* lifetime ending*/ );
1267+ }
1268+ };
12621269
12631270 for (auto livenessInstAndValue : nonconsumingUses) {
12641271 if (auto *lbi = dyn_cast<LoadBorrowInst>(livenessInstAndValue.first )) {
12651272 auto accessPathWithBase =
12661273 AccessPathWithBase::computeInScope (lbi->getOperand ());
12671274 if (auto *beginAccess =
12681275 dyn_cast_or_null<BeginAccessInst>(accessPathWithBase.base )) {
1269- for (auto *endAccess : beginAccess->getEndAccesses ()) {
1270- liveness.updateForUse (endAccess, livenessInstAndValue.second ,
1271- false /* lifetime ending*/ );
1272- }
1276+ updateForLivenessAccess (beginAccess, livenessInstAndValue.second );
12731277 } else {
12741278 for (auto *ebi : lbi->getEndBorrows ()) {
12751279 liveness.updateForUse (ebi, livenessInstAndValue.second ,
12761280 false /* lifetime ending*/ );
12771281 }
12781282 }
1283+ } else if (auto *bai = dyn_cast<BeginAccessInst>(livenessInstAndValue.first )) {
1284+ updateForLivenessAccess (bai, livenessInstAndValue.second );
12791285 } else {
12801286 liveness.updateForUse (livenessInstAndValue.first ,
12811287 livenessInstAndValue.second ,
0 commit comments