[PATCH] D99909: [GVN] Add missing ICF update
Arthur Eubanks via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 6 10:16:55 PDT 2021
This revision was automatically updated to reflect the committed changes.
Closed by commit rG4e83e59eb8f0: [GVN] Add missing ICF update (authored by aeubanks).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D99909/new/
https://reviews.llvm.org/D99909
Files:
llvm/lib/Transforms/Scalar/GVN.cpp
llvm/test/Transforms/GVN/pr49193.ll
Index: llvm/test/Transforms/GVN/pr49193.ll
===================================================================
--- /dev/null
+++ llvm/test/Transforms/GVN/pr49193.ll
@@ -0,0 +1,58 @@
+; RUN: opt -passes=gvn -S < %s | FileCheck %s
+
+ at a = external local_unnamed_addr global i32, align 4
+ at b = external local_unnamed_addr global i32, align 4
+
+; Function Attrs: nounwind readnone
+declare i32* @j() local_unnamed_addr #0
+
+; CHECK: define {{.*}}@k()
+
+define i64 @k() local_unnamed_addr {
+bb:
+ br i1 undef, label %bb10.preheader, label %bb3
+
+bb10.preheader: ; preds = %bb
+ br label %bb13
+
+bb3: ; preds = %bb
+ %i4 = load i32, i32* @a, align 4
+ %i5.not = icmp eq i32 %i4, 0
+ br label %bb7
+
+bb7: ; preds = %bb3
+ %i8 = tail call i32* @j()
+ br label %bb37
+
+bb13: ; preds = %bb34, %bb10.preheader
+ br i1 undef, label %bb30thread-pre-split, label %bb16
+
+bb16: ; preds = %bb13
+ %i17 = tail call i32* @j()
+ br i1 undef, label %bb22thread-pre-split, label %bb37.loopexit
+
+bb22thread-pre-split: ; preds = %bb16
+ br label %bb27
+
+bb27: ; preds = %bb22thread-pre-split
+ br i1 undef, label %bb30thread-pre-split, label %bb37.loopexit
+
+bb30thread-pre-split: ; preds = %bb27, %bb13
+ %i31.pr = load i32, i32* @a, align 4
+ %i32.not2 = icmp eq i32 %i31.pr, 0
+ br label %bb34
+
+bb34: ; preds = %bb30thread-pre-split
+ br i1 undef, label %bb37.loopexit, label %bb13
+
+bb37.loopexit: ; preds = %bb34, %bb27, %bb16
+ br label %bb37
+
+bb37: ; preds = %bb37.loopexit, %bb7
+ %i38 = load i32, i32* @a, align 4
+ store i32 %i38, i32* @b, align 4
+ %i39 = tail call i32* @j()
+ unreachable
+}
+
+attributes #0 = { nounwind readnone }
Index: llvm/lib/Transforms/Scalar/GVN.cpp
===================================================================
--- llvm/lib/Transforms/Scalar/GVN.cpp
+++ llvm/lib/Transforms/Scalar/GVN.cpp
@@ -2466,6 +2466,8 @@
Instr->setName(Instr->getName() + ".pre");
Instr->setDebugLoc(Instr->getDebugLoc());
+ ICF->insertInstructionTo(Instr, Pred);
+
unsigned Num = VN.lookupOrAdd(Instr);
VN.add(Instr, Num);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D99909.335575.patch
Type: text/x-patch
Size: 2509 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210406/bc1e0698/attachment.bin>
More information about the llvm-commits
mailing list