[llvm] 30179d7 - [Attributor][FIX][Alignment] Do not report a change if there was none
Johannes Doerfert via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 23 16:15:06 PST 2020
Author: Johannes Doerfert
Date: 2020-01-23T18:13:52-06:00
New Revision: 30179d7ecf6a2f986ed13de112ddaf0d0e966f38
URL: https://github.com/llvm/llvm-project/commit/30179d7ecf6a2f986ed13de112ddaf0d0e966f38
DIFF: https://github.com/llvm/llvm-project/commit/30179d7ecf6a2f986ed13de112ddaf0d0e966f38.diff
LOG: [Attributor][FIX][Alignment] Do not report a change if there was none
If alignment was manifested but it is actually only as good as the
data-layout provided one we should not report it as a change.
For testing purposes we still manifest the information.
Added:
Modified:
llvm/lib/Transforms/IPO/Attributor.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/IPO/Attributor.cpp b/llvm/lib/Transforms/IPO/Attributor.cpp
index 981cdd874646..527cacc68167 100644
--- a/llvm/lib/Transforms/IPO/Attributor.cpp
+++ b/llvm/lib/Transforms/IPO/Attributor.cpp
@@ -3474,7 +3474,7 @@ struct AAAlignImpl : AAAlign {
/// See AbstractAttribute::manifest(...).
ChangeStatus manifest(Attributor &A) override {
- ChangeStatus Changed = ChangeStatus::UNCHANGED;
+ ChangeStatus LoadStoreChanged = ChangeStatus::UNCHANGED;
// Check for users that allow alignment annotations.
Value &AnchorVal = getIRPosition().getAnchorValue();
@@ -3485,7 +3485,7 @@ struct AAAlignImpl : AAAlign {
STATS_DECLTRACK(AAAlign, Store,
"Number of times alignment added to a store");
SI->setAlignment(Align(getAssumedAlign()));
- Changed = ChangeStatus::CHANGED;
+ LoadStoreChanged = ChangeStatus::CHANGED;
}
} else if (auto *LI = dyn_cast<LoadInst>(U.getUser())) {
if (LI->getPointerOperand() == &AnchorVal)
@@ -3493,12 +3493,18 @@ struct AAAlignImpl : AAAlign {
LI->setAlignment(Align(getAssumedAlign()));
STATS_DECLTRACK(AAAlign, Load,
"Number of times alignment added to a load");
- Changed = ChangeStatus::CHANGED;
+ LoadStoreChanged = ChangeStatus::CHANGED;
}
}
}
- return AAAlign::manifest(A) | Changed;
+ ChangeStatus Changed = AAAlign::manifest(A);
+
+ MaybeAlign InheritAlign =
+ getAssociatedValue().getPointerAlignment(A.getDataLayout());
+ if (InheritAlign.valueOrOne() >= getAssumedAlign())
+ return LoadStoreChanged;
+ return Changed | LoadStoreChanged;
}
// TODO: Provide a helper to determine the implied ABI alignment and check in
@@ -3602,7 +3608,12 @@ struct AAAlignCallSiteArgument final : AAAlignFloating {
/// See AbstractAttribute::manifest(...).
ChangeStatus manifest(Attributor &A) override {
- return AAAlignImpl::manifest(A);
+ ChangeStatus Changed = AAAlignImpl::manifest(A);
+ MaybeAlign InheritAlign =
+ getAssociatedValue().getPointerAlignment(A.getDataLayout());
+ if (InheritAlign.valueOrOne() >= getAssumedAlign())
+ Changed = ChangeStatus::UNCHANGED;
+ return Changed;
}
/// See AbstractAttribute::updateImpl(Attributor &A).
More information about the llvm-commits
mailing list