| Index: runtime/vm/flow_graph_compiler.cc
|
| diff --git a/runtime/vm/flow_graph_compiler.cc b/runtime/vm/flow_graph_compiler.cc
|
| index d28c293506bf08c9c9cf46671e75395733284bef..e64c11589f8ea94c5758656bef474c74539dc6f2 100644
|
| --- a/runtime/vm/flow_graph_compiler.cc
|
| +++ b/runtime/vm/flow_graph_compiler.cc
|
| @@ -503,7 +503,7 @@ void FlowGraphCompiler::VisitBlocks() {
|
| continue;
|
| }
|
|
|
| -#if defined(DEBUG)
|
| +#if defined(DEBUG) && !defined(TARGET_ARCH_DBC)
|
| if (!is_optimizing()) {
|
| FrameStateClear();
|
| }
|
| @@ -557,14 +557,14 @@ void FlowGraphCompiler::VisitBlocks() {
|
| EndCodeSourceRange(instr->token_pos());
|
| }
|
|
|
| -#if defined(DEBUG)
|
| +#if defined(DEBUG) && !defined(TARGET_ARCH_DBC)
|
| if (!is_optimizing()) {
|
| FrameStateUpdateWith(instr);
|
| }
|
| #endif
|
| }
|
|
|
| -#if defined(DEBUG)
|
| +#if defined(DEBUG) && !defined(TARGET_ARCH_DBC)
|
| ASSERT(is_optimizing() || FrameStateIsSafeToCall());
|
| #endif
|
| }
|
| @@ -1147,6 +1147,9 @@ bool FlowGraphCompiler::TryIntrinsify() {
|
| }
|
|
|
|
|
| +// DBC is very different from other architectures in how it performs instance
|
| +// and static calls because it does not use stubs.
|
| +#if !defined(TARGET_ARCH_DBC)
|
| void FlowGraphCompiler::GenerateInstanceCall(
|
| intptr_t deopt_id,
|
| TokenPosition token_pos,
|
| @@ -1286,7 +1289,7 @@ void FlowGraphCompiler::GenerateListTypeCheck(Register kClassIdReg,
|
| CheckClassIds(kClassIdReg, args, is_instance_lbl, &unknown);
|
| assembler()->Bind(&unknown);
|
| }
|
| -
|
| +#endif // !defined(TARGET_ARCH_DBC)
|
|
|
| void FlowGraphCompiler::EmitComment(Instruction* instr) {
|
| if (!FLAG_support_il_printer || !FLAG_support_disassembler) {
|
| @@ -1301,6 +1304,8 @@ void FlowGraphCompiler::EmitComment(Instruction* instr) {
|
| }
|
|
|
|
|
| +#if !defined(TARGET_ARCH_DBC)
|
| +// TODO(vegorov) enable edge-counters on DBC if we consider them beneficial.
|
| bool FlowGraphCompiler::NeedsEdgeCounter(TargetEntryInstr* block) {
|
| // Only emit an edge counter if there is not goto at the end of the block,
|
| // except for the entry block.
|
| @@ -1321,18 +1326,17 @@ static Register AllocateFreeRegister(bool* blocked_registers) {
|
| UNREACHABLE();
|
| return kNoRegister;
|
| }
|
| -
|
| -
|
| -static uword RegMaskBit(Register reg) {
|
| - return ((reg) != kNoRegister) ? (1 << (reg)) : 0;
|
| -}
|
| +#endif
|
|
|
|
|
| void FlowGraphCompiler::AllocateRegistersLocally(Instruction* instr) {
|
| ASSERT(!is_optimizing());
|
| -
|
| instr->InitializeLocationSummary(zone(),
|
| false); // Not optimizing.
|
| +
|
| + // No need to allocate registers based on LocationSummary on DBC as in
|
| + // unoptimized mode it's a stack based bytecode just like IR itself.
|
| +#if !defined(TARGET_ARCH_DBC)
|
| LocationSummary* locs = instr->locs();
|
|
|
| bool blocked_registers[kNumberOfCpuRegisters];
|
| @@ -1422,6 +1426,12 @@ void FlowGraphCompiler::AllocateRegistersLocally(Instruction* instr) {
|
| }
|
| locs->set_out(0, result_location);
|
| }
|
| +#endif // !defined(TARGET_ARCH_DBC)
|
| +}
|
| +
|
| +
|
| +static uword RegMaskBit(Register reg) {
|
| + return ((reg) != kNoRegister) ? (1 << (reg)) : 0;
|
| }
|
|
|
|
|
| @@ -1838,6 +1848,9 @@ NOT_IN_PRODUCT(
|
| }
|
|
|
|
|
| +#if !defined(TARGET_ARCH_DBC)
|
| +// DBC emits calls very differently from other architectures due to its
|
| +// interpreted nature.
|
| void FlowGraphCompiler::EmitPolymorphicInstanceCall(
|
| const ICData& ic_data,
|
| intptr_t argument_count,
|
| @@ -1881,9 +1894,12 @@ void FlowGraphCompiler::EmitPolymorphicInstanceCall(
|
| }
|
| }
|
| }
|
| +#endif
|
|
|
| -
|
| -#if defined(DEBUG)
|
| +#if defined(DEBUG) && !defined(TARGET_ARCH_DBC)
|
| +// TODO(vegorov) re-enable frame state tracking on DBC. It is
|
| +// currently disabled because it relies on LocationSummaries and
|
| +// we don't use them during unoptimized compilation on DBC.
|
| void FlowGraphCompiler::FrameStateUpdateWith(Instruction* instr) {
|
| ASSERT(!is_optimizing());
|
|
|
| @@ -1954,7 +1970,7 @@ void FlowGraphCompiler::FrameStateClear() {
|
| ASSERT(!is_optimizing());
|
| frame_state_.TruncateTo(0);
|
| }
|
| -#endif
|
| +#endif // defined(DEBUG) && !defined(TARGET_ARCH_DBC)
|
|
|
|
|
| } // namespace dart
|
|
|