diff options
author | 2014-06-09 10:18:26 -0700 | |
---|---|---|
committer | 2014-06-14 16:59:05 -0700 | |
commit | e1f65bcb957a65c6d45b319d968bc53a833f2c65 (patch) | |
tree | f3562629207515af475802b02824be5021a42d1e | |
parent | 799605088f51dace7fddaf8493c8c6f3090fdaf6 (diff) |
ART: PassMEDataHolder should have a data field
For passes that would like to pass data around while working, let them actually
allocate it if need be in the Start, use it during the Worker, and
potentially free it during the End.
Change-Id: I03238ef17158f7e2615d6defe5d7f15432c8a511
Signed-off-by: Jean Christophe Beyler <jean.christophe.beyler@intel.com>
-rw-r--r-- | compiler/dex/bb_optimizations.cc | 4 | ||||
-rw-r--r-- | compiler/dex/bb_optimizations.h | 34 | ||||
-rw-r--r-- | compiler/dex/pass.h | 4 | ||||
-rw-r--r-- | compiler/dex/pass_me.h | 1 | ||||
-rw-r--r-- | compiler/dex/post_opt_passes.cc | 4 | ||||
-rw-r--r-- | compiler/dex/post_opt_passes.h | 46 |
6 files changed, 47 insertions, 46 deletions
diff --git a/compiler/dex/bb_optimizations.cc b/compiler/dex/bb_optimizations.cc index 06e259a65f..920cde28aa 100644 --- a/compiler/dex/bb_optimizations.cc +++ b/compiler/dex/bb_optimizations.cc @@ -54,9 +54,9 @@ bool BBCombine::Worker(const PassDataHolder* data) const { /* * BasicBlock Optimization pass implementation start. */ -void BBOptimizations::Start(const PassDataHolder* data) const { +void BBOptimizations::Start(PassDataHolder* data) const { DCHECK(data != nullptr); - CompilationUnit* c_unit = down_cast<const PassMEDataHolder*>(data)->c_unit; + CompilationUnit* c_unit = down_cast<PassMEDataHolder*>(data)->c_unit; DCHECK(c_unit != nullptr); /* * This pass has a different ordering depEnding on the suppress exception, diff --git a/compiler/dex/bb_optimizations.h b/compiler/dex/bb_optimizations.h index 00947902e7..2b097b5c73 100644 --- a/compiler/dex/bb_optimizations.h +++ b/compiler/dex/bb_optimizations.h @@ -31,9 +31,9 @@ class CacheFieldLoweringInfo : public PassME { CacheFieldLoweringInfo() : PassME("CacheFieldLoweringInfo", kNoNodes) { } - void Start(const PassDataHolder* data) const { + void Start(PassDataHolder* data) const { DCHECK(data != nullptr); - CompilationUnit* cUnit = down_cast<const PassMEDataHolder*>(data)->c_unit; + CompilationUnit* cUnit = down_cast<PassMEDataHolder*>(data)->c_unit; DCHECK(cUnit != nullptr); cUnit->mir_graph->DoCacheFieldLoweringInfo(); } @@ -55,9 +55,9 @@ class CacheMethodLoweringInfo : public PassME { CacheMethodLoweringInfo() : PassME("CacheMethodLoweringInfo", kNoNodes) { } - void Start(const PassDataHolder* data) const { + void Start(PassDataHolder* data) const { DCHECK(data != nullptr); - CompilationUnit* cUnit = down_cast<const PassMEDataHolder*>(data)->c_unit; + CompilationUnit* cUnit = down_cast<PassMEDataHolder*>(data)->c_unit; DCHECK(cUnit != nullptr); cUnit->mir_graph->DoCacheMethodLoweringInfo(); } @@ -86,9 +86,9 @@ class CallInlining : public PassME { return cUnit->mir_graph->InlineCallsGate(); } - void Start(const PassDataHolder* data) const { + void Start(PassDataHolder* data) const { DCHECK(data != nullptr); - CompilationUnit* cUnit = down_cast<const PassMEDataHolder*>(data)->c_unit; + CompilationUnit* cUnit = down_cast<PassMEDataHolder*>(data)->c_unit; DCHECK(cUnit != nullptr); cUnit->mir_graph->InlineCallsStart(); } @@ -105,9 +105,9 @@ class CallInlining : public PassME { return false; } - void End(const PassDataHolder* data) const { + void End(PassDataHolder* data) const { DCHECK(data != nullptr); - CompilationUnit* cUnit = down_cast<const PassMEDataHolder*>(data)->c_unit; + CompilationUnit* cUnit = down_cast<PassMEDataHolder*>(data)->c_unit; DCHECK(cUnit != nullptr); cUnit->mir_graph->InlineCallsEnd(); } @@ -122,9 +122,9 @@ class CodeLayout : public PassME { CodeLayout() : PassME("CodeLayout", kAllNodes, kOptimizationBasicBlockChange, "2_post_layout_cfg") { } - void Start(const PassDataHolder* data) const { + void Start(PassDataHolder* data) const { DCHECK(data != nullptr); - CompilationUnit* cUnit = down_cast<const PassMEDataHolder*>(data)->c_unit; + CompilationUnit* cUnit = down_cast<PassMEDataHolder*>(data)->c_unit; DCHECK(cUnit != nullptr); cUnit->mir_graph->VerifyDataflow(); } @@ -142,9 +142,9 @@ class NullCheckEliminationAndTypeInference : public PassME { : PassME("NCE_TypeInference", kRepeatingPreOrderDFSTraversal, "4_post_nce_cfg") { } - void Start(const PassDataHolder* data) const { + void Start(PassDataHolder* data) const { DCHECK(data != nullptr); - CompilationUnit* cUnit = down_cast<const PassMEDataHolder*>(data)->c_unit; + CompilationUnit* cUnit = down_cast<PassMEDataHolder*>(data)->c_unit; DCHECK(cUnit != nullptr); cUnit->mir_graph->EliminateNullChecksAndInferTypesStart(); } @@ -159,9 +159,9 @@ class NullCheckEliminationAndTypeInference : public PassME { return cUnit->mir_graph->EliminateNullChecksAndInferTypes(bb); } - void End(const PassDataHolder* data) const { + void End(PassDataHolder* data) const { DCHECK(data != nullptr); - CompilationUnit* cUnit = down_cast<const PassMEDataHolder*>(data)->c_unit; + CompilationUnit* cUnit = down_cast<PassMEDataHolder*>(data)->c_unit; DCHECK(cUnit != nullptr); cUnit->mir_graph->EliminateNullChecksAndInferTypesEnd(); } @@ -189,9 +189,9 @@ class ClassInitCheckElimination : public PassME { return cUnit->mir_graph->EliminateClassInitChecks(bb); } - void End(const PassDataHolder* data) const { + void End(PassDataHolder* data) const { DCHECK(data != nullptr); - CompilationUnit* cUnit = down_cast<const PassMEDataHolder*>(data)->c_unit; + CompilationUnit* cUnit = down_cast<PassMEDataHolder*>(data)->c_unit; DCHECK(cUnit != nullptr); cUnit->mir_graph->EliminateClassInitChecksEnd(); } @@ -232,7 +232,7 @@ class BBOptimizations : public PassME { return ((cUnit->disable_opt & (1 << kBBOpt)) == 0); } - void Start(const PassDataHolder* data) const; + void Start(PassDataHolder* data) const; }; } // namespace art diff --git a/compiler/dex/pass.h b/compiler/dex/pass.h index b4906d67df..dbb5366af6 100644 --- a/compiler/dex/pass.h +++ b/compiler/dex/pass.h @@ -64,7 +64,7 @@ class Pass { /** * @brief Start of the pass: called before the Worker function. */ - virtual void Start(const PassDataHolder* data) const { + virtual void Start(PassDataHolder* data) const { // Unused parameter. UNUSED(data); } @@ -72,7 +72,7 @@ class Pass { /** * @brief End of the pass: called after the WalkBasicBlocks function. */ - virtual void End(const PassDataHolder* data) const { + virtual void End(PassDataHolder* data) const { // Unused parameter. UNUSED(data); } diff --git a/compiler/dex/pass_me.h b/compiler/dex/pass_me.h index 9efd5aeb40..ff698654cf 100644 --- a/compiler/dex/pass_me.h +++ b/compiler/dex/pass_me.h @@ -42,6 +42,7 @@ class PassMEDataHolder: public PassDataHolder { public: CompilationUnit* c_unit; BasicBlock* bb; + void* data; }; enum DataFlowAnalysisMode { diff --git a/compiler/dex/post_opt_passes.cc b/compiler/dex/post_opt_passes.cc index 58700a4bd3..1371652984 100644 --- a/compiler/dex/post_opt_passes.cc +++ b/compiler/dex/post_opt_passes.cc @@ -74,9 +74,9 @@ bool ClearPhiInstructions::Worker(const PassDataHolder* data) const { return false; } -void CalculatePredecessors::Start(const PassDataHolder* data) const { +void CalculatePredecessors::Start(PassDataHolder* data) const { DCHECK(data != nullptr); - CompilationUnit* c_unit = down_cast<const PassMEDataHolder*>(data)->c_unit; + CompilationUnit* c_unit = down_cast<PassMEDataHolder*>(data)->c_unit; DCHECK(c_unit != nullptr); // First get the MIRGraph here to factorize a bit the code. MIRGraph *mir_graph = c_unit->mir_graph.get(); diff --git a/compiler/dex/post_opt_passes.h b/compiler/dex/post_opt_passes.h index f2035052c9..445c46d038 100644 --- a/compiler/dex/post_opt_passes.h +++ b/compiler/dex/post_opt_passes.h @@ -32,11 +32,11 @@ class InitializeData : public PassME { InitializeData() : PassME("InitializeData") { } - void Start(const PassDataHolder* data) const { + void Start(PassDataHolder* data) const { // New blocks may have been inserted so the first thing we do is ensure that // the c_unit's number of blocks matches the actual count of basic blocks. DCHECK(data != nullptr); - CompilationUnit* c_unit = down_cast<const PassMEDataHolder*>(data)->c_unit; + CompilationUnit* c_unit = down_cast<PassMEDataHolder*>(data)->c_unit; DCHECK(c_unit != nullptr); c_unit->mir_graph.get()->InitializeBasicBlockData(); c_unit->mir_graph.get()->SSATransformationStart(); @@ -78,7 +78,7 @@ class CalculatePredecessors : public PassME { CalculatePredecessors() : PassME("CalculatePredecessors") { } - void Start(const PassDataHolder* data) const; + void Start(PassDataHolder* data) const; }; /** @@ -90,9 +90,9 @@ class DFSOrders : public PassME { DFSOrders() : PassME("DFSOrders") { } - void Start(const PassDataHolder* data) const { + void Start(PassDataHolder* data) const { DCHECK(data != nullptr); - CompilationUnit* c_unit = down_cast<const PassMEDataHolder*>(data)->c_unit; + CompilationUnit* c_unit = down_cast<PassMEDataHolder*>(data)->c_unit; DCHECK(c_unit != nullptr); c_unit->mir_graph.get()->ComputeDFSOrders(); } @@ -107,17 +107,17 @@ class BuildDomination : public PassME { BuildDomination() : PassME("BuildDomination") { } - void Start(const PassDataHolder* data) const { + void Start(PassDataHolder* data) const { DCHECK(data != nullptr); - CompilationUnit* c_unit = down_cast<const PassMEDataHolder*>(data)->c_unit; + CompilationUnit* c_unit = down_cast<PassMEDataHolder*>(data)->c_unit; DCHECK(c_unit != nullptr); c_unit->mir_graph.get()->ComputeDominators(); c_unit->mir_graph.get()->CompilerInitializeSSAConversion(); } - void End(const PassDataHolder* data) const { + void End(PassDataHolder* data) const { DCHECK(data != nullptr); - CompilationUnit* c_unit = down_cast<const PassMEDataHolder*>(data)->c_unit; + CompilationUnit* c_unit = down_cast<PassMEDataHolder*>(data)->c_unit; DCHECK(c_unit != nullptr); // Verify the dataflow information after the pass. if (c_unit->enable_debug & (1 << kDebugVerifyDataflow)) { @@ -135,9 +135,9 @@ class DefBlockMatrix : public PassME { DefBlockMatrix() : PassME("DefBlockMatrix") { } - void Start(const PassDataHolder* data) const { + void Start(PassDataHolder* data) const { DCHECK(data != nullptr); - CompilationUnit* c_unit = down_cast<const PassMEDataHolder*>(data)->c_unit; + CompilationUnit* c_unit = down_cast<PassMEDataHolder*>(data)->c_unit; DCHECK(c_unit != nullptr); c_unit->mir_graph.get()->ComputeDefBlockMatrix(); } @@ -152,9 +152,9 @@ class CreatePhiNodes : public PassME { CreatePhiNodes() : PassME("CreatePhiNodes") { } - void Start(const PassDataHolder* data) const { + void Start(PassDataHolder* data) const { DCHECK(data != nullptr); - CompilationUnit* c_unit = down_cast<const PassMEDataHolder*>(data)->c_unit; + CompilationUnit* c_unit = down_cast<PassMEDataHolder*>(data)->c_unit; DCHECK(c_unit != nullptr); c_unit->mir_graph.get()->InsertPhiNodes(); } @@ -170,9 +170,9 @@ class ClearVisitedFlag : public PassME { ClearVisitedFlag() : PassME("ClearVisitedFlag") { } - void Start(const PassDataHolder* data) const { + void Start(PassDataHolder* data) const { DCHECK(data != nullptr); - CompilationUnit* c_unit = down_cast<const PassMEDataHolder*>(data)->c_unit; + CompilationUnit* c_unit = down_cast<PassMEDataHolder*>(data)->c_unit; DCHECK(c_unit != nullptr); c_unit->mir_graph.get()->ClearAllVisitedFlags(); } @@ -187,9 +187,9 @@ class SSAConversion : public PassME { SSAConversion() : PassME("SSAConversion") { } - void Start(const PassDataHolder* data) const { + void Start(PassDataHolder* data) const { DCHECK(data != nullptr); - CompilationUnit* c_unit = down_cast<const PassMEDataHolder*>(data)->c_unit; + CompilationUnit* c_unit = down_cast<PassMEDataHolder*>(data)->c_unit; DCHECK(c_unit != nullptr); MIRGraph *mir_graph = c_unit->mir_graph.get(); mir_graph->DoDFSPreOrderSSARename(mir_graph->GetEntryBlock()); @@ -226,9 +226,9 @@ class PerformInitRegLocations : public PassME { PerformInitRegLocations() : PassME("PerformInitRegLocation") { } - void Start(const PassDataHolder* data) const { + void Start(PassDataHolder* data) const { DCHECK(data != nullptr); - CompilationUnit* c_unit = down_cast<const PassMEDataHolder*>(data)->c_unit; + CompilationUnit* c_unit = down_cast<PassMEDataHolder*>(data)->c_unit; DCHECK(c_unit != nullptr); c_unit->mir_graph->InitRegLocations(); } @@ -254,9 +254,9 @@ class ConstantPropagation : public PassME { return false; } - void Start(const PassDataHolder* data) const { + void Start(PassDataHolder* data) const { DCHECK(data != nullptr); - CompilationUnit* c_unit = down_cast<const PassMEDataHolder*>(data)->c_unit; + CompilationUnit* c_unit = down_cast<PassMEDataHolder*>(data)->c_unit; DCHECK(c_unit != nullptr); c_unit->mir_graph->InitializeConstantPropagation(); } @@ -271,9 +271,9 @@ class FreeData : public PassME { FreeData() : PassME("FreeData") { } - void End(const PassDataHolder* data) const { + void End(PassDataHolder* data) const { DCHECK(data != nullptr); - CompilationUnit* c_unit = down_cast<const PassMEDataHolder*>(data)->c_unit; + CompilationUnit* c_unit = down_cast<PassMEDataHolder*>(data)->c_unit; DCHECK(c_unit != nullptr); c_unit->mir_graph.get()->SSATransformationEnd(); } |