[llvm] 900b665 - [Attributor] Avoid running trivial AA initializers
Johannes Doerfert via llvm-commits
llvm-commits at lists.llvm.org
Sun Jul 9 19:25:33 PDT 2023
Author: Johannes Doerfert
Date: 2023-07-09T19:25:09-07:00
New Revision: 900b665371000ae2e2393a95f6e8f769d3e89d3b
URL: https://github.com/llvm/llvm-project/commit/900b665371000ae2e2393a95f6e8f769d3e89d3b
DIFF: https://github.com/llvm/llvm-project/commit/900b665371000ae2e2393a95f6e8f769d3e89d3b.diff
LOG: [Attributor] Avoid running trivial AA initializers
Since the enum IR attributes are now queried via the hasAssumedIRAttr
interface, we do not need to check isImpliedByIR in their initializer
anymore. Further, most AAs have a trivial initializer that is not worth
creating the AA if we would not also update it (see
Attributor::shouldUpdateAA).
Added:
Modified:
llvm/include/llvm/Transforms/IPO/Attributor.h
Removed:
################################################################################
diff --git a/llvm/include/llvm/Transforms/IPO/Attributor.h b/llvm/include/llvm/Transforms/IPO/Attributor.h
index 89e28ba301ef7b..88ea0fd4c69ba1 100644
--- a/llvm/include/llvm/Transforms/IPO/Attributor.h
+++ b/llvm/include/llvm/Transforms/IPO/Attributor.h
@@ -3125,6 +3125,11 @@ template <Attribute::AttrKind AK, typename BaseType, typename AAType>
struct IRAttribute : public BaseType {
IRAttribute(const IRPosition &IRP) : BaseType(IRP) {}
+ /// Most boolean IRAttribute AAs don't do anything non-trivial
+ /// in their initializers while non-boolean ones often do. Subclasses can
+ /// change this.
+ static bool hasTrivialInitializer() { return Attribute::isEnumAttrKind(AK); }
+
/// Compile time access to the IR attribute kind.
static constexpr Attribute::AttrKind IRAttributeKind = AK;
@@ -3148,15 +3153,6 @@ struct IRAttribute : public BaseType {
ImpliedAttributeKind);
}
- /// See AbstractAttribute::initialize(...).
- void initialize(Attributor &A) override {
- const IRPosition &IRP = this->getIRPosition();
- if (AAType::isImpliedByIR(A, IRP, AK)) {
- this->getState().indicateOptimisticFixpoint();
- return;
- }
- }
-
/// See AbstractAttribute::manifest(...).
ChangeStatus manifest(Attributor &A) override {
if (isa<UndefValue>(this->getIRPosition().getAssociatedValue()))
@@ -3558,6 +3554,9 @@ struct AANonNull
AANonNull> {
AANonNull(const IRPosition &IRP, Attributor &A) : IRAttribute(IRP) {}
+ /// See AbstractAttribute::hasTrivialInitializer.
+ static bool hasTrivialInitializer() { return false; }
+
/// See IRAttribute::isImpliedByUndef.
/// Undef is not necessarily nonnull as nonnull + noundef would cause poison.
/// Poison implies nonnull though.
@@ -4527,6 +4526,9 @@ struct AAMemoryBehavior
AAMemoryBehavior> {
AAMemoryBehavior(const IRPosition &IRP, Attributor &A) : IRAttribute(IRP) {}
+ /// See AbstractAttribute::hasTrivialInitializer.
+ static bool hasTrivialInitializer() { return false; }
+
/// See AbstractAttribute::isValidIRPositionForInit
static bool isValidIRPositionForInit(Attributor &A, const IRPosition &IRP) {
if (!IRP.isFunctionScope() &&
@@ -4601,6 +4603,9 @@ struct AAMemoryLocation
AAMemoryLocation(const IRPosition &IRP, Attributor &A) : IRAttribute(IRP) {}
+ /// See AbstractAttribute::hasTrivialInitializer.
+ static bool hasTrivialInitializer() { return false; }
+
/// See AbstractAttribute::isValidIRPositionForInit
static bool isValidIRPositionForInit(Attributor &A, const IRPosition &IRP) {
if (!IRP.isFunctionScope() &&
More information about the llvm-commits
mailing list