summaryrefslogtreecommitdiff
path: root/test/Analysis/BasicAA
diff options
context:
space:
mode:
authorMehdi Amini <mehdi.amini@apple.com>2017-01-27 16:12:22 +0000
committerMehdi Amini <mehdi.amini@apple.com>2017-01-27 16:12:22 +0000
commit887da0d8e8a5176bb922b94bfb7858b25cea010b (patch)
treee83553a845bf91d7b86734bcb672459da48e7e02 /test/Analysis/BasicAA
parentccbf1f72a6bb103ca6fb701e713a93bbd657f7fc (diff)
Fix BasicAA incorrect assumption on GEP
This is fixing pr31761: BasicAA is deducing NoAlias on the result of the GEP if the base pointer is itself NoAlias. This is possible only if the NoAlias on the base pointer is deduced with a non-sized query: this should guarantee that the pointers are belonging to different memory allocation and that the GEP can't legally jump from one to another. Differential Revision: https://reviews.llvm.org/D29216 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@293293 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Analysis/BasicAA')
-rw-r--r--test/Analysis/BasicAA/pr31761.ll19
1 files changed, 19 insertions, 0 deletions
diff --git a/test/Analysis/BasicAA/pr31761.ll b/test/Analysis/BasicAA/pr31761.ll
new file mode 100644
index 00000000000..318dfdc9c24
--- /dev/null
+++ b/test/Analysis/BasicAA/pr31761.ll
@@ -0,0 +1,19 @@
+; RUN: opt < %s -basicaa -aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s
+
+
+target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-apple-macosx10.12.0"
+
+%struct.blam = type { i32, i32 }
+
+
+; CHECK-DAG: MayAlias: i32* %tmp, i32* %tmp3
+
+define i1 @ham(%struct.blam* %arg) {
+ %isNull = icmp eq %struct.blam* %arg, null
+ %tmp = getelementptr %struct.blam, %struct.blam* %arg, i64 0, i32 0
+ %tmp2 = getelementptr %struct.blam, %struct.blam* %arg, i64 0, i32 1
+ %select = select i1 %isNull, i32* null, i32* %tmp2
+ %tmp3 = getelementptr i32, i32* %select, i32 -1
+ ret i1 true
+}