[llvm] 32e98a7 - [Attributor][FIX] Carefully strip casts in AANoAlias

Johannes Doerfert via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 14 19:45:42 PST 2020


Author: Johannes Doerfert
Date: 2020-02-14T21:44:46-06:00
New Revision: 32e98a7089a591f0417a7fbd9806be1b60da7e8f

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

LOG: [Attributor][FIX] Carefully strip casts in AANoAlias

We can strip casts in AANoAlias but that might cause us to end up with a
non-pointer type. We do properly handle that case now.

Added: 
    

Modified: 
    llvm/lib/Transforms/IPO/Attributor.cpp
    llvm/test/Transforms/Attributor/noalias.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/IPO/Attributor.cpp b/llvm/lib/Transforms/IPO/Attributor.cpp
index 76081a5adc04..e7b8927fe7eb 100644
--- a/llvm/lib/Transforms/IPO/Attributor.cpp
+++ b/llvm/lib/Transforms/IPO/Attributor.cpp
@@ -2493,7 +2493,10 @@ struct AAReachabilityFunction final : public AAReachabilityImpl {
 /// ------------------------ NoAlias Argument Attribute ------------------------
 
 struct AANoAliasImpl : AANoAlias {
-  AANoAliasImpl(const IRPosition &IRP) : AANoAlias(IRP) {}
+  AANoAliasImpl(const IRPosition &IRP) : AANoAlias(IRP) {
+    assert(getAssociatedType()->isPointerTy() &&
+           "Noalias is a pointer attribute");
+  }
 
   const std::string getAsStr() const override {
     return getAssumed() ? "noalias" : "may-alias";
@@ -2518,6 +2521,11 @@ struct AANoAliasFloating final : AANoAliasImpl {
       Val = Base;
     } while (true);
 
+    if (!Val->getType()->isPointerTy()) {
+      indicatePessimisticFixpoint();
+      return;
+    }
+
     if (isa<AllocaInst>(Val))
       indicateOptimisticFixpoint();
     else if (isa<ConstantPointerNull>(Val) &&

diff  --git a/llvm/test/Transforms/Attributor/noalias.ll b/llvm/test/Transforms/Attributor/noalias.ll
index 14b9fd0e7200..f0afc3572141 100644
--- a/llvm/test/Transforms/Attributor/noalias.ll
+++ b/llvm/test/Transforms/Attributor/noalias.ll
@@ -1,4 +1,4 @@
-; RUN: opt -S -passes=attributor -aa-pipeline='basic-aa' -attributor-disable=false -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=4 < %s | FileCheck %s
+; RUN: opt -S -passes=attributor -aa-pipeline='basic-aa' -attributor-disable=false -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=7 < %s | FileCheck %s
 
 ; TEST 1 - negative.
 
@@ -330,3 +330,21 @@ define void @test13_use_alias(){
   ret void
 }
 
+; TEST 14 i2p casts
+define internal i32 @p2i(i32* %arg) {
+  %p2i = ptrtoint i32* %arg to i32
+  ret i32 %p2i
+}
+
+define i32 @i2p(i32* %arg) {
+  %c = call i32 @p2i(i32* %arg)
+  %i2p = inttoptr i32 %c to i8*
+  %bc = bitcast i8* %i2p to i32*
+  %call = call i32 @ret(i32* %bc)
+  ret i32 %call
+}
+define internal i32 @ret(i32* %arg) {
+  %l = load i32, i32* %arg
+  ret i32 %l
+}
+


        


More information about the llvm-commits mailing list