diff options
| author | Florian Hahn <florian.hahn@arm.com> | 2018-11-07 17:20:07 +0000 |
|---|---|---|
| committer | Florian Hahn <florian.hahn@arm.com> | 2018-11-07 17:20:07 +0000 |
| commit | ac86038b407514cc1a93b05d0a4b375c49298a0b (patch) | |
| tree | 57f37cc7700edfa77a37c858e874570dd076f49c /llvm/test/Transforms | |
| parent | 5fbc72f5261ff381eae8494be462d48e7404d1b5 (diff) | |
| download | bcm5719-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.ll | 27 |
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 +} |

