@@ -254,7 +254,7 @@ struct AssumeBuilderState {
254
254
->getDataLayout ()
255
255
.getTypeStoreSize (AccType)
256
256
.getKnownMinValue ();
257
- if (DerefSize != 0 ) {
257
+ if (EnableKnowledgeRetention && DerefSize != 0 ) {
258
258
addKnowledge ({Attribute::Dereferenceable, DerefSize, Pointer});
259
259
if (!NullPointerIsDefined (MemInst->getFunction (),
260
260
Pointer->getType ()->getPointerAddressSpace ()))
@@ -265,6 +265,15 @@ struct AssumeBuilderState {
265
265
}
266
266
267
267
void addInstruction (Instruction *I) {
268
+ if (auto *L = dyn_cast<LoadInst>(I))
269
+ if (auto *Align = L->getMetadata (LLVMContext::MD_align)) {
270
+ addKnowledge ({Attribute::Alignment,
271
+ mdconst::extract<ConstantInt>(Align->getOperand (0 ))
272
+ ->getZExtValue (),
273
+ I});
274
+ }
275
+ if (!EnableKnowledgeRetention)
276
+ return ;
268
277
if (auto *Call = dyn_cast<CallBase>(I))
269
278
return addCall (Call);
270
279
if (auto *Load = dyn_cast<LoadInst>(I))
@@ -291,7 +300,7 @@ AssumeInst *llvm::buildAssumeFromInst(Instruction *I) {
291
300
292
301
bool llvm::salvageKnowledge (Instruction *I, AssumptionCache *AC,
293
302
DominatorTree *DT) {
294
- if (!EnableKnowledgeRetention || I->isTerminator ())
303
+ if (I->isTerminator ())
295
304
return false ;
296
305
bool Changed = false ;
297
306
AssumeBuilderState Builder (I->getModule (), I, AC, DT);
0 commit comments