@@ -202,12 +202,13 @@ class GlobalMerge : public FunctionPass {
202202
203203 explicit GlobalMerge (const TargetMachine *TM, unsigned MaximalOffset,
204204 bool OnlyOptimizeForSize, bool MergeExternalGlobals,
205- bool MergeConstantGlobals)
205+ bool MergeConstantGlobals, bool MergeConstAggressive )
206206 : FunctionPass(ID), TM(TM) {
207207 Opt.MaxOffset = MaximalOffset;
208208 Opt.SizeOnly = OnlyOptimizeForSize;
209209 Opt.MergeExternal = MergeExternalGlobals;
210210 Opt.MergeConstantGlobals = MergeConstantGlobals;
211+ Opt.MergeConstAggressive = MergeConstAggressive;
211212 initializeGlobalMergePass (*PassRegistry::getPassRegistry ());
212213 }
213214
@@ -268,7 +269,7 @@ bool GlobalMergeImpl::doMerge(SmallVectorImpl<GlobalVariable *> &Globals,
268269 });
269270
270271 // If we want to just blindly group all globals together, do so.
271- if (!GlobalMergeGroupByUse || (GlobalMergeAllConst && isConst)) {
272+ if (!GlobalMergeGroupByUse || (Opt. MergeConstAggressive && isConst)) {
272273 BitVector AllGlobals (Globals.size ());
273274 AllGlobals.set ();
274275 return doMerge (Globals, AllGlobals, M, isConst, AddrSpace);
@@ -758,10 +759,14 @@ bool GlobalMergeImpl::run(Module &M) {
758759Pass *llvm::createGlobalMergePass (const TargetMachine *TM, unsigned Offset,
759760 bool OnlyOptimizeForSize,
760761 bool MergeExternalByDefault,
761- bool MergeConstantByDefault) {
762+ bool MergeConstantByDefault,
763+ bool MergeConstAggressiveByDefault) {
762764 bool MergeExternal = (EnableGlobalMergeOnExternal == cl::BOU_UNSET) ?
763765 MergeExternalByDefault : (EnableGlobalMergeOnExternal == cl::BOU_TRUE);
764766 bool MergeConstant = EnableGlobalMergeOnConst || MergeConstantByDefault;
767+ bool MergeConstAggressive = GlobalMergeAllConst.getNumOccurrences () > 0
768+ ? GlobalMergeAllConst
769+ : MergeConstAggressiveByDefault;
765770 return new GlobalMerge (TM, Offset, OnlyOptimizeForSize, MergeExternal,
766- MergeConstant);
771+ MergeConstant, MergeConstAggressive );
767772}
0 commit comments