diff options
| author | Eric Christopher <echristo@gmail.com> | 2019-07-22 21:04:23 +0000 | 
|---|---|---|
| committer | Eric Christopher <echristo@gmail.com> | 2019-07-22 21:04:23 +0000 | 
| commit | 77dc6d2479a36e805861e2bd3ef1e226d78f606f (patch) | |
| tree | 29b36e92a7096e888e1a361f3d543080e1ea52d1 /llvm/lib/Transforms | |
| parent | 9285295f75a231dc446fa7cbc10a0a391b3434a5 (diff) | |
| download | bcm5719-llvm-77dc6d2479a36e805861e2bd3ef1e226d78f606f.tar.gz bcm5719-llvm-77dc6d2479a36e805861e2bd3ef1e226d78f606f.zip | |
Temporarily Revert "[Attributor] Liveness analysis." as it's breaking the build.
This reverts commit 9285295f75a231dc446fa7cbc10a0a391b3434a5.
llvm-svn: 366737
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/IPO/Attributor.cpp | 174 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Utils/Local.cpp | 2 | 
2 files changed, 1 insertions, 175 deletions
| diff --git a/llvm/lib/Transforms/IPO/Attributor.cpp b/llvm/lib/Transforms/IPO/Attributor.cpp index f4e2ed4df98..fa5dbc23014 100644 --- a/llvm/lib/Transforms/IPO/Attributor.cpp +++ b/llvm/lib/Transforms/IPO/Attributor.cpp @@ -16,7 +16,6 @@  #include "llvm/Transforms/IPO/Attributor.h"  #include "llvm/ADT/DepthFirstIterator.h" -#include "llvm/ADT/STLExtras.h"  #include "llvm/ADT/SetVector.h"  #include "llvm/ADT/SmallPtrSet.h"  #include "llvm/ADT/SmallVector.h" @@ -32,9 +31,6 @@  #include "llvm/Support/CommandLine.h"  #include "llvm/Support/Debug.h"  #include "llvm/Support/raw_ostream.h" -#include "llvm/Transforms/Utils/BasicBlockUtils.h" -#include "llvm/Transforms/Utils/Local.h" -  #include <cassert>  using namespace llvm; @@ -1415,173 +1411,6 @@ ChangeStatus AANoAliasReturned::updateImpl(Attributor &A) {    return ChangeStatus::UNCHANGED;  } -/// -------------------AAIsDead Function Attribute----------------------- - -struct AAIsDeadFunction : AAIsDead, BooleanState { - -  AAIsDeadFunction(Function &F, InformationCache &InfoCache) -      : AAIsDead(F, InfoCache) {} - -  /// See AbstractAttribute::getState() -  /// { -  AbstractState &getState() override { return *this; } -  const AbstractState &getState() const override { return *this; } -  /// } - -  /// See AbstractAttribute::getManifestPosition(). -  ManifestPosition getManifestPosition() const override { return MP_FUNCTION; } - -  void initialize(Attributor &A) override { -    Function &F = getAnchorScope(); - -    ToBeExploredPaths.insert(&(F.getEntryBlock().front())); -    AssumedLiveBlocks.insert(&(F.getEntryBlock())); -    for (size_t i = 0; i < ToBeExploredPaths.size(); ++i) -      explorePath(A, ToBeExploredPaths[i]); -  } - -  /// Explores new instructions starting from \p I. If instruction is dead, stop -  /// and return true if it discovered a new instruction. -  bool explorePath(Attributor &A, Instruction *I); - -  const std::string getAsStr() const override { -    return "LiveBBs(" + std::to_string(AssumedLiveBlocks.size()) + "/" + -           std::to_string(getAnchorScope().size()) + ")"; -  } - -  /// See AbstractAttribute::manifest(...). -  ChangeStatus manifest(Attributor &A) override { -    assert(getState().isValidState() && -           "Attempted to manifest an invalid state!"); - -    ChangeStatus HasChanged = ChangeStatus::UNCHANGED; - -    for (Instruction *I : NoReturnCalls) { -      BasicBlock *BB = I->getParent(); - -      /// Invoke is replaced with a call and unreachable is placed after it. -      if (auto *II = dyn_cast<InvokeInst>(I)) { -        changeToCall(II); -        changeToUnreachable(BB->getTerminator(), /* UseLLVMTrap */ false); -        LLVM_DEBUG(dbgs() << "[AAIsDead] Replaced invoke with call inst\n"); -        continue; -      } - -      SplitBlock(BB, I->getNextNode()); -      changeToUnreachable(BB->getTerminator(), /* UseLLVMTrap */ false); -      HasChanged = ChangeStatus::CHANGED; -    } - -    return HasChanged; -  } - -  /// See AbstractAttribute::updateImpl(...). -  ChangeStatus updateImpl(Attributor &A) override; - -  /// See AAIsDead::isAssumedDead(). -  bool isAssumedDead(BasicBlock *BB) const override { -    if (!getAssumed()) -      return false; -    return !AssumedLiveBlocks.count(BB); -  } - -  /// See AAIsDead::isKnownDead(). -  bool isKnownDead(BasicBlock *BB) const override { -    if (!getKnown()) -      return false; -    return !AssumedLiveBlocks.count(BB); -  } - -  /// Collection of to be explored paths. -  SmallSetVector<Instruction *, 8> ToBeExploredPaths; - -  /// Collection of all assumed live BasicBlocks. -  DenseSet<BasicBlock *> AssumedLiveBlocks; - -  /// Collection of calls with noreturn attribute, assumed or knwon. -  SmallSetVector<Instruction *, 4> NoReturnCalls; -}; - -bool AAIsDeadFunction::explorePath(Attributor &A, Instruction *I) { -  BasicBlock *BB = I->getParent(); - -  while (I) { -    ImmutableCallSite ICS(I); - -    if (ICS) { -      auto *NoReturnAA = A.getAAFor<AANoReturn>(*this, *I); - -      if (NoReturnAA && NoReturnAA->isAssumedNoReturn()) { -        if (!NoReturnCalls.insert(I)) -          // If I is already in the NoReturnCalls set, then it stayed noreturn -          // and we didn't discover any new instructions. -          return false; - -        // Discovered new noreturn call, return true to indicate that I is not -        // noreturn anymore and should be deleted from NoReturnCalls. -        return true; -      } - -      if (ICS.hasFnAttr(Attribute::NoReturn)) { -        if(!NoReturnCalls.insert(I)) -          return false; - -        return true; -      } -    } - -    I = I->getNextNode(); -  } - -  // get new paths (reachable blocks). -  for (BasicBlock *SuccBB : successors(BB)) { -    Instruction *Inst = &(SuccBB->front()); -    AssumedLiveBlocks.insert(SuccBB); -    ToBeExploredPaths.insert(Inst); -  } - -  return true; -} - -ChangeStatus AAIsDeadFunction::updateImpl(Attributor &A) { -  Function &F = getAnchorScope(); - -  // Temporary collection to iterate over existing noreturn instructions. This -  // will alow easier modification of NoReturnCalls collection -  SmallVector<Instruction *, 8> NoReturnChanged; -  ChangeStatus Status = ChangeStatus::UNCHANGED; - -  for (Instruction *I : NoReturnCalls) -    NoReturnChanged.push_back(I); - -  for (Instruction *I : NoReturnChanged) { -    size_t Size = ToBeExploredPaths.size(); - -    // Still noreturn. -    if (!explorePath(A, I)) -      continue; - -    NoReturnCalls.remove(I); - -    // No new paths. -    if (Size == ToBeExploredPaths.size()) -      continue; - -    // At least one new path. -    Status = ChangeStatus::CHANGED; - -    // explore new paths. -    while (Size != ToBeExploredPaths.size()) -      explorePath(A, ToBeExploredPaths[Size++]); -  } - -  LLVM_DEBUG(dbgs() << "[AAIsDead] AssumedLiveBlocks: " -                    << AssumedLiveBlocks.size() -                    << "Total number of blocks: " << F.size() << "\n"); - -  return Status; -} -  /// ----------------------------------------------------------------------------  ///                               Attributor  /// ---------------------------------------------------------------------------- @@ -1798,9 +1627,6 @@ void Attributor::identifyDefaultAbstractAttributes(    // Every function might be "will-return".    registerAA(*new AAWillReturnFunction(F, InfoCache)); -  // Check for dead BasicBlocks in every function. -  registerAA(*new AAIsDeadFunction(F, InfoCache)); -    // Walk all instructions to find more attribute opportunities and also    // interesting instructions that might be queried by abstract attributes    // during their initialization or update. diff --git a/llvm/lib/Transforms/Utils/Local.cpp b/llvm/lib/Transforms/Utils/Local.cpp index 62c7dd6b71f..be160541117 100644 --- a/llvm/lib/Transforms/Utils/Local.cpp +++ b/llvm/lib/Transforms/Utils/Local.cpp @@ -1964,7 +1964,7 @@ unsigned llvm::changeToUnreachable(Instruction *I, bool UseLLVMTrap,  }  /// changeToCall - Convert the specified invoke into a normal call. -void llvm::changeToCall(InvokeInst *II, DomTreeUpdater *DTU = nullptr) { +static void changeToCall(InvokeInst *II, DomTreeUpdater *DTU = nullptr) {    SmallVector<Value*, 8> Args(II->arg_begin(), II->arg_end());    SmallVector<OperandBundleDef, 1> OpBundles;    II->getOperandBundlesAsDefs(OpBundles); | 

