@@ -36,6 +36,11 @@ static bool isDereferenceableAndAlignedPointerViaAssumption(
36
36
function_ref<bool (const RetainedKnowledge &RK)> CheckSize,
37
37
const DataLayout &DL, const Instruction *CtxI, AssumptionCache *AC,
38
38
const DominatorTree *DT) {
39
+ // Dereferenceable information from assumptions is only valid if the value
40
+ // cannot be freed between the assumption and use. For now just use the
41
+ // information for values that cannot be freed in the function.
42
+ // TODO: More precisely check if the pointer can be freed between assumption
43
+ // and use.
39
44
if (!CtxI || Ptr ->canBeFreed ())
40
45
return false ;
41
46
// / Look through assumes to see if both dereferencability and alignment can
@@ -198,40 +203,6 @@ static bool isDereferenceableAndAlignedPointer(
198
203
Size , DL, CtxI, AC, DT, TLI,
199
204
Visited, MaxDepth);
200
205
201
- // Dereferenceable information from assumptions is only valid if the value
202
- // cannot be freed between the assumption and use. For now just use the
203
- // information for values that cannot be freed in the function.
204
- // TODO: More precisely check if the pointer can be freed between assumption
205
- // and use.
206
- if (CtxI) {
207
- const Value *UO = getUnderlyingObjectAggressive (V);
208
- if (!V->canBeFreed () || (UO && !UO->canBeFreed ())) {
209
- // / Look through assumes to see if both dereferencability and alignment
210
- // / can be proven by an assume if needed.
211
- RetainedKnowledge AlignRK;
212
- RetainedKnowledge DerefRK;
213
- bool IsAligned = V->getPointerAlignment (DL) >= Alignment;
214
- if (getKnowledgeForValue (
215
- V, {Attribute::Dereferenceable, Attribute::Alignment}, AC,
216
- [&](RetainedKnowledge RK, Instruction *Assume, auto ) {
217
- if (!isValidAssumeForContext (Assume, CtxI, DT))
218
- return false ;
219
- if (RK.AttrKind == Attribute::Alignment)
220
- AlignRK = std::max (AlignRK, RK);
221
- if (RK.AttrKind == Attribute::Dereferenceable)
222
- DerefRK = std::max (DerefRK, RK);
223
- IsAligned |= AlignRK && AlignRK.ArgValue >= Alignment.value ();
224
- if (IsAligned && DerefRK &&
225
- DerefRK.ArgValue >= Size .getZExtValue ())
226
- return true ; // We have found what we needed so we stop
227
- // looking
228
- return false ; // Other assumes may have better information. so
229
- // keep looking
230
- }))
231
- return true ;
232
- }
233
- }
234
-
235
206
return isDereferenceableAndAlignedPointerViaAssumption (
236
207
V, Alignment,
237
208
[Size ](const RetainedKnowledge &RK) {
0 commit comments