[llvm] r315519 - [Transforms] Revert r315516 changes in PredicateInfo to fix Windows build bots (NFC).

Eugene Zelenko via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 11 14:56:44 PDT 2017


Author: eugenezelenko
Date: Wed Oct 11 14:56:44 2017
New Revision: 315519

URL: http://llvm.org/viewvc/llvm-project?rev=315519&view=rev
Log:
[Transforms] Revert  r315516 changes in PredicateInfo to fix Windows build bots (NFC).

Modified:
    llvm/trunk/include/llvm/Transforms/Utils/PredicateInfo.h
    llvm/trunk/lib/Transforms/Utils/PredicateInfo.cpp

Modified: llvm/trunk/include/llvm/Transforms/Utils/PredicateInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Utils/PredicateInfo.h?rev=315519&r1=315518&r2=315519&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Transforms/Utils/PredicateInfo.h (original)
+++ llvm/trunk/include/llvm/Transforms/Utils/PredicateInfo.h Wed Oct 11 14:56:44 2017
@@ -1,4 +1,4 @@
-//===- PredicateInfo.h - Build PredicateInfo --------------------*- C++ -*-===//
+//===- PredicateInfo.h - Build PredicateInfo ----------------------*-C++-*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -6,7 +6,7 @@
 // License. See LICENSE.TXT for details.
 //
 //===----------------------------------------------------------------------===//
-//
+///
 /// \file
 /// \brief  This file implements the PredicateInfo analysis, which creates an Extended
 /// SSA form for operations used in branch comparisons and llvm.assume
@@ -44,7 +44,8 @@
 /// inserted where it would actually be live.  This means if there are no uses of
 /// an operation dominated by the branch edges, or by an assume, the associated
 /// predicate info is never inserted.
-//
+///
+///
 //===----------------------------------------------------------------------===//
 
 #ifndef LLVM_TRANSFORMS_UTILS_PREDICATEINFO_H
@@ -56,27 +57,39 @@
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/ilist.h"
 #include "llvm/ADT/ilist_node.h"
+#include "llvm/ADT/iterator.h"
+#include "llvm/Analysis/AssumptionCache.h"
+#include "llvm/IR/BasicBlock.h"
+#include "llvm/IR/Dominators.h"
 #include "llvm/IR/Instructions.h"
+#include "llvm/IR/IntrinsicInst.h"
+#include "llvm/IR/Module.h"
+#include "llvm/IR/OperandTraits.h"
+#include "llvm/IR/Type.h"
+#include "llvm/IR/Use.h"
+#include "llvm/IR/User.h"
+#include "llvm/IR/Value.h"
 #include "llvm/Pass.h"
+#include "llvm/PassAnalysisSupport.h"
+#include "llvm/Support/Casting.h"
+#include "llvm/Support/Compiler.h"
+#include "llvm/Support/ErrorHandling.h"
 #include "llvm/Transforms/Utils/OrderedInstructions.h"
+#include <algorithm>
+#include <cassert>
+#include <cstddef>
+#include <iterator>
+#include <memory>
 #include <utility>
 
 namespace llvm {
 
-class AssumptionCache;
-class BasicBlock;
 class DominatorTree;
 class Function;
-class IntrinsicInst;
+class Instruction;
+class MemoryAccess;
+class LLVMContext;
 class raw_ostream;
-class Value;
-
-// This name is used in a few places, so kick it into their own namespace
-namespace PredicateInfoClasses {
-
-struct ValueDFS;
-
-}
 
 enum PredicateType { PT_Branch, PT_Assume, PT_Switch };
 
@@ -85,12 +98,10 @@ enum PredicateType { PT_Branch, PT_Assum
 class PredicateBase : public ilist_node<PredicateBase> {
 public:
   PredicateType Type;
-
   // The original operand before we renamed it.
   // This can be use by passes, when destroying predicateinfo, to know
   // whether they can just drop the intrinsic, or have to merge metadata.
   Value *OriginalOp;
-
   PredicateBase(const PredicateBase &) = delete;
   PredicateBase &operator=(const PredicateBase &) = delete;
   PredicateBase() = delete;
@@ -103,7 +114,6 @@ protected:
 class PredicateWithCondition : public PredicateBase {
 public:
   Value *Condition;
-
   static bool classof(const PredicateBase *PB) {
     return PB->Type == PT_Assume || PB->Type == PT_Branch ||
            PB->Type == PT_Switch;
@@ -120,12 +130,10 @@ protected:
 class PredicateAssume : public PredicateWithCondition {
 public:
   IntrinsicInst *AssumeInst;
-
   PredicateAssume(Value *Op, IntrinsicInst *AssumeInst, Value *Condition)
       : PredicateWithCondition(PT_Assume, Op, Condition),
         AssumeInst(AssumeInst) {}
   PredicateAssume() = delete;
-
   static bool classof(const PredicateBase *PB) {
     return PB->Type == PT_Assume;
   }
@@ -138,9 +146,7 @@ class PredicateWithEdge : public Predica
 public:
   BasicBlock *From;
   BasicBlock *To;
-
   PredicateWithEdge() = delete;
-
   static bool classof(const PredicateBase *PB) {
     return PB->Type == PT_Branch || PB->Type == PT_Switch;
   }
@@ -156,13 +162,11 @@ class PredicateBranch : public Predicate
 public:
   // If true, SplitBB is the true successor, otherwise it's the false successor.
   bool TrueEdge;
-
   PredicateBranch(Value *Op, BasicBlock *BranchBB, BasicBlock *SplitBB,
                   Value *Condition, bool TakenEdge)
       : PredicateWithEdge(PT_Branch, Op, BranchBB, SplitBB, Condition),
         TrueEdge(TakenEdge) {}
   PredicateBranch() = delete;
-
   static bool classof(const PredicateBase *PB) {
     return PB->Type == PT_Branch;
   }
@@ -171,22 +175,24 @@ public:
 class PredicateSwitch : public PredicateWithEdge {
 public:
   Value *CaseValue;
-
   // This is the switch instruction.
   SwitchInst *Switch;
-
   PredicateSwitch(Value *Op, BasicBlock *SwitchBB, BasicBlock *TargetBB,
                   Value *CaseValue, SwitchInst *SI)
       : PredicateWithEdge(PT_Switch, Op, SwitchBB, TargetBB,
                           SI->getCondition()),
         CaseValue(CaseValue), Switch(SI) {}
   PredicateSwitch() = delete;
-
   static bool classof(const PredicateBase *PB) {
     return PB->Type == PT_Switch;
   }
 };
 
+// This name is used in a few places, so kick it into their own namespace
+namespace PredicateInfoClasses {
+struct ValueDFS;
+}
+
 /// \brief Encapsulates PredicateInfo, including all data associated with memory
 /// accesses.
 class PredicateInfo {
@@ -199,12 +205,11 @@ private:
     SmallVector<PredicateBase *, 4> Infos;
     SmallVector<PredicateBase *, 4> UninsertedInfos;
   };
-
   // This owns the all the predicate infos in the function, placed or not.
   iplist<PredicateBase> AllInfos;
 
 public:
-  PredicateInfo(Function &F, DominatorTree &DT, AssumptionCache &AC);
+  PredicateInfo(Function &, DominatorTree &, AssumptionCache &);
   ~PredicateInfo();
 
   void verifyPredicateInfo() const;
@@ -222,14 +227,13 @@ protected:
   friend class PredicateInfoPrinterLegacyPass;
 
 private:
-  using ValueDFS = PredicateInfoClasses::ValueDFS;
-  using ValueDFSStack = SmallVectorImpl<ValueDFS>;
-
   void buildPredicateInfo();
   void processAssume(IntrinsicInst *, BasicBlock *, SmallPtrSetImpl<Value *> &);
   void processBranch(BranchInst *, BasicBlock *, SmallPtrSetImpl<Value *> &);
   void processSwitch(SwitchInst *, BasicBlock *, SmallPtrSetImpl<Value *> &);
   void renameUses(SmallPtrSetImpl<Value *> &);
+  using ValueDFS = PredicateInfoClasses::ValueDFS;
+  typedef SmallVectorImpl<ValueDFS> ValueDFSStack;
   void convertUsesToDFSOrdered(Value *, SmallVectorImpl<ValueDFS> &);
   Value *materializeStack(unsigned int &, ValueDFSStack &, Value *);
   bool stackIsInScope(const ValueDFSStack &, const ValueDFS &) const;
@@ -238,27 +242,22 @@ private:
   void addInfoFor(SmallPtrSetImpl<Value *> &OpsToRename, Value *Op,
                   PredicateBase *PB);
   const ValueInfo &getValueInfo(Value *) const;
-
   Function &F;
   DominatorTree &DT;
   AssumptionCache &AC;
   OrderedInstructions OI;
-
   // This maps from copy operands to Predicate Info. Note that it does not own
   // the Predicate Info, they belong to the ValueInfo structs in the ValueInfos
   // vector.
   DenseMap<const Value *, const PredicateBase *> PredicateMap;
-
   // This stores info about each operand or comparison result we make copies
   // of.  The real ValueInfos start at index 1, index 0 is unused so that we can
   // more easily detect invalid indexing.
   SmallVector<ValueInfo, 32> ValueInfos;
-
   // This gives the index into the ValueInfos array for a given Value.  Because
   // 0 is not a valid Value Info index, you can use DenseMap::lookup and tell
   // whether it returned a valid result.
   DenseMap<Value *, unsigned int> ValueInfoNums;
-
   // The set of edges along which we can only handle phi uses, due to critical
   // edges.
   DenseSet<std::pair<BasicBlock *, BasicBlock *>> EdgeUsesOnly;
@@ -269,10 +268,9 @@ private:
 // the tests to be able to build, dump, and verify PredicateInfo.
 class PredicateInfoPrinterLegacyPass : public FunctionPass {
 public:
-  static char ID;
-
   PredicateInfoPrinterLegacyPass();
 
+  static char ID;
   bool runOnFunction(Function &) override;
   void getAnalysisUsage(AnalysisUsage &AU) const override;
 };
@@ -284,7 +282,6 @@ class PredicateInfoPrinterPass
 
 public:
   explicit PredicateInfoPrinterPass(raw_ostream &OS) : OS(OS) {}
-
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 };
 

Modified: llvm/trunk/lib/Transforms/Utils/PredicateInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/PredicateInfo.cpp?rev=315519&r1=315518&r2=315519&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/PredicateInfo.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/PredicateInfo.cpp Wed Oct 11 14:56:44 2017
@@ -1,78 +1,61 @@
-//===- PredicateInfo.cpp - PredicateInfo Builder --------------------------===//
+//===-- PredicateInfo.cpp - PredicateInfo Builder--------------------===//
 //
 //                     The LLVM Compiler Infrastructure
 //
 // This file is distributed under the University of Illinois Open Source
 // License. See LICENSE.TXT for details.
 //
-//===----------------------------------------------------------------------===//
+//===----------------------------------------------------------------===//
 //
 // This file implements the PredicateInfo class.
 //
-//===----------------------------------------------------------------------===//
+//===----------------------------------------------------------------===//
 
 #include "llvm/Transforms/Utils/PredicateInfo.h"
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/DepthFirstIterator.h"
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/SmallPtrSet.h"
-#include "llvm/ADT/SmallVector.h"
-#include "llvm/ADT/Twine.h"
+#include "llvm/ADT/Statistic.h"
 #include "llvm/Analysis/AssumptionCache.h"
-#include "llvm/IR/Argument.h"
+#include "llvm/Analysis/CFG.h"
 #include "llvm/IR/AssemblyAnnotationWriter.h"
-#include "llvm/IR/BasicBlock.h"
+#include "llvm/IR/DataLayout.h"
 #include "llvm/IR/Dominators.h"
-#include "llvm/IR/Function.h"
+#include "llvm/IR/GlobalVariable.h"
 #include "llvm/IR/IRBuilder.h"
-#include "llvm/IR/InstrTypes.h"
-#include "llvm/IR/Instruction.h"
-#include "llvm/IR/Instructions.h"
 #include "llvm/IR/IntrinsicInst.h"
-#include "llvm/IR/Intrinsics.h"
-#include "llvm/IR/PassManager.h"
+#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/Metadata.h"
+#include "llvm/IR/Module.h"
 #include "llvm/IR/PatternMatch.h"
-#include "llvm/IR/Use.h"
-#include "llvm/IR/User.h"
-#include "llvm/IR/Value.h"
-#include "llvm/Pass.h"
-#include "llvm/Support/Casting.h"
-#include "llvm/Support/CommandLine.h"
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/DebugCounter.h"
-#include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/FormattedStream.h"
-#include "llvm/Support/raw_ostream.h"
+#include "llvm/Transforms/Scalar.h"
 #include "llvm/Transforms/Utils/OrderedInstructions.h"
 #include <algorithm>
-#include <cassert>
-#include <cstddef>
-#include <tuple>
-#include <utility>
-
+#define DEBUG_TYPE "predicateinfo"
 using namespace llvm;
 using namespace PatternMatch;
 using namespace llvm::PredicateInfoClasses;
 
-#define DEBUG_TYPE "predicateinfo"
-
 INITIALIZE_PASS_BEGIN(PredicateInfoPrinterLegacyPass, "print-predicateinfo",
                       "PredicateInfo Printer", false, false)
 INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
 INITIALIZE_PASS_DEPENDENCY(AssumptionCacheTracker)
 INITIALIZE_PASS_END(PredicateInfoPrinterLegacyPass, "print-predicateinfo",
                     "PredicateInfo Printer", false, false)
-
 static cl::opt<bool> VerifyPredicateInfo(
     "verify-predicateinfo", cl::init(false), cl::Hidden,
     cl::desc("Verify PredicateInfo in legacy printer pass."));
-
 DEBUG_COUNTER(RenameCounter, "predicateinfo-rename",
               "Controls which variables are renamed with predicateinfo");
 
+namespace {
 // Given a predicate info that is a type of branching terminator, get the
 // branching block.
-static const BasicBlock *getBranchBlock(const PredicateBase *PB) {
+const BasicBlock *getBranchBlock(const PredicateBase *PB) {
   assert(isa<PredicateWithEdge>(PB) &&
          "Only branches and switches should have PHIOnly defs that "
          "require branch blocks.");
@@ -89,31 +72,17 @@ static Instruction *getBranchTerminator(
 
 // Given a predicate info that is a type of branching terminator, get the
 // edge this predicate info represents
-static const std::pair<BasicBlock *, BasicBlock *>
+const std::pair<BasicBlock *, BasicBlock *>
 getBlockEdge(const PredicateBase *PB) {
   assert(isa<PredicateWithEdge>(PB) &&
          "Not a predicate info type we know how to get an edge from.");
   const auto *PEdge = cast<PredicateWithEdge>(PB);
   return std::make_pair(PEdge->From, PEdge->To);
 }
-
-// Perform a strict weak ordering on instructions and arguments.
-static bool valueComesBefore(OrderedInstructions &OI, const Value *A,
-                             const Value *B) {
-  auto *ArgA = dyn_cast_or_null<Argument>(A);
-  auto *ArgB = dyn_cast_or_null<Argument>(B);
-  if (ArgA && !ArgB)
-    return true;
-  if (ArgB && !ArgA)
-    return false;
-  if (ArgA && ArgB)
-    return ArgA->getArgNo() < ArgB->getArgNo();
-  return OI.dominates(cast<Instruction>(A), cast<Instruction>(B));
 }
 
 namespace llvm {
 namespace PredicateInfoClasses {
-
 enum LocalNum {
   // Operations that must appear first in the block.
   LN_First,
@@ -138,12 +107,25 @@ struct ValueDFS {
   bool EdgeOnly = false;
 };
 
+// Perform a strict weak ordering on instructions and arguments.
+static bool valueComesBefore(OrderedInstructions &OI, const Value *A,
+                             const Value *B) {
+  auto *ArgA = dyn_cast_or_null<Argument>(A);
+  auto *ArgB = dyn_cast_or_null<Argument>(B);
+  if (ArgA && !ArgB)
+    return true;
+  if (ArgB && !ArgA)
+    return false;
+  if (ArgA && ArgB)
+    return ArgA->getArgNo() < ArgB->getArgNo();
+  return OI.dominates(cast<Instruction>(A), cast<Instruction>(B));
+}
+
 // This compares ValueDFS structures, creating OrderedBasicBlocks where
 // necessary to compare uses/defs in the same block.  Doing so allows us to walk
 // the minimum number of instructions necessary to compute our def/use ordering.
 struct ValueDFS_Compare {
   OrderedInstructions &OI;
-
   ValueDFS_Compare(OrderedInstructions &OI) : OI(OI) {}
 
   bool operator()(const ValueDFS &A, const ValueDFS &B) const {
@@ -237,8 +219,7 @@ struct ValueDFS_Compare {
   }
 };
 
-} // end namespace PredicateInfoClasses
-} // end namespace llvm
+} // namespace PredicateInfoClasses
 
 bool PredicateInfo::stackIsInScope(const ValueDFSStack &Stack,
                                    const ValueDFS &VDUse) const {
@@ -308,8 +289,7 @@ void PredicateInfo::convertUsesToDFSOrde
 
 // Collect relevant operations from Comparison that we may want to insert copies
 // for.
-static void collectCmpOps(CmpInst *Comparison,
-                          SmallVectorImpl<Value *> &CmpOperands) {
+void collectCmpOps(CmpInst *Comparison, SmallVectorImpl<Value *> &CmpOperands) {
   auto *Op0 = Comparison->getOperand(0);
   auto *Op1 = Comparison->getOperand(1);
   if (Op0 == Op1)
@@ -444,7 +424,6 @@ void PredicateInfo::processBranch(Branch
     CmpOperands.clear();
   }
 }
-
 // Process a block terminating switch, and place relevant operations to be
 // renamed into OpsToRename.
 void PredicateInfo::processSwitch(SwitchInst *SI, BasicBlock *BranchBB,
@@ -718,7 +697,7 @@ PredicateInfo::PredicateInfo(Function &F
   buildPredicateInfo();
 }
 
-PredicateInfo::~PredicateInfo() = default;
+PredicateInfo::~PredicateInfo() {}
 
 void PredicateInfo::verifyPredicateInfo() const {}
 
@@ -760,17 +739,16 @@ PreservedAnalyses PredicateInfoPrinterPa
 /// comments.
 class PredicateInfoAnnotatedWriter : public AssemblyAnnotationWriter {
   friend class PredicateInfo;
-
   const PredicateInfo *PredInfo;
 
 public:
   PredicateInfoAnnotatedWriter(const PredicateInfo *M) : PredInfo(M) {}
 
-  void emitBasicBlockStartAnnot(const BasicBlock *BB,
-                                formatted_raw_ostream &OS) override {}
+  virtual void emitBasicBlockStartAnnot(const BasicBlock *BB,
+                                        formatted_raw_ostream &OS) {}
 
-  void emitInstructionAnnot(const Instruction *I,
-                            formatted_raw_ostream &OS) override {
+  virtual void emitInstructionAnnot(const Instruction *I,
+                                    formatted_raw_ostream &OS) {
     if (const auto *PI = PredInfo->getPredicateInfoFor(I)) {
       OS << "; Has predicate info\n";
       if (const auto *PB = dyn_cast<PredicateBranch>(PI)) {
@@ -813,3 +791,4 @@ PreservedAnalyses PredicateInfoVerifierP
 
   return PreservedAnalyses::all();
 }
+}




More information about the llvm-commits mailing list