[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