[PATCH] D39781: [GVNHoist] Fix: PR35222 gvn-hoist incorrectly erases load

Aditya Kumar via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 5 05:58:12 PST 2017


hiraditya updated this revision to Diff 125508.
hiraditya edited the summary of this revision.

https://reviews.llvm.org/D39781

Files:
  lib/Transforms/Scalar/GVNHoist.cpp
  test/Transforms/GVNHoist/pr35222-hoist-load.ll


Index: test/Transforms/GVNHoist/pr35222-hoist-load.ll
===================================================================
--- /dev/null
+++ test/Transforms/GVNHoist/pr35222-hoist-load.ll
@@ -0,0 +1,25 @@
+; RUN: opt -S -gvn-hoist < %s | FileCheck %s
+; CHECK: load
+; CHECK: load
+; Check that the load is not hoisted because the call can potentially
+; modify the global
+
+target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
+
+ at heap = external global i32, align 4
+
+define i32 @build_tree() unnamed_addr {
+entry:
+  br label %do.body
+
+do.body:                                          ; preds = %do.body, %entry
+  %tmp9 = load i32, i32* @heap, align 4
+  %cmp = call i1 @pqdownheap(i32 %tmp9)
+  br i1 %cmp, label %do.body, label %do.end
+
+do.end:                                           ; preds = %do.body
+  %tmp20 = load i32, i32* @heap, align 4
+  ret i32 %tmp20
+}
+
+declare i1 @pqdownheap(i32)
Index: lib/Transforms/Scalar/GVNHoist.cpp
===================================================================
--- lib/Transforms/Scalar/GVNHoist.cpp
+++ lib/Transforms/Scalar/GVNHoist.cpp
@@ -795,8 +795,8 @@
       for (auto IDFB : IDFBlocks) { // TODO: Prune out useless CHI insertions.
         for (unsigned i = 0; i < V.size(); ++i) {
           CHIArg C = {VN, nullptr, nullptr};
-          if (DT->dominates(IDFB, V[i]->getParent())) { // Ignore spurious PDFs.
-            // InValue[V[i]->getParent()].push_back(std::make_pair(VN, V[i]));
+           // Ignore spurious PDFs.
+          if (DT->properlyDominates(IDFB, V[i]->getParent())) {
             OutValue[IDFB].push_back(C);
             DEBUG(dbgs() << "\nInsertion a CHI for BB: " << IDFB->getName()
                          << ", for Insn: " << *V[i]);


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D39781.125508.patch
Type: text/x-patch
Size: 1753 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171205/32eebec7/attachment.bin>


More information about the llvm-commits mailing list