[PATCH] D69690: [GlobalsAA] Set KnowNothing when nothing is known about a function.

Alina Sbirlea via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 1 12:50:39 PDT 2019


asbirlea updated this revision to Diff 227508.
asbirlea added a comment.

Set KnowNothing.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D69690

Files:
  llvm/lib/Analysis/GlobalsModRef.cpp
  llvm/test/Analysis/GlobalsModRef/intrinsics.ll


Index: llvm/test/Analysis/GlobalsModRef/intrinsics.ll
===================================================================
--- /dev/null
+++ llvm/test/Analysis/GlobalsModRef/intrinsics.ll
@@ -0,0 +1,44 @@
+; RUN: opt -globals-aa -gvn -S < %s | FileCheck %s
+
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+ at deallocCalled = internal global i8 0, align 1
+
+; CHECK-LABEL: @main()
+define dso_local i32 @main() {
+entry:
+  %tmp0 = call i8* @llvm.objc.autoreleasePoolPush() #1
+  %tmp6 = load i8, i8* @deallocCalled, align 1
+  %tobool = icmp ne i8 %tmp6, 0
+  br i1 %tobool, label %if.else, label %if.end
+
+if.else:                                          ; preds = %entry
+  call void @__assert_fail() #0
+  unreachable
+
+; CHECK-LABEL: if.end:
+; CHECK-NEXT: call void @llvm.objc.autoreleasePoolPop
+; CHECK-NEXT: load i8, i8* @deallocCalled
+if.end:                                           ; preds = %entry
+  call void @llvm.objc.autoreleasePoolPop(i8* %tmp0)
+  %tmp7 = load i8, i8* @deallocCalled, align 1
+  %tobool3 = icmp ne i8 %tmp7, 0
+  br i1 %tobool3, label %if.end6, label %if.else5
+
+if.else5:                                         ; preds = %if.end
+  call void @__assert_fail() #0
+  unreachable
+
+if.end6:                                          ; preds = %if.end
+  store i8 0, i8* @deallocCalled, align 1
+  ret i32 0
+}
+
+declare i8* @llvm.objc.autoreleasePoolPush() #1
+declare dso_local void @__assert_fail() #0
+declare void @llvm.objc.autoreleasePoolPop(i8*) #1
+
+attributes #0 = { noreturn nounwind }
+attributes #1 = { nounwind }
+
Index: llvm/lib/Analysis/GlobalsModRef.cpp
===================================================================
--- llvm/lib/Analysis/GlobalsModRef.cpp
+++ llvm/lib/Analysis/GlobalsModRef.cpp
@@ -525,10 +525,8 @@
             // consider every global as possibly being read by this function.
             FI.setMayReadAnyGlobal();
         } else {
-          FI.addModRefInfo(ModRefInfo::ModRef);
-          // Can't say anything useful unless it's an intrinsic - they don't
-          // read or write global variables of the kind considered here.
-          KnowNothing = !F->isIntrinsic();
+          KnowNothing = true;
+          break;
         }
         continue;
       }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D69690.227508.patch
Type: text/x-patch
Size: 2344 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191101/3a46a4bb/attachment.bin>


More information about the llvm-commits mailing list