summaryrefslogtreecommitdiff
path: root/compiler/optimizing/optimization.h
diff options
context:
space:
mode:
author Aart Bik <ajcbik@google.com> 2018-04-18 16:11:12 -0700
committer Aart Bik <ajcbik@google.com> 2018-04-30 08:58:32 -0700
commit2e14868d43b4f8c21f8567f336a9bf1a2576dc1b (patch)
tree3f17fc543c912e66ea937cd77b760f92faa4ea32 /compiler/optimizing/optimization.h
parent5503d264ac1b5dd23df4079dc14f26919de42bec (diff)
Step 2 of 2: conditional passes.
Rationale: The change introduces actual conditional passes (dependence on inliner). This ensures more cases are optimized downstream without needlessly introducing compile-time. NOTE: Some checker tests needed to be rewritten due to subtle changes in the phase ordering. No optimizations were harmed in the process, though. Bug: b/78171933, b/74026074 Test: test-art-host,target Change-Id: I335260df780e14ba1f22499ad74d79060c7be44d
Diffstat (limited to 'compiler/optimizing/optimization.h')
-rw-r--r--compiler/optimizing/optimization.h21
1 files changed, 16 insertions, 5 deletions
diff --git a/compiler/optimizing/optimization.h b/compiler/optimizing/optimization.h
index b00d686e5f..88b283cebf 100644
--- a/compiler/optimizing/optimization.h
+++ b/compiler/optimizing/optimization.h
@@ -102,21 +102,32 @@ enum class OptimizationPass {
#if defined(ART_ENABLE_CODEGEN_x86) || defined(ART_ENABLE_CODEGEN_x86_64)
kX86MemoryOperandGeneration,
#endif
+ kNone,
+ kLast = kNone
};
// Lookup name of optimization pass.
const char* OptimizationPassName(OptimizationPass pass);
// Lookup optimization pass by name.
-OptimizationPass OptimizationPassByName(const std::string& name);
+OptimizationPass OptimizationPassByName(const std::string& pass_name);
// Optimization definition consisting of an optimization pass
-// and an optional alternative name (nullptr denotes default).
-typedef std::pair<OptimizationPass, const char*> OptimizationDef;
+// an optional alternative name (nullptr denotes default), and
+// an optional pass dependence (kNone denotes no dependence).
+struct OptimizationDef {
+ OptimizationDef(OptimizationPass p, const char* pn, OptimizationPass d)
+ : pass(p), pass_name(pn), depends_on(d) {}
+ OptimizationPass pass;
+ const char* pass_name;
+ OptimizationPass depends_on;
+};
// Helper method for optimization definition array entries.
-inline OptimizationDef OptDef(OptimizationPass pass, const char* name = nullptr) {
- return std::make_pair(pass, name);
+inline OptimizationDef OptDef(OptimizationPass pass,
+ const char* pass_name = nullptr,
+ OptimizationPass depends_on = OptimizationPass::kNone) {
+ return OptimizationDef(pass, pass_name, depends_on);
}
// Helper method to construct series of optimization passes.