summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorPete Cooper <peter_cooper@apple.com>2011-12-03 00:04:30 +0000
committerPete Cooper <peter_cooper@apple.com>2011-12-03 00:04:30 +0000
commitde2e27cc52a9e47e0261dda6dfb54a32eefa90a0 (patch)
tree9a32e49f6c5b1e49cf96db5ad96825c42c661cfa /test
parent24fbf2bf161b20b13d0a218345bdcd092bdd56f8 (diff)
downloadllvm-de2e27cc52a9e47e0261dda6dfb54a32eefa90a0.tar.gz
llvm-de2e27cc52a9e47e0261dda6dfb54a32eefa90a0.tar.bz2
llvm-de2e27cc52a9e47e0261dda6dfb54a32eefa90a0.tar.xz
Fixed deadstoreelimination bug where negative indices were incorrectly causing the optimisation to occur
Turns out long long + unsigned long long is unsigned. Doh! Fixes http://llvm.org/bugs/show_bug.cgi?id=11455 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145731 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/Transforms/DeadStoreElimination/OverwriteStoreEnd.ll17
1 files changed, 17 insertions, 0 deletions
diff --git a/test/Transforms/DeadStoreElimination/OverwriteStoreEnd.ll b/test/Transforms/DeadStoreElimination/OverwriteStoreEnd.ll
index 828ccc57a4..ed53eb524c 100644
--- a/test/Transforms/DeadStoreElimination/OverwriteStoreEnd.ll
+++ b/test/Transforms/DeadStoreElimination/OverwriteStoreEnd.ll
@@ -76,3 +76,20 @@ entry:
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) nounwind
declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) nounwind
+
+%struct.trapframe = type { i64, i64, i64 }
+
+; bugzilla 11455 - make sure negative GEP's don't break this optimisation
+; CHECK: @cpu_lwp_fork
+define void @cpu_lwp_fork(%struct.trapframe* %md_regs, i64 %pcb_rsp0) nounwind uwtable noinline ssp {
+entry:
+ %0 = inttoptr i64 %pcb_rsp0 to %struct.trapframe*
+ %add.ptr = getelementptr inbounds %struct.trapframe* %0, i64 -1
+ %1 = bitcast %struct.trapframe* %add.ptr to i8*
+ %2 = bitcast %struct.trapframe* %md_regs to i8*
+; CHECK: call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 1, i1 false)
+ call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 1, i1 false)
+ %tf_trapno = getelementptr inbounds %struct.trapframe* %0, i64 -1, i32 1
+ store i64 3, i64* %tf_trapno, align 8
+ ret void
+}