[PATCH] D66927: [Attributor] Implement AANoAliasCallSiteArgument initialization

Hideto Ueno via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 29 00:11:45 PDT 2019


uenoku created this revision.
uenoku added reviewers: jdoerfert, sstefan1.
Herald added subscribers: llvm-commits, hiraditya.
Herald added a project: LLVM.

This patch adds an appropriate `initialize` method for `AANoAliasCallSiteArgument`.


https://reviews.llvm.org/D66927

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


Index: llvm/test/Transforms/FunctionAttrs/noalias_returned.ll
===================================================================
--- llvm/test/Transforms/FunctionAttrs/noalias_returned.ll
+++ llvm/test/Transforms/FunctionAttrs/noalias_returned.ll
@@ -142,8 +142,7 @@
 ; TEST 9
 ; Simple Argument Test
 define internal void @test9(i8* %a, i8* %b) {
-; FIXME: missing noalias
-; CHECK: define internal void @test9(i8* %a, i8* %b)
+; CHECK: define internal void @test9(i8* noalias %a, i8* %b)
   ret void
 }
 define void @test9_helper(i8* %a, i8* %b) {
@@ -156,12 +155,18 @@
 ; TEST 10
 ; Simple CallSite Test
 
-declare void @test10_helper(i8* %a)
+declare void @test10_helper_1(i8* %a)
+define void @test10_helper_2(i8* noalias %a) {
+  ret void
+}
 define void @test10(i8* noalias %a) {
 ; CHECK: define void @test10(i8* noalias %a)
 ; FIXME: missing noalias
-; CHECK-NEXT:   tail call void @test10_helper(i8* %a)
-  tail call void @test10_helper(i8* %a)
+; CHECK-NEXT:   tail call void @test10_helper_1(i8* %a)
+  tail call void @test10_helper_1(i8* %a)
+
+; CHECK-NEXT:   tail call void @test10_helper_2(i8* noalias %a)
+  tail call void @test10_helper_2(i8* %a)
   ret void
 }
 
Index: llvm/lib/Transforms/IPO/Attributor.cpp
===================================================================
--- llvm/lib/Transforms/IPO/Attributor.cpp
+++ llvm/lib/Transforms/IPO/Attributor.cpp
@@ -1592,8 +1592,10 @@
 
   /// See AbstractAttribute::initialize(...).
   void initialize(Attributor &A) override {
-    // TODO: It isn't sound to initialize as the same with `AANoAliasImpl`
-    // because `noalias` may not be valid in the current position.
+    // See callsite argument attribute and callee argument attribute.
+    ImmutableCallSite ICS(&getAnchorValue());
+    if (ICS.paramHasAttr(getArgNo(), Attribute::NoAlias))
+      indicateOptimisticFixpoint();
   }
 
   /// See AbstractAttribute::updateImpl(...).


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D66927.217782.patch
Type: text/x-patch
Size: 1912 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190829/5512a98f/attachment.bin>


More information about the llvm-commits mailing list