summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2002-01-30 23:29:35 +0000
committerChris Lattner <sabre@nondot.org>2002-01-30 23:29:35 +0000
commit967a04442d92f224911eb65b4c06102048f318c2 (patch)
treea4cbe8ad2490fd3bf9ad319a14e14db94e753482 /include
parentfacd752d3afaeca7dee46648f2a2ae209a94e5e9 (diff)
downloadllvm-967a04442d92f224911eb65b4c06102048f318c2.tar.gz
llvm-967a04442d92f224911eb65b4c06102048f318c2.tar.bz2
llvm-967a04442d92f224911eb65b4c06102048f318c2.tar.xz
Convert xforms over to use new pass structure
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1596 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r--include/llvm/Transforms/IPO.h13
-rw-r--r--include/llvm/Transforms/IPO/ConstantMerge.h1
-rw-r--r--include/llvm/Transforms/IPO/GlobalDCE.h8
-rw-r--r--include/llvm/Transforms/IPO/SimpleStructMutation.h9
-rw-r--r--include/llvm/Transforms/MutateStructTypes.h11
-rw-r--r--include/llvm/Transforms/Scalar/ConstantProp.h5
-rw-r--r--include/llvm/Transforms/Scalar/DCE.h14
-rw-r--r--include/llvm/Transforms/Scalar/IndVarSimplify.h10
-rw-r--r--include/llvm/Transforms/Scalar/InductionVars.h12
-rw-r--r--include/llvm/Transforms/Scalar/InstructionCombining.h1
-rw-r--r--include/llvm/Transforms/Utils/UnifyFunctionExitNodes.h37
11 files changed, 98 insertions, 23 deletions
diff --git a/include/llvm/Transforms/IPO.h b/include/llvm/Transforms/IPO.h
index 1141d22490..313aea2090 100644
--- a/include/llvm/Transforms/IPO.h
+++ b/include/llvm/Transforms/IPO.h
@@ -6,12 +6,9 @@
#ifndef LLVM_TRANSFORMS_CLEANUPGCCOUTPUT_H
#define LLVM_TRANSFORMS_CLEANUPGCCOUTPUT_H
-#include "llvm/Analysis/FindUsedTypes.h"
-
-class CleanupGCCOutput : public MethodPass {
- FindUsedTypes FUT; // Use FUT to eliminate type names that are never used
-public:
+#include "llvm/Pass.h"
+struct CleanupGCCOutput : public MethodPass {
// PatchUpMethodReferences - This is a part of the functionality exported by
// the CleanupGCCOutput pass. This causes functions with different signatures
// to be linked together if they have the same name.
@@ -32,6 +29,12 @@ public:
// doPassFinalization - Strip out type names that are unused by the program
bool doFinalization(Module *M);
+
+ // getAnalysisUsageInfo - This function needs FindUsedTypes to do its job...
+ //
+ virtual void getAnalysisUsageInfo(Pass::AnalysisSet &Required,
+ Pass::AnalysisSet &Destroyed,
+ Pass::AnalysisSet &Provided);
};
#endif
diff --git a/include/llvm/Transforms/IPO/ConstantMerge.h b/include/llvm/Transforms/IPO/ConstantMerge.h
index 54f699a811..efc91f400b 100644
--- a/include/llvm/Transforms/IPO/ConstantMerge.h
+++ b/include/llvm/Transforms/IPO/ConstantMerge.h
@@ -18,7 +18,6 @@
#define LLVM_TRANSFORMS_CONSTANTMERGE_H
#include "llvm/Pass.h"
-#include <map>
class Constant;
class GlobalVariable;
diff --git a/include/llvm/Transforms/IPO/GlobalDCE.h b/include/llvm/Transforms/IPO/GlobalDCE.h
index c4c74470de..497416cbce 100644
--- a/include/llvm/Transforms/IPO/GlobalDCE.h
+++ b/include/llvm/Transforms/IPO/GlobalDCE.h
@@ -18,6 +18,14 @@ struct GlobalDCE : public Pass {
// the specified callgraph to reflect the changes.
//
bool run(Module *M);
+
+ // getAnalysisUsageInfo - This function works on the call graph of a module.
+ // It is capable of updating the call graph to reflect the new state of the
+ // module.
+ //
+ virtual void getAnalysisUsageInfo(Pass::AnalysisSet &Required,
+ Pass::AnalysisSet &Destroyed,
+ Pass::AnalysisSet &Provided);
};
#endif
diff --git a/include/llvm/Transforms/IPO/SimpleStructMutation.h b/include/llvm/Transforms/IPO/SimpleStructMutation.h
index 49c34e37f2..f159c4de02 100644
--- a/include/llvm/Transforms/IPO/SimpleStructMutation.h
+++ b/include/llvm/Transforms/IPO/SimpleStructMutation.h
@@ -23,8 +23,15 @@ public:
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:
- static TransformsType getTransforms(Module *M, enum Transform);
+ TransformsType getTransforms(Module *M, enum Transform);
};
#endif
diff --git a/include/llvm/Transforms/MutateStructTypes.h b/include/llvm/Transforms/MutateStructTypes.h
index 390168f645..f1132fd6a6 100644
--- a/include/llvm/Transforms/MutateStructTypes.h
+++ b/include/llvm/Transforms/MutateStructTypes.h
@@ -15,8 +15,10 @@
#define LLVM_TRANSFORMS_MUTATESTRUCTTYPES_H
#include "llvm/Pass.h"
-#include <map>
+#include "llvm/AbstractTypeUser.h"
+class Value;
+class Type;
class StructType;
class CompositeType;
class GlobalValue;
@@ -58,6 +60,13 @@ public:
// run - do the transformation
virtual bool run(Module *M);
+ // 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);
+
protected:
// Alternatively, it is valid to subclass this class and provide transforms
diff --git a/include/llvm/Transforms/Scalar/ConstantProp.h b/include/llvm/Transforms/Scalar/ConstantProp.h
index d9adf3f399..c4d973516c 100644
--- a/include/llvm/Transforms/Scalar/ConstantProp.h
+++ b/include/llvm/Transforms/Scalar/ConstantProp.h
@@ -4,10 +4,11 @@
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_OPT_CONSTANT_PROPOGATION_H
-#define LLVM_OPT_CONSTANT_PROPOGATION_H
+#ifndef LLVM_TRANSFORMS_SCALAR_CONSTANT_PROPOGATION_H
+#define LLVM_TRANSFORMS_SCALAR_CONSTANT_PROPOGATION_H
#include "llvm/Pass.h"
+#include "llvm/BasicBlock.h"
class TerminatorInst;
struct ConstantPropogation : public MethodPass {
diff --git a/include/llvm/Transforms/Scalar/DCE.h b/include/llvm/Transforms/Scalar/DCE.h
index 712223e1d0..6fc5287e42 100644
--- a/include/llvm/Transforms/Scalar/DCE.h
+++ b/include/llvm/Transforms/Scalar/DCE.h
@@ -9,7 +9,7 @@
#define LLVM_OPT_DCE_H
#include "llvm/Pass.h"
-#include "llvm/BasicBlock.h"
+#include "llvm/Method.h"
//===----------------------------------------------------------------------===//
// DeadInstElimination - This pass quickly removes trivially dead instructions
@@ -68,13 +68,13 @@ struct DeadCodeElimination : public MethodPass {
// it more successful are removing non-obviously dead instructions.
//
struct AgressiveDCE : public MethodPass {
- // DoADCE - Execute the Agressive Dead Code Elimination Algorithm
- //
- static bool doADCE(Method *M); // Defined in ADCE.cpp
+ virtual bool runOnMethod(Method *M);
- virtual bool runOnMethod(Method *M) {
- return doADCE(M);
- }
+ // getAnalysisUsageInfo - We require post dominance frontiers (aka Control
+ // Dependence Graph)
+ virtual void getAnalysisUsageInfo(Pass::AnalysisSet &Requires,
+ Pass::AnalysisSet &Destroyed,
+ Pass::AnalysisSet &Provided);
};
diff --git a/include/llvm/Transforms/Scalar/IndVarSimplify.h b/include/llvm/Transforms/Scalar/IndVarSimplify.h
index 13f811994b..902483eb8c 100644
--- a/include/llvm/Transforms/Scalar/IndVarSimplify.h
+++ b/include/llvm/Transforms/Scalar/IndVarSimplify.h
@@ -10,10 +10,16 @@
#include "llvm/Pass.h"
+namespace cfg { class LoopInfo; }
+
struct InductionVariableSimplify : public MethodPass {
- static bool doit(Method *M);
+ static bool doit(Method *M, cfg::LoopInfo &Loops);
+
+ virtual bool runOnMethod(Method *M);
- virtual bool runOnMethod(Method *M) { return doit(M); }
+ virtual void getAnalysisUsageInfo(Pass::AnalysisSet &Required,
+ Pass::AnalysisSet &Destroyed,
+ Pass::AnalysisSet &Provided);
};
#endif
diff --git a/include/llvm/Transforms/Scalar/InductionVars.h b/include/llvm/Transforms/Scalar/InductionVars.h
index 4faf3458f6..7c79afaa59 100644
--- a/include/llvm/Transforms/Scalar/InductionVars.h
+++ b/include/llvm/Transforms/Scalar/InductionVars.h
@@ -9,15 +9,19 @@
#define LLVM_OPT_INDUCTION_VARS_H
#include "llvm/Pass.h"
+namespace cfg { class IntervalPartition; }
struct InductionVariableCannonicalize : public MethodPass {
// doInductionVariableCannonicalize - Simplify induction variables in loops
//
- static bool doIt(Method *M);
+ static bool doIt(Method *M, cfg::IntervalPartition &IP);
- virtual bool runOnMethod(Method *M) {
- return doIt(M);
- }
+ virtual bool runOnMethod(Method *M);
+
+ // getAnalysisUsageInfo - Declare that we need IntervalPartitions
+ void getAnalysisUsageInfo(Pass::AnalysisSet &Required,
+ Pass::AnalysisSet &Destroyed,
+ Pass::AnalysisSet &Provided);
};
#endif
diff --git a/include/llvm/Transforms/Scalar/InstructionCombining.h b/include/llvm/Transforms/Scalar/InstructionCombining.h
index c79a1caf4b..0c395720e6 100644
--- a/include/llvm/Transforms/Scalar/InstructionCombining.h
+++ b/include/llvm/Transforms/Scalar/InstructionCombining.h
@@ -16,6 +16,7 @@
#define LLVM_TRANSFORMS_SCALAR_INSTRUCTIONCOMBINING_H
#include "llvm/Pass.h"
+class Instruction;
struct InstructionCombining : public MethodPass {
static bool doit(Method *M);
diff --git a/include/llvm/Transforms/Utils/UnifyFunctionExitNodes.h b/include/llvm/Transforms/Utils/UnifyFunctionExitNodes.h
new file mode 100644
index 0000000000..09394685c1
--- /dev/null
+++ b/include/llvm/Transforms/Utils/UnifyFunctionExitNodes.h
@@ -0,0 +1,37 @@
+//===-- UnifyMethodExitNodes.h - Ensure methods have one return --*- C++ -*--=//
+//
+// This pass is used to ensure that methods have at most one return instruction
+// in them. It also holds onto the return instruction of the last unified
+// method.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_XFORMS_UNIFY_METHOD_EXIT_NODES_H
+#define LLVM_XFORMS_UNIFY_METHOD_EXIT_NODES_H
+
+#include "llvm/Pass.h"
+#include "llvm/Analysis/SimplifyCFG.h" // FIXME!!
+
+struct UnifyMethodExitNodes : public MethodPass {
+ BasicBlock *ExitNode;
+public:
+ static AnalysisID ID; // Pass ID
+ UnifyMethodExitNodes(AnalysisID id) : ExitNode(0) { assert(ID == id); }
+
+ virtual bool runOnMethod(Method *M) {
+ ExitNode = cfg::UnifyAllExitNodes(M);
+
+ return true; // FIXME: This should return a correct code!!!
+ }
+
+ BasicBlock *getExitNode() const { return ExitNode; }
+
+ virtual void getAnalysisUsageInfo(Pass::AnalysisSet &Required,
+ Pass::AnalysisSet &Destroyed,
+ Pass::AnalysisSet &Provided) {
+ // FIXME: Should invalidate CFG
+ Provided.push_back(ID); // Provide self!
+ }
+};
+
+#endif