[PATCH] D66549: [Attributor] FIX: Treat new attributes as changed ones

Johannes Doerfert via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 23 08:29:02 PDT 2019


This revision was automatically updated to reflect the committed changes.
Closed by commit rL369768: [Attributor] FIX: Treat new attributes as changed ones (authored by jdoerfert, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D66549?vs=216460&id=216862#toc

Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D66549/new/

https://reviews.llvm.org/D66549

Files:
  llvm/trunk/lib/Transforms/IPO/Attributor.cpp
  llvm/trunk/test/Transforms/FunctionAttrs/new_attributes.ll


Index: llvm/trunk/test/Transforms/FunctionAttrs/new_attributes.ll
===================================================================
--- llvm/trunk/test/Transforms/FunctionAttrs/new_attributes.ll
+++ llvm/trunk/test/Transforms/FunctionAttrs/new_attributes.ll
@@ -0,0 +1,43 @@
+; RUN: opt < %s -attributor -attributor-disable=false -attributor-max-iterations=0 -S | FileCheck %s
+; RUN: opt < %s -attributor -attributor-disable=false -attributor-max-iterations=1 -S | FileCheck %s
+; RUN: opt < %s -attributor -attributor-disable=false -attributor-max-iterations=2 -S | FileCheck %s
+; RUN: opt < %s -attributor -attributor-disable=false -attributor-max-iterations=3 -S | FileCheck %s
+; RUN: opt < %s -attributor -attributor-disable=false -attributor-max-iterations=4 -S | FileCheck %s
+; RUN: opt < %s -attributor -attributor-disable=false -attributor-max-iterations=2147483647 -S | FileCheck %s
+
+; CHECK-NOT: Function
+; CHECK: declare i32 @foo1()
+; CHECK-NOT: Function
+; CHECK: declare i32 @foo2()
+; CHECK-NOT: Function
+; CHECK: declare i32 @foo3()
+declare i32 @foo1()
+declare i32 @foo2()
+declare i32 @foo3()
+
+; CHECK-NOT: Function
+; CHECK:      define internal i32 @bar() {
+; CHECK-NEXT:   %1 = call i32 @foo1()
+; CHECK-NEXT:   %2 = call i32 @foo2()
+; CHECK-NEXT:   %3 = call i32 @foo3()
+; CHECK-NEXT:   ret i32 1
+; CHECK-NEXT: }
+define internal i32 @bar() {
+  %1 = call i32 @foo1()
+  %2 = call i32 @foo2()
+  %3 = call i32 @foo3()
+  ret i32 1
+}
+
+; CHECK-NOT: Function
+; CHECK:      define i32 @baz() {
+; CHECK-NEXT:   %1 = call i32 @bar()
+; CHECK-NEXT:   ret i32 0
+; CHECK-NEXT: }
+define i32 @baz() {
+  %1 = call i32 @bar()
+  ret i32 0
+}
+
+; We should never derive anything here
+; CHECK-NOT: attributes
Index: llvm/trunk/lib/Transforms/IPO/Attributor.cpp
===================================================================
--- llvm/trunk/lib/Transforms/IPO/Attributor.cpp
+++ llvm/trunk/lib/Transforms/IPO/Attributor.cpp
@@ -2397,16 +2397,16 @@
         if (AA->update(*this) == ChangeStatus::CHANGED)
           ChangedAAs.push_back(AA);
 
+    // Add attributes to the changed set if they have been created in the last
+    // iteration.
+    ChangedAAs.append(AllAbstractAttributes.begin() + NumAAs,
+                      AllAbstractAttributes.end());
+
     // Reset the work list and repopulate with the changed abstract attributes.
     // Note that dependent ones are added above.
     Worklist.clear();
     Worklist.insert(ChangedAAs.begin(), ChangedAAs.end());
 
-    // Add attributes to the worklist that have been created in the last
-    // iteration.
-    Worklist.insert(AllAbstractAttributes.begin() + NumAAs,
-                    AllAbstractAttributes.end());
-
   } while (!Worklist.empty() && ++IterationCounter < MaxFixpointIterations);
 
   size_t NumFinalAAs = AllAbstractAttributes.size();


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D66549.216862.patch
Type: text/x-patch
Size: 2855 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190823/1777d3f0/attachment-0001.bin>


More information about the llvm-commits mailing list