diff options
author | Michael Kuperstein <michael.kuperstein@gmail.com> | 2016-04-14 22:00:11 +0000 |
---|---|---|
committer | Michael Kuperstein <michael.kuperstein@gmail.com> | 2016-04-14 22:00:11 +0000 |
commit | 16f13e252b2b41979abb563aa0e9a59cbb60e88e (patch) | |
tree | 526fea6a457dbd4bf98dfe6620a0207423237ae4 /llvm/test | |
parent | dc4c095d510a80ab7571d79b39a2e5564a402da5 (diff) | |
download | bcm5719-llvm-16f13e252b2b41979abb563aa0e9a59cbb60e88e.tar.gz bcm5719-llvm-16f13e252b2b41979abb563aa0e9a59cbb60e88e.zip |
[AliasSetTracker] Correctly handle changing the size of an entry
If the size of an AST entry changes, we also need to make sure we perform
necessary alias set merges, as the new size may overlap pointers in other sets.
We happen to run into this with memset, because memset allows an entry for a
i8* pointer to have a decidedly non-i8 size.
This fixes PR27262.
Differential Revision: http://reviews.llvm.org/D18939
llvm-svn: 266381
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/Transforms/LICM/pr27262.ll | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/llvm/test/Transforms/LICM/pr27262.ll b/llvm/test/Transforms/LICM/pr27262.ll new file mode 100644 index 00000000000..5fc6d9389e0 --- /dev/null +++ b/llvm/test/Transforms/LICM/pr27262.ll @@ -0,0 +1,33 @@ +; RUN: opt -S -basicaa -licm < %s | FileCheck %s + +target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32" +target triple = "i686-pc-windows-msvc18.0.0" + +; Make sure the store to v is not sunk past the memset +; CHECK-LABEL: @main +; CHECK: for.body: +; CHECK-NEXT: store i8 1, i8* %p +; CHECK-NEXT: store i8 2, i8* %p1 +; CHECK-NEXT: call void @llvm.memset +; CHECK: end: +; CHECK-NEXT: ret i32 0 + +define i32 @main(i1 %k, i8* %p) { +entry: + %p1 = getelementptr i8, i8* %p, i32 1 + br label %for.body + +for.body: + store i8 1, i8* %p, align 1 + store i8 2, i8* %p1, align 1 + call void @llvm.memset.p0i8.i32(i8* %p, i8 255, i32 4, i32 1, i1 false) + br label %for.latch + +for.latch: + br i1 %k, label %for.body, label %end + +end: + ret i32 0 +} + +declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) |