UseListOrder.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. //===- llvm/IR/UseListOrder.h - LLVM Use List Order -------------*- C++ -*-===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. //
  10. // This file has structures and command-line options for preserving use-list
  11. // order.
  12. //
  13. //===----------------------------------------------------------------------===//
  14. #ifndef LLVM_IR_USELISTORDER_H
  15. #define LLVM_IR_USELISTORDER_H
  16. #include "llvm/ADT/ArrayRef.h"
  17. #include "llvm/ADT/SmallVector.h"
  18. #include <vector>
  19. namespace llvm {
  20. class Module;
  21. class Function;
  22. class Value;
  23. /// \brief Structure to hold a use-list order.
  24. struct UseListOrder {
  25. const Value *V;
  26. const Function *F;
  27. std::vector<unsigned> Shuffle;
  28. UseListOrder(const Value *V, const Function *F, size_t ShuffleSize)
  29. : V(V), F(F), Shuffle(ShuffleSize) {}
  30. UseListOrder() : V(0), F(0) {}
  31. UseListOrder(UseListOrder &&X)
  32. : V(X.V), F(X.F), Shuffle(std::move(X.Shuffle)) {}
  33. UseListOrder &operator=(UseListOrder &&X) {
  34. V = X.V;
  35. F = X.F;
  36. Shuffle = std::move(X.Shuffle);
  37. return *this;
  38. }
  39. private:
  40. UseListOrder(const UseListOrder &X) = delete;
  41. UseListOrder &operator=(const UseListOrder &X) = delete;
  42. };
  43. typedef std::vector<UseListOrder> UseListOrderStack;
  44. } // end namespace llvm
  45. #endif