diff options
-rw-r--r-- | llvm/include/llvm/InitializePasses.h | 1 | ||||
-rw-r--r-- | llvm/include/llvm/LinkAllPasses.h | 1 | ||||
-rw-r--r-- | llvm/include/llvm/Transforms/IPO.h | 5 | ||||
-rw-r--r-- | llvm/lib/Transforms/IPO/CMakeLists.txt | 1 | ||||
-rw-r--r-- | llvm/lib/Transforms/IPO/IPO.cpp | 1 | ||||
-rw-r--r-- | llvm/test/Bitcode/use-list-order.ll | 2 | ||||
-rw-r--r-- | llvm/test/CMakeLists.txt | 1 | ||||
-rw-r--r-- | llvm/test/lit.cfg | 1 | ||||
-rw-r--r-- | llvm/tools/CMakeLists.txt | 2 | ||||
-rw-r--r-- | llvm/tools/llvm-uselistorder/CMakeLists.txt | 9 | ||||
-rw-r--r-- | llvm/tools/llvm-uselistorder/LLVMBuild.txt | 22 | ||||
-rw-r--r-- | llvm/tools/llvm-uselistorder/Makefile | 17 | ||||
-rw-r--r-- | llvm/tools/llvm-uselistorder/llvm-uselistorder.cpp (renamed from llvm/lib/Transforms/IPO/VerifyUseListOrder.cpp) | 73 |
13 files changed, 94 insertions, 42 deletions
diff --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h index ae036b462ab..20074f0a5d5 100644 --- a/llvm/include/llvm/InitializePasses.h +++ b/llvm/include/llvm/InitializePasses.h @@ -268,7 +268,6 @@ void initializeUnifyFunctionExitNodesPass(PassRegistry&); void initializeUnreachableBlockElimPass(PassRegistry&); void initializeUnreachableMachineBlockElimPass(PassRegistry&); void initializeVerifierLegacyPassPass(PassRegistry&); -void initializeVerifyUseListOrderPass(PassRegistry&); void initializeVirtRegMapPass(PassRegistry&); void initializeVirtRegRewriterPass(PassRegistry&); void initializeInstSimplifierPass(PassRegistry&); diff --git a/llvm/include/llvm/LinkAllPasses.h b/llvm/include/llvm/LinkAllPasses.h index ec695c8b79c..b7f832dcee9 100644 --- a/llvm/include/llvm/LinkAllPasses.h +++ b/llvm/include/llvm/LinkAllPasses.h @@ -161,7 +161,6 @@ namespace { (void) llvm::createPartiallyInlineLibCallsPass(); (void) llvm::createScalarizerPass(); (void) llvm::createSeparateConstOffsetFromGEPPass(); - (void) llvm::createVerifyUseListOrderPass(); (void)new llvm::IntervalPartition(); (void)new llvm::FindUsedTypes(); diff --git a/llvm/include/llvm/Transforms/IPO.h b/llvm/include/llvm/Transforms/IPO.h index ca6d5144fc4..ce1a7d6a523 100644 --- a/llvm/include/llvm/Transforms/IPO.h +++ b/llvm/include/llvm/Transforms/IPO.h @@ -118,11 +118,6 @@ ModulePass *createInternalizePass(ArrayRef<const char *> ExportList); /// createInternalizePass - Same as above, but with an empty exportList. ModulePass *createInternalizePass(); -/// \brief Verify that use-list order doesn't change after shuffling. -/// -/// \note This is a transformation, since the use-list order changes. -ModulePass *createVerifyUseListOrderPass(); - //===----------------------------------------------------------------------===// /// createDeadArgEliminationPass - This pass removes arguments from functions /// which are not used by the body of the function. diff --git a/llvm/lib/Transforms/IPO/CMakeLists.txt b/llvm/lib/Transforms/IPO/CMakeLists.txt index 070ecfdc143..90c1c33e6dc 100644 --- a/llvm/lib/Transforms/IPO/CMakeLists.txt +++ b/llvm/lib/Transforms/IPO/CMakeLists.txt @@ -20,7 +20,6 @@ add_llvm_library(LLVMipo PruneEH.cpp StripDeadPrototypes.cpp StripSymbols.cpp - VerifyUseListOrder.cpp ) add_dependencies(LLVMipo intrinsics_gen) diff --git a/llvm/lib/Transforms/IPO/IPO.cpp b/llvm/lib/Transforms/IPO/IPO.cpp index 5dce2d6b407..b4d31d8d6fc 100644 --- a/llvm/lib/Transforms/IPO/IPO.cpp +++ b/llvm/lib/Transforms/IPO/IPO.cpp @@ -44,7 +44,6 @@ void llvm::initializeIPO(PassRegistry &Registry) { initializeStripDebugDeclarePass(Registry); initializeStripDeadDebugInfoPass(Registry); initializeStripNonDebugSymbolsPass(Registry); - initializeVerifyUseListOrderPass(Registry); initializeBarrierNoopPass(Registry); } diff --git a/llvm/test/Bitcode/use-list-order.ll b/llvm/test/Bitcode/use-list-order.ll index 6d87dedee51..aef526403c6 100644 --- a/llvm/test/Bitcode/use-list-order.ll +++ b/llvm/test/Bitcode/use-list-order.ll @@ -1,4 +1,4 @@ -; RUN: opt -S < %s -preserve-bc-use-list-order -verify-use-list-order +; RUN: llvm-uselistorder < %s -preserve-bc-use-list-order ; XFAIL: * @a = global [4 x i1] [i1 0, i1 1, i1 0, i1 1] diff --git a/llvm/test/CMakeLists.txt b/llvm/test/CMakeLists.txt index 928b87a778c..59a17b19506 100644 --- a/llvm/test/CMakeLists.txt +++ b/llvm/test/CMakeLists.txt @@ -44,6 +44,7 @@ set(LLVM_TEST_DEPENDS llvm-rtdyld llvm-symbolizer llvm-tblgen + llvm-uselistorder llvm-vtabledump macho-dump opt diff --git a/llvm/test/lit.cfg b/llvm/test/lit.cfg index 99c05a79489..2b9b2d9a7d0 100644 --- a/llvm/test/lit.cfg +++ b/llvm/test/lit.cfg @@ -228,6 +228,7 @@ for pattern in [r"\bbugpoint\b(?!-)", r"\bllvm-rtdyld\b", r"\bllvm-size\b", r"\bllvm-tblgen\b", + r"\bllvm-uselistorder\b", r"\bllvm-vtabledump\b", r"\bllvm-c-test\b", r"\bmacho-dump\b", diff --git a/llvm/tools/CMakeLists.txt b/llvm/tools/CMakeLists.txt index acc4eb12860..ef8095b688e 100644 --- a/llvm/tools/CMakeLists.txt +++ b/llvm/tools/CMakeLists.txt @@ -43,6 +43,8 @@ add_llvm_tool_subdirectory(llvm-bcanalyzer) add_llvm_tool_subdirectory(llvm-stress) add_llvm_tool_subdirectory(llvm-mcmarkup) +add_llvm_tool_subdirectory(llvm-uselistorder) + add_llvm_tool_subdirectory(llvm-symbolizer) add_llvm_tool_subdirectory(llvm-c-test) diff --git a/llvm/tools/llvm-uselistorder/CMakeLists.txt b/llvm/tools/llvm-uselistorder/CMakeLists.txt new file mode 100644 index 00000000000..21c46e9d56a --- /dev/null +++ b/llvm/tools/llvm-uselistorder/CMakeLists.txt @@ -0,0 +1,9 @@ +set(LLVM_LINK_COMPONENTS + Support + IRReader + BitWriter + ) + +add_llvm_tool(llvm-uselistorder + llvm-uselistorder.cpp + ) diff --git a/llvm/tools/llvm-uselistorder/LLVMBuild.txt b/llvm/tools/llvm-uselistorder/LLVMBuild.txt new file mode 100644 index 00000000000..b9d6f10b89e --- /dev/null +++ b/llvm/tools/llvm-uselistorder/LLVMBuild.txt @@ -0,0 +1,22 @@ +;===- ./tools/llvm-uselistorder/LLVMBuild.txt ------------------*- Conf -*--===; +; +; The LLVM Compiler Infrastructure +; +; This file is distributed under the University of Illinois Open Source +; License. See LICENSE.TXT for details. +; +;===------------------------------------------------------------------------===; +; +; This is an LLVMBuild description file for the components in this subdirectory. +; +; For more information on the LLVMBuild system, please see: +; +; http://llvm.org/docs/LLVMBuild.html +; +;===------------------------------------------------------------------------===; + +[component_0] +type = Tool +name = llvm-uselistorder +parent = Tools +required_libraries = IRReader BitWriter Support diff --git a/llvm/tools/llvm-uselistorder/Makefile b/llvm/tools/llvm-uselistorder/Makefile new file mode 100644 index 00000000000..b9fc34b06e1 --- /dev/null +++ b/llvm/tools/llvm-uselistorder/Makefile @@ -0,0 +1,17 @@ +##===- tools/llvm-uselistorder/Makefile --------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LEVEL := ../.. +TOOLNAME := llvm-uselistorder +LINK_COMPONENTS := support irreader bitwriter + +# This tool has no plugins, optimize startup time. +TOOL_NO_EXPORTS := 1 + +include $(LEVEL)/Makefile.common diff --git a/llvm/lib/Transforms/IPO/VerifyUseListOrder.cpp b/llvm/tools/llvm-uselistorder/llvm-uselistorder.cpp index 16a88e3d9a1..1d5a3d9ba28 100644 --- a/llvm/lib/Transforms/IPO/VerifyUseListOrder.cpp +++ b/llvm/tools/llvm-uselistorder/llvm-uselistorder.cpp @@ -1,4 +1,4 @@ -//===- VerifyUseListOrder.cpp - Use List Order Verifier ---------*- C++ -*-===// +//===- opt.cpp - The LLVM Modular Optimizer -------------------------------===// // // The LLVM Compiler Infrastructure // @@ -7,33 +7,39 @@ // //===----------------------------------------------------------------------===// // -// Pass to verify use-list order doesn't change after serialization. -// -// Despite it being a verifier, this pass *does* transform the module, since it -// shuffles the use-list of every value. +// Optimizations may be specified an arbitrary number of times on the command +// line, They are run in the order specified. // //===----------------------------------------------------------------------===// -#include "llvm/Transforms/IPO.h" - #include "llvm/ADT/DenseMap.h" #include "llvm/AsmParser/Parser.h" #include "llvm/Bitcode/ReaderWriter.h" #include "llvm/IR/LLVMContext.h" #include "llvm/IR/Module.h" #include "llvm/IR/UseListOrder.h" -#include "llvm/Pass.h" +#include "llvm/IRReader/IRReader.h" +#include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/FileUtilities.h" +#include "llvm/Support/ManagedStatic.h" #include "llvm/Support/MemoryBuffer.h" +#include "llvm/Support/PrettyStackTrace.h" +#include "llvm/Support/Signals.h" #include "llvm/Support/SourceMgr.h" +#include "llvm/Support/SystemUtils.h" using namespace llvm; #define DEBUG_TYPE "use-list-order" +static cl::opt<std::string> InputFilename(cl::Positional, + cl::desc("<input bitcode file>"), + cl::init("-"), + cl::value_desc("filename")); + namespace { struct TempFile { @@ -329,42 +335,45 @@ static bool verifyAssemblyUseListOrder(const Module &M) { return matches(ValueMapping(M), ValueMapping(*OtherM)); } -namespace { -class VerifyUseListOrder : public ModulePass { -public: - static char ID; - VerifyUseListOrder(); - bool runOnModule(Module &M) override; -}; -} // end anonymous namespace +int main(int argc, char **argv) { + sys::PrintStackTraceOnErrorSignal(); + llvm::PrettyStackTraceProgram X(argc, argv); -char VerifyUseListOrder::ID = 0; -INITIALIZE_PASS(VerifyUseListOrder, "verify-use-list-order", - "Verify Use List Order", false, false) -VerifyUseListOrder::VerifyUseListOrder() : ModulePass(ID) { - initializeVerifyUseListOrderPass(*PassRegistry::getPassRegistry()); -} + // Enable debug stream buffering. + EnableDebugBuffering = true; + + llvm_shutdown_obj Y; // Call llvm_shutdown() on exit. + LLVMContext &Context = getGlobalContext(); + + cl::ParseCommandLineOptions(argc, argv, + "llvm tool to verify use-list order\n"); + + SMDiagnostic Err; + + // Load the input module... + std::unique_ptr<Module> M; + M.reset(ParseIRFile(InputFilename, Err, Context)); + + if (!M.get()) { + Err.print(argv[0], errs()); + return 1; + } -bool VerifyUseListOrder::runOnModule(Module &M) { DEBUG(dbgs() << "*** verify-use-list-order ***\n"); if (!shouldPreserveBitcodeUseListOrder()) { // Can't verify if order isn't preserved. DEBUG(dbgs() << "warning: cannot verify bitcode; " "try -preserve-bc-use-list-order\n"); - return false; + return 0; } - shuffleUseLists(M); - if (!verifyBitcodeUseListOrder(M)) + shuffleUseLists(*M); + if (!verifyBitcodeUseListOrder(*M)) report_fatal_error("bitcode use-list order changed"); if (shouldPreserveBitcodeUseListOrder()) - if (!verifyAssemblyUseListOrder(M)) + if (!verifyAssemblyUseListOrder(*M)) report_fatal_error("assembly use-list order changed"); - return true; -} - -ModulePass *llvm::createVerifyUseListOrderPass() { - return new VerifyUseListOrder; + return 0; } |