X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FIR%2FUseListOrder.h;h=b7c2418d348da2f44fb29c0bbdc91a6fed3fca7e;hb=de17e7736f6ca8c708acfcc297a466e786f38833;hp=ebc08cbd94e7380a0c84d4d4b74f238591753a7c;hpb=deb8e3091302f7f62fadc939575f561c7d44f9d0;p=oota-llvm.git diff --git a/include/llvm/IR/UseListOrder.h b/include/llvm/IR/UseListOrder.h index ebc08cbd94e..b7c2418d348 100644 --- a/include/llvm/IR/UseListOrder.h +++ b/include/llvm/IR/UseListOrder.h @@ -1,4 +1,4 @@ -//===- llvm/IR/UseListOrder.h - LLVM Use List Order functions ---*- C++ -*-===// +//===- llvm/IR/UseListOrder.h - LLVM Use List Order -------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -7,8 +7,8 @@ // //===----------------------------------------------------------------------===// // -// This file has functions to modify the use-list order and to verify that it -// doesn't change after serialization. +// This file has structures and command-line options for preserving use-list +// order. // //===----------------------------------------------------------------------===// @@ -16,19 +16,40 @@ #define LLVM_IR_USELISTORDER_H #include "llvm/ADT/ArrayRef.h" +#include "llvm/ADT/SmallVector.h" +#include namespace llvm { class Module; - -/// \brief Whether to preserve use-list ordering. -bool shouldPreserveBitcodeUseListOrder(); -bool shouldPreserveAssemblyUseListOrder(); - -/// \brief Shuffle all use-lists in a module. -/// -/// Adds \c SeedOffset to the default seed for the random number generator. -void shuffleUseLists(Module &M, unsigned SeedOffset = 0); +class Function; +class Value; + +/// \brief Structure to hold a use-list order. +struct UseListOrder { + const Value *V; + const Function *F; + std::vector Shuffle; + + UseListOrder(const Value *V, const Function *F, size_t ShuffleSize) + : V(V), F(F), Shuffle(ShuffleSize) {} + + UseListOrder() : V(0), F(0) {} + UseListOrder(UseListOrder &&X) + : V(X.V), F(X.F), Shuffle(std::move(X.Shuffle)) {} + UseListOrder &operator=(UseListOrder &&X) { + V = X.V; + F = X.F; + Shuffle = std::move(X.Shuffle); + return *this; + } + +private: + UseListOrder(const UseListOrder &X) = delete; + UseListOrder &operator=(const UseListOrder &X) = delete; +}; + +typedef std::vector UseListOrderStack; } // end namespace llvm