void BlockState::updateForwardSetForWrite(RLEContext &Ctx, unsigned bit) { // This is a store, invalidate any location that this location may alias, as // their values can no longer be forwarded. LSLocation &R = Ctx.getLocation(bit); for (unsigned i = 0; i < LocationNum; ++i) { if (!isTrackingLocation(ForwardSetIn, i)) continue; LSLocation &L = Ctx.getLocation(i); if (!L.isMayAliasLSLocation(R, Ctx.getAA())) continue; // MayAlias, invalidate the location. stopTrackingLocation(ForwardSetIn, i); } // Start tracking this location. startTrackingLocation(ForwardSetIn, bit); }
void BlockState::processUnknownWriteInstForRLE(RLEContext &Ctx, SILInstruction *I) { auto *AA = Ctx.getAA(); for (unsigned i = 0; i < LocationNum; ++i) { if (!isTrackingLocation(ForwardSetIn, 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. LSLocation &R = Ctx.getLocation(i); if (!AA->mayWriteToMemory(I, R.getBase())) continue; // MayAlias. stopTrackingLocation(ForwardSetIn, i); stopTrackingValue(ForwardValIn, i); } }