summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
Diffstat (limited to 'llvm')
-rw-r--r--llvm/include/llvm/InitializePasses.h1
-rw-r--r--llvm/include/llvm/LinkAllPasses.h1
-rw-r--r--llvm/include/llvm/Transforms/IPO.h5
-rw-r--r--llvm/lib/Transforms/IPO/CMakeLists.txt1
-rw-r--r--llvm/lib/Transforms/IPO/IPO.cpp1
-rw-r--r--llvm/test/Bitcode/use-list-order.ll2
-rw-r--r--llvm/test/CMakeLists.txt1
-rw-r--r--llvm/test/lit.cfg1
-rw-r--r--llvm/tools/CMakeLists.txt2
-rw-r--r--llvm/tools/llvm-uselistorder/CMakeLists.txt9
-rw-r--r--llvm/tools/llvm-uselistorder/LLVMBuild.txt22
-rw-r--r--llvm/tools/llvm-uselistorder/Makefile17
-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;
}
OpenPOWER on IntegriCloud