summaryrefslogtreecommitdiff
path: root/include/llvm/Optimizations/AllOpts.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/llvm/Optimizations/AllOpts.h')
-rw-r--r--include/llvm/Optimizations/AllOpts.h95
1 files changed, 95 insertions, 0 deletions
diff --git a/include/llvm/Optimizations/AllOpts.h b/include/llvm/Optimizations/AllOpts.h
new file mode 100644
index 0000000000..bfb7b5768e
--- /dev/null
+++ b/include/llvm/Optimizations/AllOpts.h
@@ -0,0 +1,95 @@
+//===-- llvm/AllOpts.h - Header file to get all opt passes -------*- C++ -*--=//
+//
+// This file #include's all of the small optimization header files.
+//
+// Note that all optimizations return true if they modified the program, false
+// if not.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_OPT_ALLOPTS_H
+#define LLVM_OPT_ALLOPTS_H
+
+#include "llvm/Module.h"
+#include "llvm/BasicBlock.h"
+class Method;
+class CallInst;
+
+//===----------------------------------------------------------------------===//
+// Helper functions
+//
+
+static inline bool ApplyOptToAllMethods(Module *C, bool (*Opt)(Method*)) {
+ bool Modified = false;
+ for (Module::MethodListType::iterator I = C->getMethodList().begin();
+ I != C->getMethodList().end(); I++)
+ Modified |= Opt(*I);
+ return Modified;
+}
+
+//===----------------------------------------------------------------------===//
+// Dead Code Elimination Pass
+//
+
+bool DoDeadCodeElimination(Method *M); // DCE a method
+bool DoRemoveUnusedConstants(SymTabValue *S); // RUC a method or class
+bool DoDeadCodeElimination(Module *C); // DCE & RUC a whole class
+
+//===----------------------------------------------------------------------===//
+// Constant Propogation Pass
+//
+
+bool DoConstantPropogation(Method *M);
+
+static inline bool DoConstantPropogation(Module *C) {
+ return ApplyOptToAllMethods(C, DoConstantPropogation);
+}
+
+//===----------------------------------------------------------------------===//
+// Method Inlining Pass
+//
+
+// DoMethodInlining - Use a heuristic based approach to inline methods that seem
+// to look good.
+//
+bool DoMethodInlining(Method *M);
+
+static inline bool DoMethodInlining(Module *C) {
+ return ApplyOptToAllMethods(C, DoMethodInlining);
+}
+
+// InlineMethod - This function forcibly inlines the called method into the
+// basic block of the caller. This returns true if it is not possible to inline
+// this call. The program is still in a well defined state if this occurs
+// though.
+//
+// Note that this only does one level of inlining. For example, if the
+// instruction 'call B' is inlined, and 'B' calls 'C', then the call to 'C' now
+// exists in the instruction stream. Similiarly this will inline a recursive
+// method by one level.
+//
+bool InlineMethod(CallInst *C);
+bool InlineMethod(BasicBlock::InstListType::iterator CI);// *CI must be CallInst
+
+
+//===----------------------------------------------------------------------===//
+// Symbol Stripping Pass
+//
+
+// DoSymbolStripping - Remove all symbolic information from a method
+//
+bool DoSymbolStripping(Method *M);
+
+// DoSymbolStripping - Remove all symbolic information from all methods in a
+// module
+//
+static inline bool DoSymbolStripping(Module *M) {
+ return ApplyOptToAllMethods(M, DoSymbolStripping);
+}
+
+// DoFullSymbolStripping - Remove all symbolic information from all methods
+// in a module, and all module level symbols. (method names, etc...)
+//
+bool DoFullSymbolStripping(Module *M);
+
+#endif