summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/NewGVN
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2017-05-19 04:06:10 +0000
committerDavide Italiano <davide@freebsd.org>2017-05-19 04:06:10 +0000
commitee49f4943c3f83513ed2c230f12df3f40f355e03 (patch)
tree79a6f97ffb14cae3bd1d5b37f255a1a14890277c /llvm/test/Transforms/NewGVN
parent977158488e532bb26d94612fa116c8362202ee4e (diff)
downloadbcm5719-llvm-ee49f4943c3f83513ed2c230f12df3f40f355e03.tar.gz
bcm5719-llvm-ee49f4943c3f83513ed2c230f12df3f40f355e03.zip
[NewGVN] Delete the old store when we find congruent to a load.
(or non-store, more in general). Fixes PR33086. Caught by the store verifier. llvm-svn: 303406
Diffstat (limited to 'llvm/test/Transforms/NewGVN')
-rw-r--r--llvm/test/Transforms/NewGVN/pr33086.ll59
1 files changed, 59 insertions, 0 deletions
diff --git a/llvm/test/Transforms/NewGVN/pr33086.ll b/llvm/test/Transforms/NewGVN/pr33086.ll
new file mode 100644
index 00000000000..6117ef35e6d
--- /dev/null
+++ b/llvm/test/Transforms/NewGVN/pr33086.ll
@@ -0,0 +1,59 @@
+; RUN: opt -newgvn -S %s | FileCheck %s
+; REQUIRES: asserts
+
+; CHECK-LABEL: define void @tinkywinky() {
+; CHECK: entry:
+; CHECK-NEXT: br i1 undef, label %for.cond18, label %for.cond.preheader
+; CHECK: for.cond.preheader:
+; CHECK-NEXT: br label %for.cond2thread-pre-split
+; CHECK: for.cond2thread-pre-split:
+; CHECK-NEXT: %conv24 = phi i32 [ 0, %for.cond.preheader ], [ %conv, %for.inc.split ]
+; CHECK-NEXT: br label %for.inc.split
+; CHECK: for.inc.split:
+; CHECK-NEXT: %add = shl nsw i32 %conv24, 16
+; CHECK-NEXT: %sext23 = add i32 %add, 65536
+; CHECK-NEXT: %conv = ashr exact i32 %sext23, 16
+; CHECK-NEXT: %cmp = icmp slt i32 %sext23, 3604480
+; CHECK-NEXT: br i1 %cmp, label %for.cond2thread-pre-split, label %l1.loopexit
+; CHECK: l1.loopexit:
+; CHECK-NEXT: br label %l1
+; CHECK: l1:
+; CHECK-NEXT: %0 = load i16, i16* null, align 2
+; CHECK-NEXT: %g.0.g.0..pr = load i16, i16* null, align 2
+; CHECK-NEXT: ret void
+; CHECK: for.cond18:
+; CHECK-NEXT: br label %l1
+; CHECK-NEXT: }
+
+define void @tinkywinky() {
+entry:
+ br i1 undef, label %for.cond18, label %for.cond.preheader
+
+for.cond.preheader:
+ br label %for.cond2thread-pre-split
+
+for.cond2thread-pre-split:
+ %conv24 = phi i32 [ 0, %for.cond.preheader ], [ %conv, %for.inc.split ]
+ br label %for.inc.split
+
+for.inc.split:
+ %add = shl nsw i32 %conv24, 16
+ %sext23 = add i32 %add, 65536
+ %conv = ashr exact i32 %sext23, 16
+ %cmp = icmp slt i32 %sext23, 3604480
+ br i1 %cmp, label %for.cond2thread-pre-split, label %l1.loopexit
+
+l1.loopexit:
+ br label %l1
+
+l1:
+ %h.0 = phi i16* [ undef, %for.cond18 ], [ null, %l1.loopexit ]
+ %0 = load i16, i16* %h.0, align 2
+ store i16 %0, i16* null, align 2
+ %g.0.g.0..pr = load i16, i16* null, align 2
+ %tobool15 = icmp eq i16 %g.0.g.0..pr, 0
+ ret void
+
+for.cond18:
+ br label %l1
+}
OpenPOWER on IntegriCloud