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); } }
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.getLSLocation(bit); for (unsigned i = 0; i < ForwardSetIn.size(); ++i) { if (!isTrackingLSLocation(i)) continue; LSLocation &L = Ctx.getLSLocation(i); if (!L.isMayAliasLSLocation(R, Ctx.getAA())) continue; // MayAlias, invalidate the LSLocation. stopTrackingLSLocation(i); } // Start tracking this LSLocation. startTrackingLSLocation(bit); }
void BlockState::processUnknownWriteInstForGenKillSet(RLEContext &Ctx, SILInstruction *I) { auto *AA = Ctx.getAA(); for (unsigned i = 0; i < LocationNum; ++i) { if (!isTrackingLocation(ForwardSetMax, 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(BBGenSet, i); startTrackingLocation(BBKillSet, i); } }
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 BlockState::updateForwardSetAndValForWrite(RLEContext &Ctx, unsigned lbit, unsigned vbit) { // This is a store, invalidate any location that this location may alias, as // their values can no longer be forwarded. LSLocation &R = Ctx.getLocation(lbit); 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 and value. stopTrackingValue(ForwardValIn, i); stopTrackingLocation(ForwardSetIn, i); } // Start tracking this location and value. startTrackingLocation(ForwardSetIn, lbit); startTrackingValue(ForwardValIn, lbit, vbit); }