@@ -1257,23 +1257,29 @@ void UseState::initializeLiveness(
12571257 << *livenessInstAndValue.first ;
12581258 liveness.print (llvm::dbgs ()));
12591259 }
1260+
1261+ auto updateForLivenessAccess = [&](BeginAccessInst *beginAccess,
1262+ const SmallBitVector &livenessMask) {
1263+ for (auto *endAccess : beginAccess->getEndAccesses ()) {
1264+ liveness.updateForUse (endAccess, livenessMask, false /* lifetime ending*/ );
1265+ }
1266+ };
12601267
12611268 for (auto livenessInstAndValue : nonconsumingUses) {
12621269 if (auto *lbi = dyn_cast<LoadBorrowInst>(livenessInstAndValue.first )) {
12631270 auto accessPathWithBase =
12641271 AccessPathWithBase::computeInScope (lbi->getOperand ());
12651272 if (auto *beginAccess =
1266- dyn_cast<BeginAccessInst>(accessPathWithBase.base )) {
1267- for (auto *endAccess : beginAccess->getEndAccesses ()) {
1268- liveness.updateForUse (endAccess, livenessInstAndValue.second ,
1269- false /* lifetime ending*/ );
1270- }
1273+ dyn_cast_or_null<BeginAccessInst>(accessPathWithBase.base )) {
1274+ updateForLivenessAccess (beginAccess, livenessInstAndValue.second );
12711275 } else {
12721276 for (auto *ebi : lbi->getEndBorrows ()) {
12731277 liveness.updateForUse (ebi, livenessInstAndValue.second ,
12741278 false /* lifetime ending*/ );
12751279 }
12761280 }
1281+ } else if (auto *bai = dyn_cast<BeginAccessInst>(livenessInstAndValue.first )) {
1282+ updateForLivenessAccess (bai, livenessInstAndValue.second );
12771283 } else {
12781284 liveness.updateForUse (livenessInstAndValue.first ,
12791285 livenessInstAndValue.second ,
0 commit comments