[llvm] c272728 - [Attributor] Port AANoSync to the isImpliedByIR interface

Johannes Doerfert via llvm-commits llvm-commits at lists.llvm.org
Sun Jul 9 16:05:06 PDT 2023


Author: Johannes Doerfert
Date: 2023-07-09T16:04:21-07:00
New Revision: c2727286244833849df5a88b09bd14bc094a9dda

URL: https://github.com/llvm/llvm-project/commit/c2727286244833849df5a88b09bd14bc094a9dda
DIFF: https://github.com/llvm/llvm-project/commit/c2727286244833849df5a88b09bd14bc094a9dda.diff

LOG: [Attributor] Port AANoSync to the isImpliedByIR interface

Added: 
    

Modified: 
    llvm/lib/Transforms/IPO/Attributor.cpp
    llvm/lib/Transforms/IPO/AttributorAttributes.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/IPO/Attributor.cpp b/llvm/lib/Transforms/IPO/Attributor.cpp
index 314f59f00a0ebd..ec0ca9eafc3fa3 100644
--- a/llvm/lib/Transforms/IPO/Attributor.cpp
+++ b/llvm/lib/Transforms/IPO/Attributor.cpp
@@ -204,9 +204,10 @@ bool AA::isNoSyncInst(Attributor &A, const Instruction &I,
     if (AANoSync::isNoSyncIntrinsic(&I))
       return true;
 
-    const auto *NoSyncAA = A.getAAFor<AANoSync>(
-        QueryingAA, IRPosition::callsite_function(*CB), DepClassTy::OPTIONAL);
-    return NoSyncAA && NoSyncAA->isAssumedNoSync();
+    bool IsKnownNoSync;
+    return AA::hasAssumedIRAttr<Attribute::NoSync>(
+        A, &QueryingAA, IRPosition::callsite_function(*CB),
+        DepClassTy::OPTIONAL, IsKnownNoSync);
   }
 
   if (!I.mayReadOrWriteMemory())
@@ -3284,8 +3285,7 @@ void Attributor::identifyDefaultAbstractAttributes(Function &F) {
     checkAndQueryIRAttr<Attribute::NoUnwind, AANoUnwind>(FPos, FnAttrs);
 
     // Every function might be marked "nosync"
-    if (!Attrs.hasFnAttr(Attribute::NoSync))
-      getOrCreateAAFor<AANoSync>(FPos);
+    checkAndQueryIRAttr<Attribute::NoSync, AANoSync>(FPos, FnAttrs);
 
     // Every function might be "no-free".
     checkAndQueryIRAttr<Attribute::NoFree, AANoFree>(FPos, FnAttrs);

diff  --git a/llvm/lib/Transforms/IPO/AttributorAttributes.cpp b/llvm/lib/Transforms/IPO/AttributorAttributes.cpp
index 081f9f0f0ac314..643818416af9a9 100644
--- a/llvm/lib/Transforms/IPO/AttributorAttributes.cpp
+++ b/llvm/lib/Transforms/IPO/AttributorAttributes.cpp
@@ -2417,6 +2417,13 @@ namespace {
 struct AANoSyncImpl : AANoSync {
   AANoSyncImpl(const IRPosition &IRP, Attributor &A) : AANoSync(IRP, A) {}
 
+  /// See AbstractAttribute::initialize(...).
+  void initialize(Attributor &A) override {
+    bool IsKnown;
+    assert(!AA::hasAssumedIRAttr<Attribute::NoSync>(A, nullptr, getIRPosition(),
+                                                    DepClassTy::NONE, IsKnown));
+  }
+
   const std::string getAsStr(Attributor *A) const override {
     return getAssumed() ? "nosync" : "may-sync";
   }


        


More information about the llvm-commits mailing list