X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FCodeGen%2FGlobalMerge.cpp;h=da5c94595489df229988412f2d3ba166d114ac3b;hb=983d814835709d574d0f29d875cb11a32c2f65f8;hp=0feff250e649acfa9a3c1c304cfc9a7164c814de;hpb=f47cf2495ddda26f6df71d7849838ed915463687;p=oota-llvm.git diff --git a/lib/CodeGen/GlobalMerge.cpp b/lib/CodeGen/GlobalMerge.cpp index 0feff250e64..da5c9459548 100644 --- a/lib/CodeGen/GlobalMerge.cpp +++ b/lib/CodeGen/GlobalMerge.cpp @@ -441,13 +441,13 @@ bool GlobalMerge::doMerge(const SmallVectorImpl &Globals, M, MergedTy, isConst, GlobalValue::PrivateLinkage, MergedInit, "_MergedGlobals", nullptr, GlobalVariable::NotThreadLocal, AddrSpace); - for (ssize_t k = i, idx = 0; k != j; k = GlobalSet.find_next(k)) { + for (ssize_t k = i, idx = 0; k != j; k = GlobalSet.find_next(k), ++idx) { GlobalValue::LinkageTypes Linkage = Globals[k]->getLinkage(); std::string Name = Globals[k]->getName(); Constant *Idx[2] = { ConstantInt::get(Int32Ty, 0), - ConstantInt::get(Int32Ty, idx++) + ConstantInt::get(Int32Ty, idx), }; Constant *GEP = ConstantExpr::getInBoundsGetElementPtr(MergedTy, MergedGV, Idx); @@ -461,8 +461,7 @@ bool GlobalMerge::doMerge(const SmallVectorImpl &Globals, // MergedGlobals variable) may be dead stripped at link time. if (Linkage != GlobalValue::InternalLinkage || !TM->getTargetTriple().isOSBinFormatMachO()) { - auto *PTy = cast(GEP->getType()); - GlobalAlias::create(PTy, Linkage, Name, GEP, &M); + GlobalAlias::create(Tys[idx], AddrSpace, Linkage, Name, GEP, &M); } NumMerged++; @@ -569,9 +568,10 @@ bool GlobalMerge::doInitialization(Module &M) { if (P.second.size() > 1) Changed |= doMerge(P.second, M, false, P.first); - for (auto &P : ConstGlobals) - if (P.second.size() > 1) - Changed |= doMerge(P.second, M, true, P.first); + if (EnableGlobalMergeOnConst) + for (auto &P : ConstGlobals) + if (P.second.size() > 1) + Changed |= doMerge(P.second, M, true, P.first); return Changed; }