1#ifndef LLVM_TRANSFORMS_UTILS_IRNORMALIZER_H
2#define LLVM_TRANSFORMS_UTILS_IRNORMALIZER_H
3
4#include "llvm/IR/PassManager.h"
5
6namespace llvm {
7
8struct IRNormalizerOptions {
9 /// Preserves original instruction order.
10 bool PreserveOrder = false;
11
12 /// Renames all instructions (including user-named)
13 bool RenameAll = true;
14
15 /// Folds all regular instructions (including pre-outputs)
16 bool FoldPreOutputs = true;
17
18 /// Sorts and reorders operands in commutative instructions
19 bool ReorderOperands = true;
20};
21
22/// IRNormalizer aims to transform LLVM IR into normal form.
23struct IRNormalizerPass : public PassInfoMixin<IRNormalizerPass> {
24private:
25 const IRNormalizerOptions Options;
26
27public:
28 IRNormalizerPass(IRNormalizerOptions Options = IRNormalizerOptions())
29 : Options(Options) {}
30
31 PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM) const;
32};
33
34} // namespace llvm
35
36#endif // LLVM_TRANSFORMS_UTILS_IRNORMALIZER_H
37