diff options
author | Nicolas Geoffray <ngeoffray@google.com> | 2014-09-02 15:17:15 +0100 |
---|---|---|
committer | Nicolas Geoffray <ngeoffray@google.com> | 2014-09-08 12:15:07 +0100 |
commit | 3946844c34ad965515f677084b07d663d70ad1b8 (patch) | |
tree | 0d85bfba2ff69c34a2897351d1e50a1464509305 /compiler/optimizing/code_generator.h | |
parent | e2c23739c6395a83b30ece38f8a2e9e1bf7cf3ce (diff) | |
download | art-3946844c34ad965515f677084b07d663d70ad1b8.tar.gz art-3946844c34ad965515f677084b07d663d70ad1b8.tar.bz2 art-3946844c34ad965515f677084b07d663d70ad1b8.zip |
Runtime support for the new stack maps for the opt compiler.
Now most of the methods supported by the compiler can be optimized,
instead of using the baseline.
Change-Id: I80ab36a34913fa4e7dd576c7bf55af63594dc1fa
Diffstat (limited to 'compiler/optimizing/code_generator.h')
-rw-r--r-- | compiler/optimizing/code_generator.h | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/compiler/optimizing/code_generator.h b/compiler/optimizing/code_generator.h index 12337c93de..a83d7032e3 100644 --- a/compiler/optimizing/code_generator.h +++ b/compiler/optimizing/code_generator.h @@ -23,6 +23,7 @@ #include "locations.h" #include "memory_region.h" #include "nodes.h" +#include "stack_map_stream.h" #include "utils/assembler.h" namespace art { @@ -97,7 +98,7 @@ class CodeGenerator : public ArenaObject { virtual HGraphVisitor* GetInstructionVisitor() = 0; virtual Assembler* GetAssembler() = 0; virtual size_t GetWordSize() const = 0; - void ComputeFrameSize(size_t number_of_spill_slots); + void ComputeFrameSize(size_t number_of_spill_slots, size_t number_of_out_slots); virtual size_t FrameEntrySpillSize() const = 0; int32_t GetStackSlot(HLocal* local) const; Location GetTemporaryLocation(HTemporary* temp) const; @@ -114,12 +115,7 @@ class CodeGenerator : public ArenaObject { virtual void DumpFloatingPointRegister(std::ostream& stream, int reg) const = 0; virtual InstructionSet GetInstructionSet() const = 0; - void RecordPcInfo(uint32_t dex_pc) { - struct PcInfo pc_info; - pc_info.dex_pc = dex_pc; - pc_info.native_pc = GetAssembler()->CodeSize(); - pc_infos_.Add(pc_info); - } + void RecordPcInfo(HInstruction* instruction, uint32_t dex_pc); void AddSlowPath(SlowPathCode* slow_path) { slow_paths_.Add(slow_path); @@ -131,6 +127,7 @@ class CodeGenerator : public ArenaObject { void BuildVMapTable(std::vector<uint8_t>* vector) const; void BuildNativeGCMap( std::vector<uint8_t>* vector, const DexCompilationUnit& dex_compilation_unit) const; + void BuildStackMaps(std::vector<uint8_t>* vector); bool IsLeafMethod() const { return is_leaf_; @@ -149,7 +146,8 @@ class CodeGenerator : public ArenaObject { pc_infos_(graph->GetArena(), 32), slow_paths_(graph->GetArena(), 8), blocked_registers_(graph->GetArena()->AllocArray<bool>(number_of_registers)), - is_leaf_(true) {} + is_leaf_(true), + stack_map_stream_(graph->GetArena()) {} ~CodeGenerator() {} // Register allocation logic. @@ -184,6 +182,8 @@ class CodeGenerator : public ArenaObject { bool is_leaf_; + StackMapStream stack_map_stream_; + DISALLOW_COPY_AND_ASSIGN(CodeGenerator); }; |