diff options
Diffstat (limited to 'compiler/optimizing/linear_order.h')
-rw-r--r-- | compiler/optimizing/linear_order.h | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/compiler/optimizing/linear_order.h b/compiler/optimizing/linear_order.h index 7122d67be9..151db001e1 100644 --- a/compiler/optimizing/linear_order.h +++ b/compiler/optimizing/linear_order.h @@ -17,10 +17,14 @@ #ifndef ART_COMPILER_OPTIMIZING_LINEAR_ORDER_H_ #define ART_COMPILER_OPTIMIZING_LINEAR_ORDER_H_ +#include <type_traits> + #include "nodes.h" namespace art { +void LinearizeGraphInternal(const HGraph* graph, ArrayRef<HBasicBlock*> linear_order); + // Linearizes the 'graph' such that: // (1): a block is always after its dominator, // (2): blocks of loops are contiguous. @@ -32,9 +36,15 @@ namespace art { // // for (HBasicBlock* block : ReverseRange(linear_order)) // linear post order // -void LinearizeGraph(const HGraph* graph, - ArenaAllocator* allocator, - ArenaVector<HBasicBlock*>* linear_order); +template <typename Vector> +void LinearizeGraph(const HGraph* graph, Vector* linear_order) { + static_assert(std::is_same<HBasicBlock*, typename Vector::value_type>::value, + "Vector::value_type must be HBasicBlock*."); + // Resize the vector and pass an ArrayRef<> to internal implementation which is shared + // for all kinds of vectors, i.e. ArenaVector<> or ScopedArenaVector<>. + linear_order->resize(graph->GetReversePostOrder().size()); + LinearizeGraphInternal(graph, ArrayRef<HBasicBlock*>(*linear_order)); +} } // namespace art |