Skip to content

Commit a7ad32d

Browse files
committed
!fixup materialize assumption for !align of load
1 parent eb12977 commit a7ad32d

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

llvm/lib/Transforms/Scalar/EarlyCSE.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1588,9 +1588,9 @@ bool EarlyCSE::processNode(DomTreeNode *Node) {
15881588
if (InVal.IsLoad)
15891589
if (auto *I = dyn_cast<Instruction>(Op))
15901590
combineMetadataForCSE(I, &Inst, false);
1591+
salvageKnowledge(&Inst, &AC);
15911592
if (!Inst.use_empty())
15921593
Inst.replaceAllUsesWith(Op);
1593-
salvageKnowledge(&Inst, &AC);
15941594
removeMSSA(Inst);
15951595
Inst.eraseFromParent();
15961596
Changed = true;

llvm/lib/Transforms/Utils/AssumeBundleBuilder.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ struct AssumeBuilderState {
254254
->getDataLayout()
255255
.getTypeStoreSize(AccType)
256256
.getKnownMinValue();
257-
if (DerefSize != 0) {
257+
if (EnableKnowledgeRetention && DerefSize != 0) {
258258
addKnowledge({Attribute::Dereferenceable, DerefSize, Pointer});
259259
if (!NullPointerIsDefined(MemInst->getFunction(),
260260
Pointer->getType()->getPointerAddressSpace()))
@@ -265,6 +265,15 @@ struct AssumeBuilderState {
265265
}
266266

267267
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;
268277
if (auto *Call = dyn_cast<CallBase>(I))
269278
return addCall(Call);
270279
if (auto *Load = dyn_cast<LoadInst>(I))
@@ -291,7 +300,7 @@ AssumeInst *llvm::buildAssumeFromInst(Instruction *I) {
291300

292301
bool llvm::salvageKnowledge(Instruction *I, AssumptionCache *AC,
293302
DominatorTree *DT) {
294-
if (!EnableKnowledgeRetention || I->isTerminator())
303+
if (I->isTerminator())
295304
return false;
296305
bool Changed = false;
297306
AssumeBuilderState Builder(I->getModule(), I, AC, DT);

0 commit comments

Comments
 (0)