| Index: runtime/vm/flow_graph.h
|
| diff --git a/runtime/vm/flow_graph.h b/runtime/vm/flow_graph.h
|
| index 0c7aa526cd60c97caf23d9b82f3c6a36fe7d5575..7da7ac012dabc58194248129b7ecc7603a48f452 100644
|
| --- a/runtime/vm/flow_graph.h
|
| +++ b/runtime/vm/flow_graph.h
|
| @@ -305,6 +305,11 @@ class FlowGraph : public ZoneAllocated {
|
|
|
| bool IsReceiver(Definition* def) const;
|
|
|
| + // Optimize (a << b) & c pattern: if c is a positive Smi or zero, then the
|
| + // shift can be a truncating Smi shift-left and result is always Smi.
|
| + // Merge instructions (only per basic-block).
|
| + void TryOptimizePatterns();
|
| +
|
| private:
|
| friend class IfConverter;
|
| friend class BranchSimplifier;
|
| @@ -361,6 +366,18 @@ class FlowGraph : public ZoneAllocated {
|
| void ComputeIsReceiverRecursive(PhiInstr* phi,
|
| GrowableArray<PhiInstr*>* unmark) const;
|
|
|
| + void OptimizeLeftShiftBitAndSmiOp(
|
| + ForwardInstructionIterator* current_iterator,
|
| + Definition* bit_and_instr,
|
| + Definition* left_instr,
|
| + Definition* right_instr);
|
| +
|
| + void TryMergeTruncDivMod(GrowableArray<BinarySmiOpInstr*>* merge_candidates);
|
| + void TryMergeMathUnary(GrowableArray<MathUnaryInstr*>* merge_candidates);
|
| +
|
| + void AppendExtractNthOutputForMerged(Definition* instr, intptr_t ix,
|
| + Representation rep, intptr_t cid);
|
| +
|
| Thread* thread_;
|
|
|
| // DiscoverBlocks computes parent_ and assigned_vars_ which are then used
|
|
|