void BBState::updateForwardSetForWrite(RLEContext &Ctx, unsigned bit, LoadStoreValue Val) { // This is a store. Invalidate any Memlocation that this location may // alias, as their value can no longer be forwarded. MemLocation &R = Ctx.getMemLocation(bit); for (unsigned i = 0; i < ForwardSetIn.size(); ++i) { if (!isTrackingMemLocation(i)) continue; MemLocation &L = Ctx.getMemLocation(i); if (!L.isMayAliasMemLocation(R, Ctx.getAA())) continue; // MayAlias, invaliate the MemLocation. stopTrackingMemLocation(i); } // Start tracking this MemLocation. startTrackingMemLocation(bit, Val); }
void BBState::processUnknownWriteInst(RLEContext &Ctx, SILInstruction *I) { auto *AA = Ctx.getAA(); for (unsigned i = 0; i < ForwardSetIn.size(); ++i) { if (!isTrackingMemLocation(i)) continue; // Invalidate any location this instruction may write to. // // TODO: checking may alias with Base is overly conservative, // we should check may alias with base plus projection path. MemLocation &R = Ctx.getMemLocation(i); if (!AA->mayWriteToMemory(I, R.getBase())) continue; // MayAlias. stopTrackingMemLocation(i); } }