summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/IPO
diff options
context:
space:
mode:
authorJohannes Doerfert <johannes@jdoerfert.de>2019-12-31 01:27:50 -0600
committerJohannes Doerfert <johannes@jdoerfert.de>2019-12-31 01:33:22 -0600
commitdada8132af65c1fa74070839c260cd78d97a0903 (patch)
treec61923b8a757ab4f7c61fcf85e6cc973d6d29259 /llvm/lib/Transforms/IPO
parentb1b441d22de88ec9816403ab6d0541ca91faba16 (diff)
downloadbcm5719-llvm-dada8132af65c1fa74070839c260cd78d97a0903.tar.gz
bcm5719-llvm-dada8132af65c1fa74070839c260cd78d97a0903.zip
[Attributor] Propagate known align from arguments to call sites arguments
Since the information is known we can simply use it at the call site. This is especially useful for callbacks but also helps regular calls. The test changes are mechanical.
Diffstat (limited to 'llvm/lib/Transforms/IPO')
-rw-r--r--llvm/lib/Transforms/IPO/Attributor.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/IPO/Attributor.cpp b/llvm/lib/Transforms/IPO/Attributor.cpp
index 9435dc72f96..c39e3ebcbeb 100644
--- a/llvm/lib/Transforms/IPO/Attributor.cpp
+++ b/llvm/lib/Transforms/IPO/Attributor.cpp
@@ -3666,6 +3666,18 @@ struct AAAlignCallSiteArgument final : AAAlignFloating {
return AAAlignImpl::manifest(A);
}
+ /// See AbstractAttribute::updateImpl(Attributor &A).
+ ChangeStatus updateImpl(Attributor &A) override {
+ ChangeStatus Changed = AAAlignFloating::updateImpl(A);
+ if (Argument *Arg = getAssociatedArgument()) {
+ const auto &ArgAlignAA = A.getAAFor<AAAlign>(
+ *this, IRPosition::argument(*Arg), /* TrackDependence */ false,
+ DepClassTy::OPTIONAL);
+ takeKnownMaximum(ArgAlignAA.getKnownAlign());
+ }
+ return Changed;
+ }
+
/// See AbstractAttribute::trackStatistics()
void trackStatistics() const override { STATS_DECLTRACK_CSARG_ATTR(aligned) }
};
OpenPOWER on IntegriCloud