aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/Transforms/IPO/SimpleStructMutation.h
blob: f159c4de022ccda5c04d3ebf648b73e523a56a07 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//===- llvm/Transforms/SimpleStructMutation.h - Permute Structs --*- C++ -*--=//
//
// This pass does is a wrapper that can do a few simple structure mutation
// transformations.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_TRANSFORMS_SIMPLESTRUCTMUTATION_H
#define LLVM_TRANSFORMS_SIMPLESTRUCTMUTATION_H

#include "llvm/Transforms/IPO/MutateStructTypes.h"

class SimpleStructMutation : public MutateStructTypes {
public:
  enum Transform { SwapElements, SortElements } CurrentXForm;

  SimpleStructMutation(enum Transform XForm) : CurrentXForm(XForm) {}

  virtual bool run(Module *M) {
    setTransforms(getTransforms(M, CurrentXForm));
    bool Changed = MutateStructTypes::run(M);
    clearTransforms();
    return Changed;
  }

  // getAnalysisUsageInfo - This function needs the results of the
  // FindUsedTypes and FindUnsafePointerTypes analysis passes...
  //
  virtual void getAnalysisUsageInfo(Pass::AnalysisSet &Required,
                                    Pass::AnalysisSet &Destroyed,
                                    Pass::AnalysisSet &Provided);

private:
  TransformsType getTransforms(Module *M, enum Transform);
};

#endif