From e0de59ac918c694537637caef87bad07a0334e09 Mon Sep 17 00:00:00 2001 From: Teresa Johnson Date: Fri, 12 Jun 2015 03:12:00 +0000 Subject: [PATCH] Revert commit r239480 as it causes https://code.google.com/p/chromium/issues/detail?id=499508#c3. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239589 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/InitializePasses.h | 1 - include/llvm/Transforms/IPO.h | 6 -- .../llvm/Transforms/IPO/PassManagerBuilder.h | 1 - lib/Transforms/IPO/CMakeLists.txt | 1 - lib/Transforms/IPO/ElimAvailExtern.cpp | 96 ------------------- lib/Transforms/IPO/PassManagerBuilder.cpp | 12 --- 6 files changed, 117 deletions(-) delete mode 100644 lib/Transforms/IPO/ElimAvailExtern.cpp diff --git a/include/llvm/InitializePasses.h b/include/llvm/InitializePasses.h index f6b497dc78c..4f95c886800 100644 --- a/include/llvm/InitializePasses.h +++ b/include/llvm/InitializePasses.h @@ -130,7 +130,6 @@ void initializeSanitizerCoverageModulePass(PassRegistry&); void initializeDataFlowSanitizerPass(PassRegistry&); void initializeScalarizerPass(PassRegistry&); void initializeEarlyCSELegacyPassPass(PassRegistry &); -void initializeEliminateAvailableExternallyPass(PassRegistry&); void initializeExpandISelPseudosPass(PassRegistry&); void initializeFunctionAttrsPass(PassRegistry&); void initializeGCMachineCodeAnalysisPass(PassRegistry&); diff --git a/include/llvm/Transforms/IPO.h b/include/llvm/Transforms/IPO.h index 2ea47301bb4..fbd999cbc94 100644 --- a/include/llvm/Transforms/IPO.h +++ b/include/llvm/Transforms/IPO.h @@ -70,12 +70,6 @@ ModulePass *createGlobalOptimizerPass(); /// ModulePass *createGlobalDCEPass(); -//===----------------------------------------------------------------------===// -/// This transform is designed to eliminate available external globals -/// (functions or global variables) -/// -ModulePass *createEliminateAvailableExternallyPass(); - //===----------------------------------------------------------------------===// /// createGVExtractionPass - If deleteFn is true, this pass deletes /// the specified global values. Otherwise, it deletes as much of the module as diff --git a/include/llvm/Transforms/IPO/PassManagerBuilder.h b/include/llvm/Transforms/IPO/PassManagerBuilder.h index 1334dd0da23..5d574ae0bf0 100644 --- a/include/llvm/Transforms/IPO/PassManagerBuilder.h +++ b/include/llvm/Transforms/IPO/PassManagerBuilder.h @@ -121,7 +121,6 @@ public: bool VerifyInput; bool VerifyOutput; bool MergeFunctions; - bool PrepareForLTO; private: /// ExtensionList - This is list of all of the extensions that are registered. diff --git a/lib/Transforms/IPO/CMakeLists.txt b/lib/Transforms/IPO/CMakeLists.txt index 336dac45e13..3df17b920a9 100644 --- a/lib/Transforms/IPO/CMakeLists.txt +++ b/lib/Transforms/IPO/CMakeLists.txt @@ -3,7 +3,6 @@ add_llvm_library(LLVMipo BarrierNoopPass.cpp ConstantMerge.cpp DeadArgumentElimination.cpp - ElimAvailExtern.cpp ExtractGV.cpp FunctionAttrs.cpp GlobalDCE.cpp diff --git a/lib/Transforms/IPO/ElimAvailExtern.cpp b/lib/Transforms/IPO/ElimAvailExtern.cpp deleted file mode 100644 index e70ab871b88..00000000000 --- a/lib/Transforms/IPO/ElimAvailExtern.cpp +++ /dev/null @@ -1,96 +0,0 @@ -//===-- ElimAvailExtern.cpp - DCE unreachable internal functions ----------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This transform is designed to eliminate available external global -// definitions from the program, turning them into declarations. -// -//===----------------------------------------------------------------------===// - -#include "llvm/Transforms/IPO.h" -#include "llvm/ADT/Statistic.h" -#include "llvm/IR/Constants.h" -#include "llvm/IR/Instructions.h" -#include "llvm/IR/Module.h" -#include "llvm/Transforms/Utils/CtorUtils.h" -#include "llvm/Transforms/Utils/GlobalStatus.h" -#include "llvm/Pass.h" -using namespace llvm; - -#define DEBUG_TYPE "elim-avail-extern" - -STATISTIC(NumAliases , "Number of global aliases removed"); -STATISTIC(NumFunctions, "Number of functions removed"); -STATISTIC(NumVariables, "Number of global variables removed"); - -namespace { - struct EliminateAvailableExternally : public ModulePass { - static char ID; // Pass identification, replacement for typeid - EliminateAvailableExternally() : ModulePass(ID) { - initializeEliminateAvailableExternallyPass( - *PassRegistry::getPassRegistry()); - } - - // run - Do the EliminateAvailableExternally pass on the specified module, - // optionally updating the specified callgraph to reflect the changes. - // - bool runOnModule(Module &M) override; - }; -} - -char EliminateAvailableExternally::ID = 0; -INITIALIZE_PASS(EliminateAvailableExternally, "elim-avail-extern", - "Eliminate Available Externally Globals", false, false) - -ModulePass *llvm::createEliminateAvailableExternallyPass() { - return new EliminateAvailableExternally(); -} - -bool EliminateAvailableExternally::runOnModule(Module &M) { - bool Changed = false; - - // Drop initializers of available externally global variables. - for (Module::global_iterator I = M.global_begin(), E = M.global_end(); - I != E; ++I) { - if (!I->hasAvailableExternallyLinkage()) - continue; - if (I->hasInitializer()) { - Constant *Init = I->getInitializer(); - I->setInitializer(nullptr); - if (isSafeToDestroyConstant(Init)) - Init->destroyConstant(); - } - I->removeDeadConstantUsers(); - I->setLinkage(GlobalValue::ExternalLinkage); - NumVariables++; - } - - // Drop the bodies of available externally functions. - for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) { - if (!I->hasAvailableExternallyLinkage()) - continue; - if (!I->isDeclaration()) - // This will set the linkage to external - I->deleteBody(); - I->removeDeadConstantUsers(); - NumFunctions++; - } - - // Drop targets of available externally aliases. - for (Module::alias_iterator I = M.alias_begin(), E = M.alias_end(); I != E; - ++I) { - if (!I->hasAvailableExternallyLinkage()) - continue; - I->setAliasee(nullptr); - I->removeDeadConstantUsers(); - I->setLinkage(GlobalValue::ExternalLinkage); - NumAliases++; - } - - return Changed; -} diff --git a/lib/Transforms/IPO/PassManagerBuilder.cpp b/lib/Transforms/IPO/PassManagerBuilder.cpp index a067a4b4525..963f1bb13aa 100644 --- a/lib/Transforms/IPO/PassManagerBuilder.cpp +++ b/lib/Transforms/IPO/PassManagerBuilder.cpp @@ -105,7 +105,6 @@ PassManagerBuilder::PassManagerBuilder() { VerifyInput = false; VerifyOutput = false; MergeFunctions = false; - PrepareForLTO = false; } PassManagerBuilder::~PassManagerBuilder() { @@ -402,17 +401,6 @@ void PassManagerBuilder::populateModulePassManager( // GlobalOpt already deletes dead functions and globals, at -O2 try a // late pass of GlobalDCE. It is capable of deleting dead cycles. if (OptLevel > 1) { - if (!PrepareForLTO) { - // Remove avail extern fns and globals definitions if we aren't - // compiling an object file for later LTO. For LTO we want to preserve - // these so they are eligible for inlining at link-time. Note if they - // are unreferenced they will be removed by GlobalDCE below, so - // this only impacts referenced available externally globals. - // Eventually they will be suppressed during codegen, but eliminating - // here enables more opportunity for GlobalDCE as it may make - // globals referenced by available external functions dead. - MPM.add(createEliminateAvailableExternallyPass()); - } MPM.add(createGlobalDCEPass()); // Remove dead fns and globals. MPM.add(createConstantMergePass()); // Merge dup global constants } -- 2.34.1