Lines Matching defs:RK

70 RetainedKnowledge canonicalizedKnowledge(RetainedKnowledge RK,
72 switch (RK.AttrKind) {
74 return RK;
76 RK.WasOn = getUnderlyingObject(RK.WasOn);
77 return RK;
79 Value *V = RK.WasOn->stripInBoundsOffsets([&](const Value *Strip) {
81 RK.ArgValue =
82 MinAlign(RK.ArgValue, GEP->getMaxPreservedAlignment(DL).value());
84 RK.WasOn = V;
85 return RK;
90 Value *V = GetPointerBaseWithConstantOffset(RK.WasOn, Offset, DL,
93 return RK;
94 RK.ArgValue = RK.ArgValue + Offset;
95 RK.WasOn = V;
98 return RK;
116 bool tryToPreserveWithoutAddingAssume(RetainedKnowledge RK) {
117 if (!InstBeingModified || !RK.WasOn)
122 RK.WasOn, {RK.AttrKind}, AC,
127 if (RKOther.ArgValue >= RK.ArgValue) {
140 ConstantInt::get(Type::getInt64Ty(M->getContext()), RK.ArgValue));
144 bool isKnowledgeWorthPreserving(RetainedKnowledge RK) {
145 if (!RK)
147 if (!RK.WasOn)
149 if (RK.WasOn->getType()->isPointerTy()) {
150 Value *UnderlyingPtr = getUnderlyingObject(RK.WasOn);
154 if (auto *Arg = dyn_cast<Argument>(RK.WasOn)) {
155 if (Arg->hasAttribute(RK.AttrKind) &&
156 (!Attribute::isIntAttrKind(RK.AttrKind) ||
157 Arg->getAttribute(RK.AttrKind).getValueAsInt() >= RK.ArgValue))
161 if (auto *Inst = dyn_cast<Instruction>(RK.WasOn))
163 if (RK.WasOn->use_empty())
165 Use *SingleUse = RK.WasOn->getSingleUndroppableUse();
172 void addKnowledge(RetainedKnowledge RK) {
173 RK = canonicalizedKnowledge(RK, M->getDataLayout());
175 if (!isKnowledgeWorthPreserving(RK))
178 if (tryToPreserveWithoutAddingAssume(RK))
180 MapKey Key{RK.WasOn, RK.AttrKind};
183 AssumedKnowledgeMap[Key] = RK.ArgValue;
186 assert(((Lookup->second == 0 && RK.ArgValue == 0) ||
187 (Lookup->second != 0 && RK.ArgValue != 0)) &&
192 Lookup->second = std::max(Lookup->second, RK.ArgValue);
314 for (const RetainedKnowledge &RK : Knowledge)
315 Builder.addKnowledge(RK);
320 RetainedKnowledge RK,
324 RK = canonicalizedKnowledge(RK, Assume->getDataLayout());
326 if (!Builder.isKnowledgeWorthPreserving(RK))
329 if (Builder.tryToPreserveWithoutAddingAssume(RK))
331 return RK;
423 RetainedKnowledge RK =
425 if (auto *Arg = dyn_cast_or_null<Argument>(RK.WasOn)) {
426 bool HasSameKindAttr = Arg->hasAttribute(RK.AttrKind);
428 if (!Attribute::isIntAttrKind(RK.AttrKind) ||
429 Arg->getAttribute(RK.AttrKind).getValueAsInt() >=
430 RK.ArgValue) {
438 Arg->removeAttr(RK.AttrKind);
439 Arg->addAttr(Attribute::get(C, RK.AttrKind, RK.ArgValue));
445 auto &Lookup = Knowledge[{RK.WasOn, RK.AttrKind}];
449 if (Elem.ArgValue >= RK.ArgValue) {
454 ConstantInt::get(Type::getInt64Ty(C), RK.ArgValue));
460 Lookup.push_back({Assume, RK.ArgValue, &BOI});
483 RetainedKnowledge RK =
485 if (!RK)
487 Builder.addKnowledge(RK);
488 if (auto *I = dyn_cast_or_null<Instruction>(RK.WasOn))