From: Aditya Kumar Date: Tue, 29 Nov 2016 14:34:01 +0000 (+0000) Subject: [GVNHoist] Enable aggressive hoisting when optimizing for code-size X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=06f75183e3feaf265b165f9ad4fe84201ed28108;p=llvm [GVNHoist] Enable aggressive hoisting when optimizing for code-size Enable scalar hoisting at -Oz as it is safe to hoist scalars to a place where they are partially needed. Differential Revision: https://reviews.llvm.org/D27111 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288141 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Scalar/GVNHoist.cpp b/lib/Transforms/Scalar/GVNHoist.cpp index 7de1b37df19..5b2f1b6277f 100644 --- a/lib/Transforms/Scalar/GVNHoist.cpp +++ b/lib/Transforms/Scalar/GVNHoist.cpp @@ -202,7 +202,12 @@ public: GVNHoist(DominatorTree *DT, AliasAnalysis *AA, MemoryDependenceResults *MD, MemorySSA *MSSA, bool OptForMinSize) : DT(DT), AA(AA), MD(MD), MSSA(MSSA), OptForMinSize(OptForMinSize), - HoistingGeps(OptForMinSize), HoistedCtr(0) {} + HoistingGeps(OptForMinSize), HoistedCtr(0) { + // Hoist as far as possible when optimizing for code-size. + if (OptForMinSize) + MaxNumberOfBBSInPath = -1; + } + bool run(Function &F) { VN.setDomTree(DT); VN.setAliasAnalysis(AA); @@ -500,10 +505,13 @@ private: bool safeToHoistScalar(const BasicBlock *HoistBB, SmallPtrSetImpl &WL, int &NBBsOnAllPaths) { - // Check that the hoisted expression is needed on all paths. Enable scalar - // hoisting at -Oz as it is safe to hoist scalars to a place where they are - // partially needed. - if (!OptForMinSize && !hoistingFromAllPaths(HoistBB, WL)) + // Enable scalar hoisting at -Oz as it is safe to hoist scalars to a place + // where they are partially needed. + if (OptForMinSize) + return true; + + // Check that the hoisted expression is needed on all paths. + if (!hoistingFromAllPaths(HoistBB, WL)) return false; for (const BasicBlock *BB : WL)