From: Eugene Zelenko Date: Thu, 31 Aug 2017 21:56:16 +0000 (+0000) Subject: [Analysis] Fix some Clang-tidy modernize-use-using and Include What You Use warnings... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=046ca0444537c9beab4d6d2ad0be4a9cd6df4cf0;p=llvm [Analysis] Fix some Clang-tidy modernize-use-using and Include What You Use warnings; other minor fixes. Also affected in files (NFC). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@312289 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Analysis/CGSCCPassManager.h b/include/llvm/Analysis/CGSCCPassManager.h index be87df6f994..4067c2a6904 100644 --- a/include/llvm/Analysis/CGSCCPassManager.h +++ b/include/llvm/Analysis/CGSCCPassManager.h @@ -89,32 +89,44 @@ #ifndef LLVM_ANALYSIS_CGSCCPASSMANAGER_H #define LLVM_ANALYSIS_CGSCCPASSMANAGER_H +#include "llvm/ADT/DenseSet.h" #include "llvm/ADT/PriorityWorklist.h" +#include "llvm/ADT/STLExtras.h" +#include "llvm/ADT/SmallPtrSet.h" +#include "llvm/ADT/SmallVector.h" #include "llvm/Analysis/LazyCallGraph.h" #include "llvm/IR/CallSite.h" +#include "llvm/IR/Function.h" #include "llvm/IR/InstIterator.h" #include "llvm/IR/PassManager.h" #include "llvm/IR/ValueHandle.h" +#include "llvm/Support/Debug.h" +#include "llvm/Support/raw_ostream.h" +#include +#include +#include namespace llvm { +struct CGSCCUpdateResult; +class Module; + // Allow debug logging in this inline function. #define DEBUG_TYPE "cgscc" -struct CGSCCUpdateResult; - /// Extern template declaration for the analysis set for this IR unit. extern template class AllAnalysesOn; extern template class AnalysisManager; + /// \brief The CGSCC analysis manager. /// /// See the documentation for the AnalysisManager template for detail -/// documentation. This typedef serves as a convenient way to refer to this +/// documentation. This type serves as a convenient way to refer to this /// construct in the adaptors and proxies used to integrate this into the larger /// pass manager infrastructure. -typedef AnalysisManager - CGSCCAnalysisManager; +using CGSCCAnalysisManager = + AnalysisManager; // Explicit specialization and instantiation declarations for the pass manager. // See the comments on the definition of the specialization for details on how @@ -132,10 +144,10 @@ extern template class PassManager - CGSCCPassManager; +/// type serves as a convenient way to refer to this construct. +using CGSCCPassManager = + PassManager; /// An explicit specialization of the require analysis template pass. template @@ -152,8 +164,8 @@ struct RequireAnalysisPass - CGSCCAnalysisManagerModuleProxy; +using CGSCCAnalysisManagerModuleProxy = + InnerAnalysisManagerProxy; /// We need a specialized result for the \c CGSCCAnalysisManagerModuleProxy so /// it can have access to the call graph in order to walk all the SCCs when @@ -196,10 +208,11 @@ extern template class InnerAnalysisManagerProxy; extern template class OuterAnalysisManagerProxy< ModuleAnalysisManager, LazyCallGraph::SCC, LazyCallGraph &>; + /// A proxy from a \c ModuleAnalysisManager to an \c SCC. -typedef OuterAnalysisManagerProxy - ModuleAnalysisManagerCGSCCProxy; +using ModuleAnalysisManagerCGSCCProxy = + OuterAnalysisManagerProxy; /// Support structure for SCC passes to communicate updates the call graph back /// to the CGSCC pass manager infrsatructure. @@ -304,18 +317,21 @@ class ModuleToPostOrderCGSCCPassAdaptor public: explicit ModuleToPostOrderCGSCCPassAdaptor(CGSCCPassT Pass) : Pass(std::move(Pass)) {} + // We have to explicitly define all the special member functions because MSVC // refuses to generate them. ModuleToPostOrderCGSCCPassAdaptor( const ModuleToPostOrderCGSCCPassAdaptor &Arg) : Pass(Arg.Pass) {} + ModuleToPostOrderCGSCCPassAdaptor(ModuleToPostOrderCGSCCPassAdaptor &&Arg) : Pass(std::move(Arg.Pass)) {} + friend void swap(ModuleToPostOrderCGSCCPassAdaptor &LHS, ModuleToPostOrderCGSCCPassAdaptor &RHS) { - using std::swap; - swap(LHS.Pass, RHS.Pass); + std::swap(LHS.Pass, RHS.Pass); } + ModuleToPostOrderCGSCCPassAdaptor & operator=(ModuleToPostOrderCGSCCPassAdaptor RHS) { swap(*this, RHS); @@ -383,7 +399,7 @@ public: // Push the initial SCCs in reverse post-order as we'll pop off the the // back and so see this in post-order. - for (LazyCallGraph::SCC &C : reverse(*RC)) + for (LazyCallGraph::SCC &C : llvm::reverse(*RC)) CWorklist.insert(&C); do { @@ -505,13 +521,15 @@ public: private: friend AnalysisInfoMixin; + static AnalysisKey Key; }; extern template class OuterAnalysisManagerProxy; + /// A proxy from a \c CGSCCAnalysisManager to a \c Function. -typedef OuterAnalysisManagerProxy - CGSCCAnalysisManagerFunctionProxy; +using CGSCCAnalysisManagerFunctionProxy = + OuterAnalysisManagerProxy; /// Helper to update the call graph after running a function pass. /// @@ -537,17 +555,20 @@ class CGSCCToFunctionPassAdaptor public: explicit CGSCCToFunctionPassAdaptor(FunctionPassT Pass) : Pass(std::move(Pass)) {} + // We have to explicitly define all the special member functions because MSVC // refuses to generate them. CGSCCToFunctionPassAdaptor(const CGSCCToFunctionPassAdaptor &Arg) : Pass(Arg.Pass) {} + CGSCCToFunctionPassAdaptor(CGSCCToFunctionPassAdaptor &&Arg) : Pass(std::move(Arg.Pass)) {} + friend void swap(CGSCCToFunctionPassAdaptor &LHS, CGSCCToFunctionPassAdaptor &RHS) { - using std::swap; - swap(LHS.Pass, RHS.Pass); + std::swap(LHS.Pass, RHS.Pass); } + CGSCCToFunctionPassAdaptor &operator=(CGSCCToFunctionPassAdaptor RHS) { swap(*this, RHS); return *this; @@ -733,7 +754,7 @@ public: // so iterate to process this devirtualization site. return true; }; - bool Devirt = any_of(CallHandles, IsDevirtualizedHandle); + bool Devirt = llvm::any_of(CallHandles, IsDevirtualizedHandle); // Rescan to build up a new set of handles and count how many direct // calls remain. If we decide to iterate, this also sets up the input to @@ -802,6 +823,7 @@ DevirtSCCRepeatedPass createDevirtSCCRepeatedPass(PassT Pass, // Clear out the debug logging macro. #undef DEBUG_TYPE -} -#endif +} // end namespace llvm + +#endif // LLVM_ANALYSIS_CGSCCPASSMANAGER_H diff --git a/include/llvm/Analysis/CallGraphSCCPass.h b/include/llvm/Analysis/CallGraphSCCPass.h index f86f64bbb67..ace54607634 100644 --- a/include/llvm/Analysis/CallGraphSCCPass.h +++ b/include/llvm/Analysis/CallGraphSCCPass.h @@ -21,16 +21,16 @@ #ifndef LLVM_ANALYSIS_CALLGRAPHSCCPASS_H #define LLVM_ANALYSIS_CALLGRAPHSCCPASS_H -#include "llvm/Analysis/CallGraph.h" +#include "llvm/ADT/ArrayRef.h" #include "llvm/Pass.h" -#include "llvm/PassSupport.h" +#include namespace llvm { -class CallGraphNode; class CallGraph; -class PMStack; +class CallGraphNode; class CallGraphSCC; +class PMStack; class CallGraphSCCPass : public Pass { public: @@ -38,7 +38,7 @@ public: /// createPrinterPass - Get a pass that prints the Module /// corresponding to a CallGraph. - Pass *createPrinterPass(raw_ostream &O, + Pass *createPrinterPass(raw_ostream &OS, const std::string &Banner) const override; using llvm::Pass::doInitialization; @@ -57,7 +57,6 @@ public: /// /// SCC passes that add or delete functions to the SCC are required to update /// the SCC list, otherwise stale pointers may be dereferenced. - /// virtual bool runOnSCC(CallGraphSCC &SCC) = 0; /// doFinalization - This method is called after the SCC's of the program has @@ -89,7 +88,7 @@ protected: class CallGraphSCC { const CallGraph &CG; // The call graph for this SCC. void *Context; // The CGPassManager object that is vending this. - std::vector Nodes; + std::vector Nodes; public: CallGraphSCC(CallGraph &cg, void *context) : CG(cg), Context(context) {} @@ -105,7 +104,8 @@ public: /// Old node has been deleted, and New is to be used in its place. void ReplaceNode(CallGraphNode *Old, CallGraphNode *New); - typedef std::vector::const_iterator iterator; + using iterator = std::vector::const_iterator; + iterator begin() const { return Nodes.begin(); } iterator end() const { return Nodes.end(); } @@ -119,16 +119,19 @@ void initializeDummyCGSCCPassPass(PassRegistry &); class DummyCGSCCPass : public CallGraphSCCPass { public: static char ID; + DummyCGSCCPass() : CallGraphSCCPass(ID) { PassRegistry &Registry = *PassRegistry::getPassRegistry(); initializeDummyCGSCCPassPass(Registry); - }; + } + bool runOnSCC(CallGraphSCC &SCC) override { return false; } + void getAnalysisUsage(AnalysisUsage &AU) const override { AU.setPreservesAll(); } }; -} // End llvm namespace +} // end namespace llvm -#endif +#endif // LLVM_ANALYSIS_CALLGRAPHSCCPASS_H diff --git a/lib/Analysis/CGSCCPassManager.cpp b/lib/Analysis/CGSCCPassManager.cpp index 46d384922af..9e6384437fb 100644 --- a/lib/Analysis/CGSCCPassManager.cpp +++ b/lib/Analysis/CGSCCPassManager.cpp @@ -8,8 +8,25 @@ //===----------------------------------------------------------------------===// #include "llvm/Analysis/CGSCCPassManager.h" +#include "llvm/ADT/ArrayRef.h" +#include "llvm/ADT/Optional.h" +#include "llvm/ADT/STLExtras.h" +#include "llvm/ADT/SetVector.h" +#include "llvm/ADT/SmallPtrSet.h" +#include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/iterator_range.h" +#include "llvm/Analysis/LazyCallGraph.h" #include "llvm/IR/CallSite.h" +#include "llvm/IR/Constant.h" #include "llvm/IR/InstIterator.h" +#include "llvm/IR/Instruction.h" +#include "llvm/IR/PassManager.h" +#include "llvm/Support/Casting.h" +#include "llvm/Support/Debug.h" +#include "llvm/Support/raw_ostream.h" +#include +#include +#include #define DEBUG_TYPE "cgscc" @@ -262,7 +279,7 @@ bool FunctionAnalysisManagerCGSCCProxy::Result::invalidate( return false; } -} // End llvm namespace +} // end namespace llvm /// When a new SCC is created for the graph and there might be function /// analysis results cached for the functions now in that SCC two forms of @@ -309,7 +326,6 @@ static void updateNewSCCFunctionAnalyses(LazyCallGraph::SCC &C, } } -namespace { /// Helper function to update both the \c CGSCCAnalysisManager \p AM and the \c /// CGSCCPassManager's \c CGSCCUpdateResult \p UR based on a range of newly /// added SCCs. @@ -321,11 +337,11 @@ namespace { /// This function returns the SCC containing \p N. This will be either \p C if /// no new SCCs have been split out, or it will be the new SCC containing \p N. template -LazyCallGraph::SCC * +static LazyCallGraph::SCC * incorporateNewSCCRange(const SCCRangeT &NewSCCRange, LazyCallGraph &G, LazyCallGraph::Node &N, LazyCallGraph::SCC *C, CGSCCAnalysisManager &AM, CGSCCUpdateResult &UR) { - typedef LazyCallGraph::SCC SCC; + using SCC = LazyCallGraph::SCC; if (NewSCCRange.begin() == NewSCCRange.end()) return C; @@ -363,8 +379,8 @@ incorporateNewSCCRange(const SCCRangeT &NewSCCRange, LazyCallGraph &G, if (NeedFAMProxy) updateNewSCCFunctionAnalyses(*C, G, AM); - for (SCC &NewC : - reverse(make_range(std::next(NewSCCRange.begin()), NewSCCRange.end()))) { + for (SCC &NewC : llvm::reverse(make_range(std::next(NewSCCRange.begin()), + NewSCCRange.end()))) { assert(C != &NewC && "No need to re-visit the current SCC!"); assert(OldC != &NewC && "Already handled the original SCC!"); UR.CWorklist.insert(&NewC); @@ -380,15 +396,14 @@ incorporateNewSCCRange(const SCCRangeT &NewSCCRange, LazyCallGraph &G, } return C; } -} LazyCallGraph::SCC &llvm::updateCGAndAnalysisManagerForFunctionPass( LazyCallGraph &G, LazyCallGraph::SCC &InitialC, LazyCallGraph::Node &N, CGSCCAnalysisManager &AM, CGSCCUpdateResult &UR) { - typedef LazyCallGraph::Node Node; - typedef LazyCallGraph::Edge Edge; - typedef LazyCallGraph::SCC SCC; - typedef LazyCallGraph::RefSCC RefSCC; + using Node = LazyCallGraph::Node; + using Edge = LazyCallGraph::Edge; + using SCC = LazyCallGraph::SCC; + using RefSCC = LazyCallGraph::RefSCC; RefSCC &InitialRC = InitialC.getOuterRefSCC(); SCC *C = &InitialC; @@ -430,7 +445,7 @@ LazyCallGraph::SCC &llvm::updateCGAndAnalysisManagerForFunctionPass( // Now walk all references. for (Instruction &I : instructions(F)) for (Value *Op : I.operand_values()) - if (Constant *C = dyn_cast(Op)) + if (auto *C = dyn_cast(Op)) if (Visited.insert(C).second) Worklist.push_back(C); @@ -521,8 +536,8 @@ LazyCallGraph::SCC &llvm::updateCGAndAnalysisManagerForFunctionPass( // "bottom" we will continue processing in the bottom-up walk. assert(NewRefSCCs.front() == RC && "New current RefSCC not first in the returned list!"); - for (RefSCC *NewRC : - reverse(make_range(std::next(NewRefSCCs.begin()), NewRefSCCs.end()))) { + for (RefSCC *NewRC : llvm::reverse(make_range(std::next(NewRefSCCs.begin()), + NewRefSCCs.end()))) { assert(NewRC != RC && "Should not encounter the current RefSCC further " "in the postorder list of new RefSCCs."); UR.RCWorklist.insert(NewRC); @@ -644,8 +659,8 @@ LazyCallGraph::SCC &llvm::updateCGAndAnalysisManagerForFunctionPass( DEBUG(dbgs() << "Enqueuing the existing SCC in the worklist: " << *C << "\n"); // Enqueue in reverse order as we pop off the back of the worklist. - for (SCC &MovedC : reverse(make_range(RC->begin() + InitialSCCIndex, - RC->begin() + NewSCCIndex))) { + for (SCC &MovedC : llvm::reverse(make_range(RC->begin() + InitialSCCIndex, + RC->begin() + NewSCCIndex))) { UR.CWorklist.insert(&MovedC); DEBUG(dbgs() << "Enqueuing a newly earlier in post-order SCC: " << MovedC << "\n"); diff --git a/lib/Analysis/CallGraphSCCPass.cpp b/lib/Analysis/CallGraphSCCPass.cpp index facda246936..a2dda58a6a2 100644 --- a/lib/Analysis/CallGraphSCCPass.cpp +++ b/lib/Analysis/CallGraphSCCPass.cpp @@ -16,18 +16,27 @@ //===----------------------------------------------------------------------===// #include "llvm/Analysis/CallGraphSCCPass.h" +#include "llvm/ADT/DenseMap.h" #include "llvm/ADT/SCCIterator.h" #include "llvm/ADT/Statistic.h" #include "llvm/Analysis/CallGraph.h" +#include "llvm/IR/CallSite.h" #include "llvm/IR/Function.h" -#include "llvm/IR/IntrinsicInst.h" +#include "llvm/IR/Intrinsics.h" #include "llvm/IR/LLVMContext.h" #include "llvm/IR/LegacyPassManagers.h" +#include "llvm/IR/Module.h" #include "llvm/IR/OptBisect.h" +#include "llvm/Pass.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" #include "llvm/Support/Timer.h" #include "llvm/Support/raw_ostream.h" +#include +#include +#include +#include + using namespace llvm; #define DEBUG_TYPE "cgscc-passmgr" @@ -47,8 +56,8 @@ namespace { class CGPassManager : public ModulePass, public PMDataManager { public: static char ID; - explicit CGPassManager() - : ModulePass(ID), PMDataManager() { } + + explicit CGPassManager() : ModulePass(ID), PMDataManager() {} /// Execute all of the passes scheduled for execution. Keep track of /// whether any of the passes modifies the module, and if so, return true. @@ -106,7 +115,6 @@ private: char CGPassManager::ID = 0; - bool CGPassManager::RunPassOnSCC(Pass *P, CallGraphSCC &CurSCC, CallGraph &CG, bool &CallGraphUpToDate, bool &DevirtualizedCall) { @@ -135,7 +143,6 @@ bool CGPassManager::RunPassOnSCC(Pass *P, CallGraphSCC &CurSCC, return Changed; } - assert(PM->getPassManagerType() == PMT_FunctionPassManager && "Invalid CGPassManager member"); FPPassManager *FPP = (FPPassManager*)P; @@ -162,7 +169,6 @@ bool CGPassManager::RunPassOnSCC(Pass *P, CallGraphSCC &CurSCC, return Changed; } - /// Scan the functions in the specified CFG and resync the /// callgraph with the call sites found in it. This is used after /// FunctionPasses have potentially munged the callgraph, and can be used after @@ -172,7 +178,6 @@ bool CGPassManager::RunPassOnSCC(Pass *P, CallGraphSCC &CurSCC, /// meaning it turned an indirect call into a direct call. This happens when /// a function pass like GVN optimizes away stuff feeding the indirect call. /// This never happens in checking mode. -/// bool CGPassManager::RefreshCallGraph(const CallGraphSCC &CurSCC, CallGraph &CG, bool CheckingMode) { DenseMap CallSites; @@ -484,7 +489,6 @@ bool CGPassManager::runOnModule(Module &M) { return Changed; } - /// Initialize CG bool CGPassManager::doInitialization(CallGraph &CG) { bool Changed = false; @@ -536,7 +540,6 @@ void CallGraphSCC::ReplaceNode(CallGraphNode *Old, CallGraphNode *New) { CGI->ReplaceNode(Old, New); } - //===----------------------------------------------------------------------===// // CallGraphSCCPass Implementation //===----------------------------------------------------------------------===// @@ -586,22 +589,23 @@ void CallGraphSCCPass::getAnalysisUsage(AnalysisUsage &AU) const { AU.addPreserved(); } - //===----------------------------------------------------------------------===// // PrintCallGraphPass Implementation //===----------------------------------------------------------------------===// namespace { + /// PrintCallGraphPass - Print a Module corresponding to a call graph. /// class PrintCallGraphPass : public CallGraphSCCPass { std::string Banner; - raw_ostream &Out; // raw_ostream to print on. + raw_ostream &OS; // raw_ostream to print on. public: static char ID; - PrintCallGraphPass(const std::string &B, raw_ostream &o) - : CallGraphSCCPass(ID), Banner(B), Out(o) {} + + PrintCallGraphPass(const std::string &B, raw_ostream &OS) + : CallGraphSCCPass(ID), Banner(B), OS(OS) {} void getAnalysisUsage(AnalysisUsage &AU) const override { AU.setPreservesAll(); @@ -612,18 +616,18 @@ namespace { auto PrintBannerOnce = [&] () { if (BannerPrinted) return; - Out << Banner; + OS << Banner; BannerPrinted = true; }; for (CallGraphNode *CGN : SCC) { if (Function *F = CGN->getFunction()) { if (!F->isDeclaration() && isFunctionInPrintList(F->getName())) { PrintBannerOnce(); - F->print(Out); + F->print(OS); } - } else if (llvm::isFunctionInPrintList("*")) { + } else if (isFunctionInPrintList("*")) { PrintBannerOnce(); - Out << "\nPrinting Function\n"; + OS << "\nPrinting Function\n"; } } return false; @@ -636,9 +640,9 @@ namespace { char PrintCallGraphPass::ID = 0; -Pass *CallGraphSCCPass::createPrinterPass(raw_ostream &O, +Pass *CallGraphSCCPass::createPrinterPass(raw_ostream &OS, const std::string &Banner) const { - return new PrintCallGraphPass(Banner, O); + return new PrintCallGraphPass(Banner, OS); } bool CallGraphSCCPass::skipSCC(CallGraphSCC &SCC) const { @@ -649,5 +653,6 @@ bool CallGraphSCCPass::skipSCC(CallGraphSCC &SCC) const { } char DummyCGSCCPass::ID = 0; + INITIALIZE_PASS(DummyCGSCCPass, "DummyCGSCCPass", "DummyCGSCCPass", false, false) diff --git a/lib/Target/AMDGPU/AMDGPUAnnotateKernelFeatures.cpp b/lib/Target/AMDGPU/AMDGPUAnnotateKernelFeatures.cpp index 551737c1d27..ce17202f341 100644 --- a/lib/Target/AMDGPU/AMDGPUAnnotateKernelFeatures.cpp +++ b/lib/Target/AMDGPU/AMDGPUAnnotateKernelFeatures.cpp @@ -1,4 +1,4 @@ -//===-- AMDGPUAnnotateKernelFeaturesPass.cpp ------------------------------===// +//===- AMDGPUAnnotateKernelFeaturesPass.cpp -------------------------------===// // // The LLVM Compiler Infrastructure // @@ -14,13 +14,28 @@ #include "AMDGPU.h" #include "AMDGPUSubtarget.h" +#include "Utils/AMDGPUBaseInfo.h" +#include "llvm/ADT/SmallPtrSet.h" +#include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/StringRef.h" #include "llvm/ADT/Triple.h" +#include "llvm/Analysis/CallGraph.h" #include "llvm/Analysis/CallGraphSCCPass.h" #include "llvm/CodeGen/TargetPassConfig.h" +#include "llvm/IR/CallSite.h" +#include "llvm/IR/Constant.h" #include "llvm/IR/Constants.h" -#include "llvm/IR/InstIterator.h" +#include "llvm/IR/Function.h" +#include "llvm/IR/Instruction.h" #include "llvm/IR/Instructions.h" +#include "llvm/IR/Intrinsics.h" #include "llvm/IR/Module.h" +#include "llvm/IR/Type.h" +#include "llvm/IR/Use.h" +#include "llvm/Pass.h" +#include "llvm/Support/Casting.h" +#include "llvm/Support/ErrorHandling.h" +#include "llvm/Target/TargetMachine.h" #define DEBUG_TYPE "amdgpu-annotate-kernel-features" @@ -42,6 +57,7 @@ public: bool doInitialization(CallGraph &CG) override; bool runOnSCC(CallGraphSCC &SCC) override; + StringRef getPassName() const override { return "AMDGPU Annotate Kernel Features"; } @@ -58,7 +74,7 @@ public: AMDGPUAS AS); }; -} +} // end anonymous namespace char AMDGPUAnnotateKernelFeatures::ID = 0; @@ -294,7 +310,6 @@ bool AMDGPUAnnotateKernelFeatures::runOnSCC(CallGraphSCC &SCC) { Changed |= addFeatureAttributes(*F); } - return Changed; } diff --git a/lib/Transforms/Coroutines/CoroSplit.cpp b/lib/Transforms/Coroutines/CoroSplit.cpp index f36827e0ffa..8712ca4823c 100644 --- a/lib/Transforms/Coroutines/CoroSplit.cpp +++ b/lib/Transforms/Coroutines/CoroSplit.cpp @@ -19,18 +19,53 @@ // coroutine. //===----------------------------------------------------------------------===// +#include "CoroInstr.h" #include "CoroInternal.h" +#include "llvm/ADT/DenseMap.h" +#include "llvm/ADT/SmallPtrSet.h" +#include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/ADT/Twine.h" +#include "llvm/Analysis/CallGraph.h" #include "llvm/Analysis/CallGraphSCCPass.h" -#include "llvm/IR/DebugInfoMetadata.h" +#include "llvm/IR/Argument.h" +#include "llvm/IR/Attributes.h" +#include "llvm/IR/BasicBlock.h" +#include "llvm/IR/CFG.h" +#include "llvm/IR/CallSite.h" +#include "llvm/IR/CallingConv.h" +#include "llvm/IR/Constants.h" +#include "llvm/IR/DataLayout.h" +#include "llvm/IR/DerivedTypes.h" +#include "llvm/IR/Function.h" +#include "llvm/IR/GlobalValue.h" +#include "llvm/IR/GlobalVariable.h" #include "llvm/IR/IRBuilder.h" #include "llvm/IR/InstIterator.h" +#include "llvm/IR/InstrTypes.h" +#include "llvm/IR/Instruction.h" +#include "llvm/IR/Instructions.h" +#include "llvm/IR/IntrinsicInst.h" +#include "llvm/IR/LLVMContext.h" #include "llvm/IR/LegacyPassManager.h" +#include "llvm/IR/Module.h" +#include "llvm/IR/Type.h" +#include "llvm/IR/Value.h" #include "llvm/IR/Verifier.h" +#include "llvm/Pass.h" +#include "llvm/Support/Casting.h" +#include "llvm/Support/Debug.h" +#include "llvm/Support/raw_ostream.h" #include "llvm/Transforms/Scalar.h" #include "llvm/Transforms/Utils/BasicBlockUtils.h" #include "llvm/Transforms/Utils/Cloning.h" #include "llvm/Transforms/Utils/Local.h" #include "llvm/Transforms/Utils/ValueMapper.h" +#include +#include +#include +#include +#include using namespace llvm; @@ -343,7 +378,6 @@ static void replaceFrameSize(coro::Shape &Shape) { // Assumes that all the functions have the same signature. static void setCoroInfo(Function &F, CoroBeginInst *CoroBegin, std::initializer_list Fns) { - SmallVector Args(Fns.begin(), Fns.end()); assert(!Args.empty()); Function *Part = *Fns.begin(); @@ -364,7 +398,6 @@ static void setCoroInfo(Function &F, CoroBeginInst *CoroBegin, // Store addresses of Resume/Destroy/Cleanup functions in the coroutine frame. static void updateCoroFrame(coro::Shape &Shape, Function *ResumeFn, Function *DestroyFn, Function *CleanupFn) { - IRBuilder<> Builder(Shape.FramePtr->getNextNode()); auto *ResumeAddr = Builder.CreateConstInBoundsGEP2_32( Shape.FrameTy, Shape.FramePtr, 0, coro::Shape::ResumeField, @@ -388,7 +421,7 @@ static void updateCoroFrame(coro::Shape &Shape, Function *ResumeFn, static void postSplitCleanup(Function &F) { removeUnreachableBlocks(F); - llvm::legacy::FunctionPassManager FPM(F.getParent()); + legacy::FunctionPassManager FPM(F.getParent()); FPM.add(createVerifierPass()); FPM.add(createSCCPPass()); @@ -478,7 +511,7 @@ static void addMustTailToCoroResumes(Function &F) { // Set musttail on those that are followed by a ret instruction. for (CallInst *Call : Resumes) if (simplifyTerminatorLeadingToRet(Call->getNextNode())) { - Call->setTailCallKind(llvm::CallInst::TCK_MustTail); + Call->setTailCallKind(CallInst::TCK_MustTail); changed = true; } @@ -574,7 +607,7 @@ static void simplifySuspendPoints(coro::Shape &Shape) { size_t I = 0, N = S.size(); if (N == 0) return; - for (;;) { + while (true) { if (simplifySuspendPoint(S[I], Shape.CoroBegin)) { if (--N == I) break; @@ -769,6 +802,7 @@ namespace { struct CoroSplit : public CallGraphSCCPass { static char ID; // Pass identification, replacement for typeid + CoroSplit() : CallGraphSCCPass(ID) { initializeCoroSplitPass(*PassRegistry::getPassRegistry()); } @@ -817,11 +851,14 @@ struct CoroSplit : public CallGraphSCCPass { void getAnalysisUsage(AnalysisUsage &AU) const override { CallGraphSCCPass::getAnalysisUsage(AU); } + StringRef getPassName() const override { return "Coroutine Splitting"; } }; -} + +} // end anonymous namespace char CoroSplit::ID = 0; + INITIALIZE_PASS( CoroSplit, "coro-split", "Split coroutine into a set of functions driving its state machine", false, diff --git a/lib/Transforms/Coroutines/Coroutines.cpp b/lib/Transforms/Coroutines/Coroutines.cpp index 44e1f9b404e..10411c1bd65 100644 --- a/lib/Transforms/Coroutines/Coroutines.cpp +++ b/lib/Transforms/Coroutines/Coroutines.cpp @@ -1,4 +1,4 @@ -//===-- Coroutines.cpp ----------------------------------------------------===// +//===- Coroutines.cpp -----------------------------------------------------===// // // The LLVM Compiler Infrastructure // @@ -6,18 +6,38 @@ // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// +// // This file implements the common infrastructure for Coroutine Passes. +// //===----------------------------------------------------------------------===// +#include "CoroInstr.h" #include "CoroInternal.h" +#include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/Analysis/CallGraph.h" #include "llvm/Analysis/CallGraphSCCPass.h" +#include "llvm/IR/Attributes.h" +#include "llvm/IR/CallSite.h" +#include "llvm/IR/Constants.h" +#include "llvm/IR/DerivedTypes.h" +#include "llvm/IR/Function.h" #include "llvm/IR/InstIterator.h" +#include "llvm/IR/Instructions.h" +#include "llvm/IR/IntrinsicInst.h" +#include "llvm/IR/Intrinsics.h" #include "llvm/IR/LegacyPassManager.h" -#include "llvm/IR/Verifier.h" -#include "llvm/InitializePasses.h" +#include "llvm/IR/Module.h" +#include "llvm/IR/Type.h" +#include "llvm/Support/Casting.h" +#include "llvm/Support/ErrorHandling.h" +#include "llvm/Transforms/Coroutines.h" #include "llvm/Transforms/IPO.h" #include "llvm/Transforms/IPO/PassManagerBuilder.h" #include "llvm/Transforms/Utils/Local.h" +#include +#include +#include using namespace llvm; @@ -117,7 +137,6 @@ static bool isCoroutineIntrinsicName(StringRef Name) { // that names are intrinsic names. bool coro::declaresIntrinsics(Module &M, std::initializer_list List) { - for (StringRef Name : List) { assert(isCoroutineIntrinsicName(Name) && "not a coroutine intrinsic"); if (M.getNamedValue(Name)) diff --git a/lib/Transforms/Scalar/LoopUnswitch.cpp b/lib/Transforms/Scalar/LoopUnswitch.cpp index bf830dd6377..71d4d5d080e 100644 --- a/lib/Transforms/Scalar/LoopUnswitch.cpp +++ b/lib/Transforms/Scalar/LoopUnswitch.cpp @@ -1,4 +1,4 @@ -//===-- LoopUnswitch.cpp - Hoist loop-invariant conditionals in loop ------===// +//===- LoopUnswitch.cpp - Hoist loop-invariant conditionals in loop -------===// // // The LLVM Compiler Infrastructure // @@ -26,30 +26,40 @@ // //===----------------------------------------------------------------------===// -#include "llvm/ADT/STLExtras.h" +#include "llvm/ADT/DenseMap.h" #include "llvm/ADT/SmallPtrSet.h" +#include "llvm/ADT/SmallSet.h" +#include "llvm/ADT/SmallVector.h" #include "llvm/ADT/Statistic.h" #include "llvm/Analysis/AssumptionCache.h" -#include "llvm/Analysis/BlockFrequencyInfo.h" -#include "llvm/Analysis/BlockFrequencyInfoImpl.h" -#include "llvm/Analysis/BranchProbabilityInfo.h" #include "llvm/Analysis/CodeMetrics.h" #include "llvm/Analysis/DivergenceAnalysis.h" -#include "llvm/Analysis/GlobalsModRef.h" #include "llvm/Analysis/InstructionSimplify.h" #include "llvm/Analysis/LoopInfo.h" #include "llvm/Analysis/LoopPass.h" #include "llvm/Analysis/ScalarEvolution.h" #include "llvm/Analysis/TargetTransformInfo.h" +#include "llvm/IR/Attributes.h" +#include "llvm/IR/BasicBlock.h" +#include "llvm/IR/CallSite.h" +#include "llvm/IR/Constant.h" #include "llvm/IR/Constants.h" #include "llvm/IR/DerivedTypes.h" #include "llvm/IR/Dominators.h" #include "llvm/IR/Function.h" +#include "llvm/IR/IRBuilder.h" #include "llvm/IR/InstrTypes.h" +#include "llvm/IR/Instruction.h" #include "llvm/IR/Instructions.h" -#include "llvm/IR/MDBuilder.h" +#include "llvm/IR/IntrinsicInst.h" +#include "llvm/IR/Intrinsics.h" #include "llvm/IR/Module.h" -#include "llvm/Support/BranchProbability.h" +#include "llvm/IR/Type.h" +#include "llvm/IR/User.h" +#include "llvm/IR/Value.h" +#include "llvm/IR/ValueHandle.h" +#include "llvm/Pass.h" +#include "llvm/Support/Casting.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" #include "llvm/Support/raw_ostream.h" @@ -58,9 +68,15 @@ #include "llvm/Transforms/Utils/Cloning.h" #include "llvm/Transforms/Utils/Local.h" #include "llvm/Transforms/Utils/LoopUtils.h" +#include "llvm/Transforms/Utils/ValueMapper.h" #include +#include #include #include +#include +#include +#include + using namespace llvm; #define DEBUG_TYPE "loop-unswitch" @@ -82,11 +98,9 @@ Threshold("loop-unswitch-threshold", cl::desc("Max loop size to unswitch"), namespace { class LUAnalysisCache { - - typedef DenseMap > - UnswitchedValsMap; - - typedef UnswitchedValsMap::iterator UnswitchedValsIt; + using UnswitchedValsMap = + DenseMap>; + using UnswitchedValsIt = UnswitchedValsMap::iterator; struct LoopProperties { unsigned CanBeUnswitchedCount; @@ -97,12 +111,12 @@ namespace { // Here we use std::map instead of DenseMap, since we need to keep valid // LoopProperties pointer for current loop for better performance. - typedef std::map LoopPropsMap; - typedef LoopPropsMap::iterator LoopPropsMapIt; + using LoopPropsMap = std::map; + using LoopPropsMapIt = LoopPropsMap::iterator; LoopPropsMap LoopsProperties; - UnswitchedValsMap *CurLoopInstructions; - LoopProperties *CurrentLoopProperties; + UnswitchedValsMap *CurLoopInstructions = nullptr; + LoopProperties *CurrentLoopProperties = nullptr; // A loop unswitching with an estimated cost above this threshold // is not performed. MaxSize is turned into unswitching quota for @@ -121,9 +135,7 @@ namespace { unsigned MaxSize; public: - LUAnalysisCache() - : CurLoopInstructions(nullptr), CurrentLoopProperties(nullptr), - MaxSize(Threshold) {} + LUAnalysisCache() : MaxSize(Threshold) {} // Analyze loop. Check its size, calculate is it possible to unswitch // it. Returns true if we can unswitch this loop. @@ -164,12 +176,12 @@ namespace { LUAnalysisCache BranchesInfo; bool OptimizeForSize; - bool redoLoop; + bool redoLoop = false; - Loop *currentLoop; - DominatorTree *DT; - BasicBlock *loopHeader; - BasicBlock *loopPreheader; + Loop *currentLoop = nullptr; + DominatorTree *DT = nullptr; + BasicBlock *loopHeader = nullptr; + BasicBlock *loopPreheader = nullptr; bool SanitizeMemory; LoopSafetyInfo SafetyInfo; @@ -185,16 +197,17 @@ namespace { public: static char ID; // Pass ID, replacement for typeid - explicit LoopUnswitch(bool Os = false, bool hasBranchDivergence = false) : - LoopPass(ID), OptimizeForSize(Os), redoLoop(false), - currentLoop(nullptr), DT(nullptr), loopHeader(nullptr), - loopPreheader(nullptr), hasBranchDivergence(hasBranchDivergence) { + + explicit LoopUnswitch(bool Os = false, bool hasBranchDivergence = false) + : LoopPass(ID), OptimizeForSize(Os), + hasBranchDivergence(hasBranchDivergence) { initializeLoopUnswitchPass(*PassRegistry::getPassRegistry()); - } + } bool runOnLoop(Loop *L, LPPassManager &LPM) override; bool processCurrentLoop(); bool isUnreachableDueToPreviousUnswitching(BasicBlock *); + /// This transformation requires natural loop information & requires that /// loop preheaders be inserted into the CFG. /// @@ -207,7 +220,6 @@ namespace { } private: - void releaseMemory() override { BranchesInfo.forgetLoop(currentLoop); } @@ -247,13 +259,13 @@ namespace { Value *SimplifyInstructionWithNotEqual(Instruction *Inst, Value *Invariant, Constant *Val); }; -} + +} // end anonymous namespace // Analyze loop. Check its size, calculate is it possible to unswitch // it. Returns true if we can unswitch this loop. bool LUAnalysisCache::countLoop(const Loop *L, const TargetTransformInfo &TTI, AssumptionCache *AC) { - LoopPropsMapIt PropsIt; bool Inserted; std::tie(PropsIt, Inserted) = @@ -302,7 +314,6 @@ bool LUAnalysisCache::countLoop(const Loop *L, const TargetTransformInfo &TTI, // Clean all data related to given loop. void LUAnalysisCache::forgetLoop(const Loop *L) { - LoopPropsMapIt LIt = LoopsProperties.find(L); if (LIt != LoopsProperties.end()) { @@ -337,7 +348,6 @@ bool LUAnalysisCache::CostAllowsUnswitching() { // Note, that new loop data is stored inside the VMap. void LUAnalysisCache::cloneData(const Loop *NewLoop, const Loop *OldLoop, const ValueToValueMapTy &VMap) { - LoopProperties &NewLoopProps = LoopsProperties[NewLoop]; LoopProperties &OldLoopProps = *CurrentLoopProperties; UnswitchedValsMap &Insts = OldLoopProps.UnswitchedVals; @@ -367,6 +377,7 @@ void LUAnalysisCache::cloneData(const Loop *NewLoop, const Loop *OldLoop, } char LoopUnswitch::ID = 0; + INITIALIZE_PASS_BEGIN(LoopUnswitch, "loop-unswitch", "Unswitch loops", false, false) INITIALIZE_PASS_DEPENDENCY(AssumptionCacheTracker) diff --git a/tools/llvm-stress/llvm-stress.cpp b/tools/llvm-stress/llvm-stress.cpp index 3945da7020b..650ae9627ec 100644 --- a/tools/llvm-stress/llvm-stress.cpp +++ b/tools/llvm-stress/llvm-stress.cpp @@ -1,4 +1,4 @@ -//===-- llvm-stress.cpp - Generate random LL files to stress-test LLVM ----===// +//===- llvm-stress.cpp - Generate random LL files to stress-test LLVM -----===// // // The LLVM Compiler Infrastructure // @@ -12,32 +12,55 @@ // //===----------------------------------------------------------------------===// -#include "llvm/Analysis/CallGraphSCCPass.h" +#include "llvm/ADT/APFloat.h" +#include "llvm/ADT/APInt.h" +#include "llvm/ADT/ArrayRef.h" +#include "llvm/ADT/STLExtras.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/ADT/Twine.h" +#include "llvm/IR/BasicBlock.h" +#include "llvm/IR/CallingConv.h" #include "llvm/IR/Constants.h" +#include "llvm/IR/DataLayout.h" +#include "llvm/IR/DerivedTypes.h" +#include "llvm/IR/Function.h" +#include "llvm/IR/GlobalValue.h" #include "llvm/IR/IRPrintingPasses.h" +#include "llvm/IR/InstrTypes.h" #include "llvm/IR/Instruction.h" +#include "llvm/IR/Instructions.h" #include "llvm/IR/LLVMContext.h" #include "llvm/IR/LegacyPassManager.h" -#include "llvm/IR/LegacyPassNameParser.h" #include "llvm/IR/Module.h" +#include "llvm/IR/Type.h" +#include "llvm/IR/Value.h" #include "llvm/IR/Verifier.h" -#include "llvm/Support/Debug.h" +#include "llvm/Support/Casting.h" +#include "llvm/Support/CommandLine.h" +#include "llvm/Support/ErrorHandling.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/ManagedStatic.h" -#include "llvm/Support/PluginLoader.h" #include "llvm/Support/PrettyStackTrace.h" #include "llvm/Support/ToolOutputFile.h" +#include "llvm/Support/raw_ostream.h" #include -#include +#include +#include +#include +#include +#include +#include #include namespace llvm { static cl::opt SeedCL("seed", cl::desc("Seed used for randomness"), cl::init(0)); + static cl::opt SizeCL("size", cl::desc("The estimated size of the generated function (# of instrs)"), cl::init(100)); + static cl::opt OutputFilename("o", cl::desc("Override output filename"), cl::value_desc("filename")); @@ -45,6 +68,7 @@ OutputFilename("o", cl::desc("Override output filename"), static LLVMContext Context; namespace cl { + template <> class parser final : public basic_parser { public: parser(Option &O) : basic_parser(O) {} @@ -70,14 +94,15 @@ public: StringRef getValueName() const override { return "IR scalar type"; } }; -} +} // end namespace cl static cl::list AdditionalScalarTypes("types", cl::CommaSeparated, cl::desc("Additional IR scalar types " "(always includes i1, i8, i16, i32, i64, float and double)")); namespace { + /// A utility class to provide a pseudo-random number generator which is /// the same across all platforms. This is somewhat close to the libc /// implementation. Note: This is not a cryptographically secure pseudorandom @@ -111,9 +136,11 @@ public: } /// Make this like a C++11 random device - typedef uint32_t result_type; + using result_type = uint32_t ; + static constexpr result_type min() { return 0; } static constexpr result_type max() { return 0x7ffff; } + uint32_t operator()() { uint32_t Val = Rand(); assert(Val <= max() && "Random value out of range"); @@ -149,18 +176,19 @@ Function *GenEmptyFunction(Module *M) { /// modifying and adding new random instructions. struct Modifier { /// Used to store the randomly generated values. - typedef std::vector PieceTable; + using PieceTable = std::vector; public: /// C'tor - Modifier(BasicBlock *Block, PieceTable *PT, Random *R): - BB(Block),PT(PT),Ran(R),Context(BB->getContext()) {} + Modifier(BasicBlock *Block, PieceTable *PT, Random *R) + : BB(Block), PT(PT), Ran(R), Context(BB->getContext()) {} /// virtual D'tor to silence warnings. - virtual ~Modifier() {} + virtual ~Modifier() = default; /// Add a new instruction. virtual void Act() = 0; + /// Add N new instructions, virtual void ActN(unsigned n) { for (unsigned i=0; igetType()->getScalarSizeInBits() == 1) return; - bool isFloat = Val0->getType()->getScalarType()->isFloatingPointTy(); Instruction* Term = BB->getTerminator(); unsigned R = getRandom() % (isFloat ? 7 : 13); @@ -379,7 +414,9 @@ struct BinModifier: public Modifier { /// Generate constant values. struct ConstModifier: public Modifier { - ConstModifier(BasicBlock *BB, PieceTable *PT, Random *R):Modifier(BB, PT, R) {} + ConstModifier(BasicBlock *BB, PieceTable *PT, Random *R) + : Modifier(BB, PT, R) {} + void Act() override { Type *Ty = pickType(); @@ -428,7 +465,8 @@ struct ConstModifier: public Modifier { }; struct AllocaModifier: public Modifier { - AllocaModifier(BasicBlock *BB, PieceTable *PT, Random *R):Modifier(BB, PT, R){} + AllocaModifier(BasicBlock *BB, PieceTable *PT, Random *R) + : Modifier(BB, PT, R) {} void Act() override { Type *Tp = pickType(); @@ -439,8 +477,8 @@ struct AllocaModifier: public Modifier { }; struct ExtractElementModifier: public Modifier { - ExtractElementModifier(BasicBlock *BB, PieceTable *PT, Random *R): - Modifier(BB, PT, R) {} + ExtractElementModifier(BasicBlock *BB, PieceTable *PT, Random *R) + : Modifier(BB, PT, R) {} void Act() override { Value *Val0 = getRandomVectorValue(); @@ -453,9 +491,10 @@ struct ExtractElementModifier: public Modifier { }; struct ShuffModifier: public Modifier { - ShuffModifier(BasicBlock *BB, PieceTable *PT, Random *R):Modifier(BB, PT, R) {} - void Act() override { + ShuffModifier(BasicBlock *BB, PieceTable *PT, Random *R) + : Modifier(BB, PT, R) {} + void Act() override { Value *Val0 = getRandomVectorValue(); Value *Val1 = getRandomValue(Val0->getType()); @@ -480,8 +519,8 @@ struct ShuffModifier: public Modifier { }; struct InsertElementModifier: public Modifier { - InsertElementModifier(BasicBlock *BB, PieceTable *PT, Random *R): - Modifier(BB, PT, R) {} + InsertElementModifier(BasicBlock *BB, PieceTable *PT, Random *R) + : Modifier(BB, PT, R) {} void Act() override { Value *Val0 = getRandomVectorValue(); @@ -493,13 +532,13 @@ struct InsertElementModifier: public Modifier { "I", BB->getTerminator()); return PT->push_back(V); } - }; struct CastModifier: public Modifier { - CastModifier(BasicBlock *BB, PieceTable *PT, Random *R):Modifier(BB, PT, R) {} - void Act() override { + CastModifier(BasicBlock *BB, PieceTable *PT, Random *R) + : Modifier(BB, PT, R) {} + void Act() override { Value *V = getRandomVal(); Type *VTy = V->getType(); Type *DestTy = pickScalarType(); @@ -558,7 +597,6 @@ struct CastModifier: public Modifier { return PT->push_back( new SIToFPInst(V, DestTy, "FC", BB->getTerminator())); return PT->push_back(new UIToFPInst(V, DestTy, "FC", BB->getTerminator())); - } // Both floats. @@ -574,38 +612,37 @@ struct CastModifier: public Modifier { // for which there is no defined conversion. So do nothing. } } - }; struct SelectModifier: public Modifier { - SelectModifier(BasicBlock *BB, PieceTable *PT, Random *R): - Modifier(BB, PT, R) {} + SelectModifier(BasicBlock *BB, PieceTable *PT, Random *R) + : Modifier(BB, PT, R) {} void Act() override { // Try a bunch of different select configuration until a valid one is found. - Value *Val0 = getRandomVal(); - Value *Val1 = getRandomValue(Val0->getType()); + Value *Val0 = getRandomVal(); + Value *Val1 = getRandomValue(Val0->getType()); - Type *CondTy = Type::getInt1Ty(Context); + Type *CondTy = Type::getInt1Ty(Context); - // If the value type is a vector, and we allow vector select, then in 50% - // of the cases generate a vector select. - if (Val0->getType()->isVectorTy() && (getRandom() % 1)) { - unsigned NumElem = cast(Val0->getType())->getNumElements(); - CondTy = VectorType::get(CondTy, NumElem); - } + // If the value type is a vector, and we allow vector select, then in 50% + // of the cases generate a vector select. + if (Val0->getType()->isVectorTy() && (getRandom() % 1)) { + unsigned NumElem = cast(Val0->getType())->getNumElements(); + CondTy = VectorType::get(CondTy, NumElem); + } - Value *Cond = getRandomValue(CondTy); - Value *V = SelectInst::Create(Cond, Val0, Val1, "Sl", BB->getTerminator()); - return PT->push_back(V); + Value *Cond = getRandomValue(CondTy); + Value *V = SelectInst::Create(Cond, Val0, Val1, "Sl", BB->getTerminator()); + return PT->push_back(V); } }; - struct CmpModifier: public Modifier { - CmpModifier(BasicBlock *BB, PieceTable *PT, Random *R):Modifier(BB, PT, R) {} - void Act() override { + CmpModifier(BasicBlock *BB, PieceTable *PT, Random *R) + : Modifier(BB, PT, R) {} + void Act() override { Value *Val0 = getRandomVal(); Value *Val1 = getRandomValue(Val0->getType()); @@ -689,7 +726,7 @@ static void IntroduceControlFlow(Function *F, Random &R) { } } -} +} // end namespace llvm int main(int argc, char **argv) { using namespace llvm; @@ -699,7 +736,7 @@ int main(int argc, char **argv) { cl::ParseCommandLineOptions(argc, argv, "llvm codegen stress-tester\n"); llvm_shutdown_obj Y; - auto M = make_unique("/tmp/autogen.bc", Context); + auto M = llvm::make_unique("/tmp/autogen.bc", Context); Function *F = GenEmptyFunction(M.get()); // Pick an initial seed value diff --git a/tools/opt/PassPrinters.cpp b/tools/opt/PassPrinters.cpp index 65a53038fc5..f52b5208094 100644 --- a/tools/opt/PassPrinters.cpp +++ b/tools/opt/PassPrinters.cpp @@ -11,12 +11,18 @@ /// \brief Utilities to print analysis info for various kinds of passes. /// //===----------------------------------------------------------------------===// + #include "PassPrinters.h" +#include "llvm/Analysis/CallGraph.h" #include "llvm/Analysis/CallGraphSCCPass.h" +#include "llvm/Analysis/LoopInfo.h" #include "llvm/Analysis/LoopPass.h" +#include "llvm/Analysis/RegionInfo.h" #include "llvm/Analysis/RegionPass.h" +#include "llvm/IR/BasicBlock.h" #include "llvm/IR/Function.h" #include "llvm/Pass.h" +#include "llvm/Support/raw_ostream.h" #include using namespace llvm; @@ -226,7 +232,8 @@ struct BasicBlockPassPrinter : public BasicBlockPass { }; char BasicBlockPassPrinter::ID = 0; -} + +} // end anonymous namespace FunctionPass *llvm::createFunctionPassPrinter(const PassInfo *PI, raw_ostream &OS, bool Quiet) { diff --git a/tools/opt/PassPrinters.h b/tools/opt/PassPrinters.h index cf46ef9e36d..14b6e43d18e 100644 --- a/tools/opt/PassPrinters.h +++ b/tools/opt/PassPrinters.h @@ -1,4 +1,4 @@ -//===- PassPrinters.h - Utilities to print analysis info for passes -------===// +//=- PassPrinters.h - Utilities to print analysis info for passes -*- C++ -*-=// // // The LLVM Compiler Infrastructure // @@ -11,6 +11,7 @@ /// \brief Utilities to print analysis info for various kinds of passes. /// //===----------------------------------------------------------------------===// + #ifndef LLVM_TOOLS_OPT_PASSPRINTERS_H #define LLVM_TOOLS_OPT_PASSPRINTERS_H @@ -22,8 +23,8 @@ class FunctionPass; class ModulePass; class LoopPass; class PassInfo; -class RegionPass; class raw_ostream; +class RegionPass; FunctionPass *createFunctionPassPrinter(const PassInfo *PI, raw_ostream &out, bool Quiet); @@ -42,6 +43,7 @@ RegionPass *createRegionPassPrinter(const PassInfo *PI, raw_ostream &out, BasicBlockPass *createBasicBlockPassPrinter(const PassInfo *PI, raw_ostream &out, bool Quiet); -} + +} // end namespace llvm #endif // LLVM_TOOLS_OPT_PASSPRINTERS_H