OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #ifndef VM_INTERMEDIATE_LANGUAGE_H_ | 5 #ifndef VM_INTERMEDIATE_LANGUAGE_H_ |
6 #define VM_INTERMEDIATE_LANGUAGE_H_ | 6 #define VM_INTERMEDIATE_LANGUAGE_H_ |
7 | 7 |
8 #include "vm/allocation.h" | 8 #include "vm/allocation.h" |
9 #include "vm/ast.h" | 9 #include "vm/ast.h" |
10 #include "vm/growable_array.h" | 10 #include "vm/growable_array.h" |
(...skipping 2261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2272 }; | 2272 }; |
2273 | 2273 |
2274 | 2274 |
2275 class BranchInstr : public InstructionWithInputs { | 2275 class BranchInstr : public InstructionWithInputs { |
2276 public: | 2276 public: |
2277 explicit BranchInstr(Value* value) | 2277 explicit BranchInstr(Value* value) |
2278 : InstructionWithInputs(), | 2278 : InstructionWithInputs(), |
2279 value_(value), | 2279 value_(value), |
2280 true_successor_(NULL), | 2280 true_successor_(NULL), |
2281 false_successor_(NULL), | 2281 false_successor_(NULL), |
2282 is_fused_with_comparison_(false), | 2282 fused_with_comparison_(NULL), |
2283 is_negated_(false) { } | 2283 is_negated_(false) { } |
2284 | 2284 |
2285 DECLARE_INSTRUCTION(Branch) | 2285 DECLARE_INSTRUCTION(Branch) |
2286 | 2286 |
2287 Value* value() const { return value_; } | 2287 Value* value() const { return value_; } |
2288 TargetEntryInstr* true_successor() const { return true_successor_; } | 2288 TargetEntryInstr* true_successor() const { return true_successor_; } |
2289 TargetEntryInstr* false_successor() const { return false_successor_; } | 2289 TargetEntryInstr* false_successor() const { return false_successor_; } |
2290 | 2290 |
2291 TargetEntryInstr** true_successor_address() { return &true_successor_; } | 2291 TargetEntryInstr** true_successor_address() { return &true_successor_; } |
2292 TargetEntryInstr** false_successor_address() { return &false_successor_; } | 2292 TargetEntryInstr** false_successor_address() { return &false_successor_; } |
2293 | 2293 |
2294 virtual intptr_t SuccessorCount() const; | 2294 virtual intptr_t SuccessorCount() const; |
2295 virtual BlockEntryInstr* SuccessorAt(intptr_t index) const; | 2295 virtual BlockEntryInstr* SuccessorAt(intptr_t index) const; |
2296 | 2296 |
2297 virtual void DiscoverBlocks( | 2297 virtual void DiscoverBlocks( |
2298 BlockEntryInstr* current_block, | 2298 BlockEntryInstr* current_block, |
2299 GrowableArray<BlockEntryInstr*>* preorder, | 2299 GrowableArray<BlockEntryInstr*>* preorder, |
2300 GrowableArray<BlockEntryInstr*>* postorder, | 2300 GrowableArray<BlockEntryInstr*>* postorder, |
2301 GrowableArray<intptr_t>* parent, | 2301 GrowableArray<intptr_t>* parent, |
2302 GrowableArray<BitVector*>* assigned_vars, | 2302 GrowableArray<BitVector*>* assigned_vars, |
2303 intptr_t variable_count); | 2303 intptr_t variable_count); |
2304 | 2304 |
2305 virtual LocationSummary* MakeLocationSummary() const; | 2305 virtual LocationSummary* MakeLocationSummary() const; |
2306 | 2306 |
2307 virtual void EmitNativeCode(FlowGraphCompiler* compiler); | 2307 virtual void EmitNativeCode(FlowGraphCompiler* compiler); |
2308 | 2308 |
2309 void EmitBranchOnCondition(FlowGraphCompiler* compiler, | 2309 void EmitBranchOnCondition(FlowGraphCompiler* compiler, |
2310 Condition true_condition); | 2310 Condition true_condition); |
2311 | 2311 |
2312 void MarkFusedWithComparison() { | 2312 void MarkFusedWithComparison(ComparisonComp* comp) { |
2313 is_fused_with_comparison_ = true; | 2313 fused_with_comparison_ = comp; |
2314 } | 2314 } |
2315 | 2315 |
2316 bool is_fused_with_comparison() const { return is_fused_with_comparison_; } | 2316 bool is_fused_with_comparison() const { |
| 2317 return fused_with_comparison_ != NULL; |
| 2318 } |
2317 bool is_negated() const { return is_negated_; } | 2319 bool is_negated() const { return is_negated_; } |
2318 void set_is_negated(bool value) { is_negated_ = value; } | 2320 void set_is_negated(bool value) { is_negated_ = value; } |
2319 | 2321 |
2320 private: | 2322 private: |
2321 Value* value_; | 2323 Value* value_; |
2322 TargetEntryInstr* true_successor_; | 2324 TargetEntryInstr* true_successor_; |
2323 TargetEntryInstr* false_successor_; | 2325 TargetEntryInstr* false_successor_; |
2324 bool is_fused_with_comparison_; | 2326 ComparisonComp* fused_with_comparison_; |
2325 bool is_negated_; | 2327 bool is_negated_; |
2326 | 2328 |
2327 DISALLOW_COPY_AND_ASSIGN(BranchInstr); | 2329 DISALLOW_COPY_AND_ASSIGN(BranchInstr); |
2328 }; | 2330 }; |
2329 | 2331 |
2330 | 2332 |
2331 class MoveOperands : public ValueObject { | 2333 class MoveOperands : public ValueObject { |
2332 public: | 2334 public: |
2333 MoveOperands(Location dest, Location src) : dest_(dest), src_(src) { } | 2335 MoveOperands(Location dest, Location src) : dest_(dest), src_(src) { } |
2334 | 2336 |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2412 const GrowableArray<BlockEntryInstr*>& block_order_; | 2414 const GrowableArray<BlockEntryInstr*>& block_order_; |
2413 | 2415 |
2414 private: | 2416 private: |
2415 DISALLOW_COPY_AND_ASSIGN(FlowGraphVisitor); | 2417 DISALLOW_COPY_AND_ASSIGN(FlowGraphVisitor); |
2416 }; | 2418 }; |
2417 | 2419 |
2418 | 2420 |
2419 } // namespace dart | 2421 } // namespace dart |
2420 | 2422 |
2421 #endif // VM_INTERMEDIATE_LANGUAGE_H_ | 2423 #endif // VM_INTERMEDIATE_LANGUAGE_H_ |
OLD | NEW |