diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/SCCP.cpp | 13 | 
1 files changed, 7 insertions, 6 deletions
diff --git a/llvm/lib/Transforms/Scalar/SCCP.cpp b/llvm/lib/Transforms/Scalar/SCCP.cpp index 1d0354bd708..4093e50ce89 100644 --- a/llvm/lib/Transforms/Scalar/SCCP.cpp +++ b/llvm/lib/Transforms/Scalar/SCCP.cpp @@ -20,6 +20,7 @@  #include "llvm/ADT/ArrayRef.h"  #include "llvm/ADT/DenseMap.h"  #include "llvm/ADT/DenseSet.h" +#include "llvm/ADT/MapVector.h"  #include "llvm/ADT/PointerIntPair.h"  #include "llvm/ADT/STLExtras.h"  #include "llvm/ADT/SmallPtrSet.h" @@ -209,11 +210,11 @@ class SCCPSolver : public InstVisitor<SCCPSolver> {    /// TrackedRetVals - If we are tracking arguments into and the return    /// value out of a function, it will have an entry in this map, indicating    /// what the known return value for the function is. -  DenseMap<Function *, LatticeVal> TrackedRetVals; +  MapVector<Function *, LatticeVal> TrackedRetVals;    /// TrackedMultipleRetVals - Same as TrackedRetVals, but used for functions    /// that return multiple values. -  DenseMap<std::pair<Function *, unsigned>, LatticeVal> TrackedMultipleRetVals; +  MapVector<std::pair<Function *, unsigned>, LatticeVal> TrackedMultipleRetVals;    /// MRVFunctionsTracked - Each function in TrackedMultipleRetVals is    /// represented here for efficient lookup. @@ -371,7 +372,7 @@ public:    }    /// getTrackedRetVals - Get the inferred return value map. -  const DenseMap<Function*, LatticeVal> &getTrackedRetVals() { +  const MapVector<Function*, LatticeVal> &getTrackedRetVals() {      return TrackedRetVals;    } @@ -837,7 +838,7 @@ void SCCPSolver::visitReturnInst(ReturnInst &I) {    // If we are tracking the return value of this function, merge it in.    if (!TrackedRetVals.empty() && !ResultOp->getType()->isStructTy()) { -    DenseMap<Function*, LatticeVal>::iterator TFRVI = +    MapVector<Function*, LatticeVal>::iterator TFRVI =        TrackedRetVals.find(F);      if (TFRVI != TrackedRetVals.end()) {        mergeInValue(TFRVI->second, F, getValueState(ResultOp)); @@ -1351,7 +1352,7 @@ CallOverdefined:        mergeInValue(getStructValueState(I, i), I,                     TrackedMultipleRetVals[std::make_pair(F, i)]);    } else { -    DenseMap<Function*, LatticeVal>::iterator TFRVI = TrackedRetVals.find(F); +    MapVector<Function*, LatticeVal>::iterator TFRVI = TrackedRetVals.find(F);      if (TFRVI == TrackedRetVals.end())        goto CallOverdefined;  // Not tracking this callee. @@ -2158,7 +2159,7 @@ bool llvm::runIPSCCP(    // whether other functions are optimizable.    SmallVector<ReturnInst*, 8> ReturnsToZap; -  const DenseMap<Function*, LatticeVal> &RV = Solver.getTrackedRetVals(); +  const MapVector<Function*, LatticeVal> &RV = Solver.getTrackedRetVals();    for (const auto &I : RV) {      Function *F = I.first;      if (I.second.isOverdefined() || F->getReturnType()->isVoidTy())  | 

