summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms
diff options
context:
space:
mode:
authorFlorian Hahn <florian.hahn@arm.com>2018-11-07 17:20:07 +0000
committerFlorian Hahn <florian.hahn@arm.com>2018-11-07 17:20:07 +0000
commitac86038b407514cc1a93b05d0a4b375c49298a0b (patch)
tree57f37cc7700edfa77a37c858e874570dd076f49c /llvm/test/Transforms
parent5fbc72f5261ff381eae8494be462d48e7404d1b5 (diff)
downloadbcm5719-llvm-ac86038b407514cc1a93b05d0a4b375c49298a0b.tar.gz
bcm5719-llvm-ac86038b407514cc1a93b05d0a4b375c49298a0b.zip
[NewGVN] Make sure we do not add a user to itself.
If we simplify an instruction to itself, we do not need to add a user to itself. For congruence classes with a defining expression, we already use a similar logic. Fixes PR38259. Reviewers: davide, efriedma, mcrosier Reviewed By: davide Differential Revision: https://reviews.llvm.org/D51168 llvm-svn: 346335
Diffstat (limited to 'llvm/test/Transforms')
-rw-r--r--llvm/test/Transforms/NewGVN/simp-to-self.ll27
1 files changed, 27 insertions, 0 deletions
diff --git a/llvm/test/Transforms/NewGVN/simp-to-self.ll b/llvm/test/Transforms/NewGVN/simp-to-self.ll
new file mode 100644
index 00000000000..ca46af76849
--- /dev/null
+++ b/llvm/test/Transforms/NewGVN/simp-to-self.ll
@@ -0,0 +1,27 @@
+; RUN: opt -S < %s -newgvn | FileCheck %s
+
+; CHECK-LABEL: for.cond:
+; CHECK-NEXT: %lv = load i32, i32* bitcast (i64* @a to i32*)
+; CHECK-NEXT: %bf.clear = and i32 %lv, -131072
+; CHECK-NEXT: %bf.set = or i32 1, %bf.clear
+; CHECK-NEXT: br i1 %bc, label %for.cond, label %exit
+@a = external global i64
+
+define void @fn1(i1 %bc) {
+entry:
+ br label %for.cond
+
+for.cond: ; preds = %for.cond1.1, %entry
+ %tmp = phi i1 [ undef, %entry ], [ 1, %for.cond ]
+ %conv = zext i1 %tmp to i32
+ %lv = load i32, i32* bitcast (i64* @a to i32*)
+ %bf.clear = and i32 %lv, -131072
+ %bf.set = or i32 %conv, %bf.clear
+ %bf.clear.1 = and i32 %bf.set, -131072
+ %bf.set.1 = or i32 1, %bf.clear.1
+ br i1 %bc, label %for.cond, label %exit
+
+exit: ; preds = %for.cond1
+ store i32 %bf.set.1, i32* bitcast (i64* @a to i32*)
+ ret void
+}
OpenPOWER on IntegriCloud