summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Scalar/GVNHoist.cpp
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2017-09-05 20:49:41 +0000
committerDavide Italiano <davide@freebsd.org>2017-09-05 20:49:41 +0000
commit32504cf66132342f4871d5c0fb855ea0084371c6 (patch)
treef69a6ff846c050f5fe2bdf0bc60140af2076821a /llvm/lib/Transforms/Scalar/GVNHoist.cpp
parent9837e9945f83db7d1ffff75ef00d94a42f9fcf88 (diff)
downloadbcm5719-llvm-32504cf66132342f4871d5c0fb855ea0084371c6.tar.gz
bcm5719-llvm-32504cf66132342f4871d5c0fb855ea0084371c6.zip
[GVNHoist] Move duplicated code to a helper function. NFCI.
llvm-svn: 312575
Diffstat (limited to 'llvm/lib/Transforms/Scalar/GVNHoist.cpp')
-rw-r--r--llvm/lib/Transforms/Scalar/GVNHoist.cpp45
1 files changed, 21 insertions, 24 deletions
diff --git a/llvm/lib/Transforms/Scalar/GVNHoist.cpp b/llvm/lib/Transforms/Scalar/GVNHoist.cpp
index 29de792bd24..845e27c5383 100644
--- a/llvm/lib/Transforms/Scalar/GVNHoist.cpp
+++ b/llvm/lib/Transforms/Scalar/GVNHoist.cpp
@@ -387,6 +387,25 @@ private:
return false;
}
+ bool hasEHhelper(const BasicBlock *BB, const BasicBlock *SrcBB,
+ int &NBBsOnAllPaths) {
+ // Stop walk once the limit is reached.
+ if (NBBsOnAllPaths == 0)
+ return true;
+
+ // Impossible to hoist with exceptions on the path.
+ if (hasEH(BB))
+ return true;
+
+ // No such instruction after HoistBarrier in a basic block was
+ // selected for hoisting so instructions selected within basic block with
+ // a hoist barrier can be hoisted.
+ if ((BB != SrcBB) && HoistBarrier.count(BB))
+ return true;
+
+ return false;
+ }
+
// Return true when there are exception handling or loads of memory Def
// between Def and NewPt. This function is only called for stores: Def is
// the MemoryDef of the store to be hoisted.
@@ -414,18 +433,7 @@ private:
continue;
}
- // Stop walk once the limit is reached.
- if (NBBsOnAllPaths == 0)
- return true;
-
- // Impossible to hoist with exceptions on the path.
- if (hasEH(BB))
- return true;
-
- // No such instruction after HoistBarrier in a basic block was
- // selected for hoisting so instructions selected within basic block with
- // a hoist barrier can be hoisted.
- if ((BB != OldBB) && HoistBarrier.count(BB))
+ if (hasEHhelper(BB, OldBB, NBBsOnAllPaths))
return true;
// Check that we do not move a store past loads.
@@ -463,18 +471,7 @@ private:
continue;
}
- // Stop walk once the limit is reached.
- if (NBBsOnAllPaths == 0)
- return true;
-
- // Impossible to hoist with exceptions on the path.
- if (hasEH(BB))
- return true;
-
- // No such instruction after HoistBarrier in a basic block was
- // selected for hoisting so instructions selected within basic block with
- // a hoist barrier can be hoisted.
- if ((BB != SrcBB) && HoistBarrier.count(BB))
+ if (hasEHhelper(BB, SrcBB, NBBsOnAllPaths))
return true;
// -1 is unlimited number of blocks on all paths.
OpenPOWER on IntegriCloud