1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 11:13:28 +01:00

[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

llvm-svn: 288141
This commit is contained in:
Aditya Kumar 2016-11-29 14:34:01 +00:00
parent b228a39a42
commit 830876ec2a

View File

@ -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<const BasicBlock *> &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)