Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(182)

Side by Side Diff: src/hydrogen.h

Issue 22876009: Improve and simplify removal of unreachable code (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fix ia32 Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 // Simulate (caller's environment) 163 // Simulate (caller's environment)
164 // Goto (target block) 164 // Goto (target block)
165 bool IsInlineReturnTarget() const { return is_inline_return_target_; } 165 bool IsInlineReturnTarget() const { return is_inline_return_target_; }
166 void MarkAsInlineReturnTarget(HBasicBlock* inlined_entry_block) { 166 void MarkAsInlineReturnTarget(HBasicBlock* inlined_entry_block) {
167 is_inline_return_target_ = true; 167 is_inline_return_target_ = true;
168 inlined_entry_block_ = inlined_entry_block; 168 inlined_entry_block_ = inlined_entry_block;
169 } 169 }
170 HBasicBlock* inlined_entry_block() { return inlined_entry_block_; } 170 HBasicBlock* inlined_entry_block() { return inlined_entry_block_; }
171 171
172 bool IsDeoptimizing() const { return is_deoptimizing_; } 172 bool IsDeoptimizing() const { return is_deoptimizing_; }
173 void MarkAsDeoptimizing() { is_deoptimizing_ = true; } 173 void MarkAsDeoptimizing();
174
175 void MarkUnreachable();
176 bool IsUnreachable() const { return !is_reachable_; }
177 bool IsReachable() const { return is_reachable_; }
174 178
175 bool IsLoopSuccessorDominator() const { 179 bool IsLoopSuccessorDominator() const {
176 return dominates_loop_successors_; 180 return dominates_loop_successors_;
177 } 181 }
178 void MarkAsLoopSuccessorDominator() { 182 void MarkAsLoopSuccessorDominator() {
179 dominates_loop_successors_ = true; 183 dominates_loop_successors_ = true;
180 } 184 }
181 185
182 inline Zone* zone() const; 186 inline Zone* zone() const;
183 187
(...skipping 22 matching lines...) Expand all
206 HEnvironment* last_environment_; 210 HEnvironment* last_environment_;
207 // Outgoing parameter count at block exit, set during lithium translation. 211 // Outgoing parameter count at block exit, set during lithium translation.
208 int argument_count_; 212 int argument_count_;
209 // Instruction indices into the lithium code stream. 213 // Instruction indices into the lithium code stream.
210 int first_instruction_index_; 214 int first_instruction_index_;
211 int last_instruction_index_; 215 int last_instruction_index_;
212 ZoneList<int> deleted_phis_; 216 ZoneList<int> deleted_phis_;
213 HBasicBlock* parent_loop_header_; 217 HBasicBlock* parent_loop_header_;
214 // For blocks marked as inline return target: the block with HEnterInlined. 218 // For blocks marked as inline return target: the block with HEnterInlined.
215 HBasicBlock* inlined_entry_block_; 219 HBasicBlock* inlined_entry_block_;
220 bool is_reachable_ : 1;
216 bool is_inline_return_target_ : 1; 221 bool is_inline_return_target_ : 1;
217 bool is_deoptimizing_ : 1; 222 bool is_deoptimizing_ : 1;
218 bool dominates_loop_successors_ : 1; 223 bool dominates_loop_successors_ : 1;
219 bool is_osr_entry_ : 1; 224 bool is_osr_entry_ : 1;
220 }; 225 };
221 226
222 227
223 class HPredecessorIterator BASE_EMBEDDED { 228 class HPredecessorIterator BASE_EMBEDDED {
224 public: 229 public:
225 explicit HPredecessorIterator(HBasicBlock* block) 230 explicit HPredecessorIterator(HBasicBlock* block)
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
447 } 452 }
448 453
449 void RecordUint32Instruction(HInstruction* instr) { 454 void RecordUint32Instruction(HInstruction* instr) {
450 ASSERT(uint32_instructions_ == NULL || !uint32_instructions_->is_empty()); 455 ASSERT(uint32_instructions_ == NULL || !uint32_instructions_->is_empty());
451 if (uint32_instructions_ == NULL) { 456 if (uint32_instructions_ == NULL) {
452 uint32_instructions_ = new(zone()) ZoneList<HInstruction*>(4, zone()); 457 uint32_instructions_ = new(zone()) ZoneList<HInstruction*>(4, zone());
453 } 458 }
454 uint32_instructions_->Add(instr, zone()); 459 uint32_instructions_->Add(instr, zone());
455 } 460 }
456 461
462 void MarkHasUnreachableCode() { has_unreachable_code_ = true; }
463 bool HasUnreachableCode() const { return has_unreachable_code_; }
464
457 void IncrementInNoSideEffectsScope() { no_side_effects_scope_count_++; } 465 void IncrementInNoSideEffectsScope() { no_side_effects_scope_count_++; }
458 void DecrementInNoSideEffectsScope() { no_side_effects_scope_count_--; } 466 void DecrementInNoSideEffectsScope() { no_side_effects_scope_count_--; }
459 bool IsInsideNoSideEffectsScope() { return no_side_effects_scope_count_ > 0; } 467 bool IsInsideNoSideEffectsScope() { return no_side_effects_scope_count_ > 0; }
460 468
461 private: 469 private:
462 HConstant* GetConstant(SetOncePointer<HConstant>* pointer, 470 HConstant* GetConstant(SetOncePointer<HConstant>* pointer,
463 int32_t integer_value); 471 int32_t integer_value);
464 472
465 template<class Phase> 473 template<class Phase>
466 void Run() { 474 void Run() {
(...skipping 23 matching lines...) Expand all
490 SetOncePointer<HConstant> constant_the_hole_; 498 SetOncePointer<HConstant> constant_the_hole_;
491 SetOncePointer<HConstant> constant_null_; 499 SetOncePointer<HConstant> constant_null_;
492 SetOncePointer<HConstant> constant_invalid_context_; 500 SetOncePointer<HConstant> constant_invalid_context_;
493 SetOncePointer<HArgumentsObject> arguments_object_; 501 SetOncePointer<HArgumentsObject> arguments_object_;
494 502
495 HOsrBuilder* osr_; 503 HOsrBuilder* osr_;
496 504
497 CompilationInfo* info_; 505 CompilationInfo* info_;
498 Zone* zone_; 506 Zone* zone_;
499 507
508 bool has_unreachable_code_;
500 bool is_recursive_; 509 bool is_recursive_;
501 bool use_optimistic_licm_; 510 bool use_optimistic_licm_;
502 bool has_soft_deoptimize_; 511 bool has_soft_deoptimize_;
503 bool depends_on_empty_array_proto_elements_; 512 bool depends_on_empty_array_proto_elements_;
504 int type_change_checksum_; 513 int type_change_checksum_;
505 int maximum_environment_size_; 514 int maximum_environment_size_;
506 int no_side_effects_scope_count_; 515 int no_side_effects_scope_count_;
507 516
508 DISALLOW_COPY_AND_ASSIGN(HGraph); 517 DISALLOW_COPY_AND_ASSIGN(HGraph);
509 }; 518 };
(...skipping 1812 matching lines...) Expand 10 before | Expand all | Expand 10 after
2322 } 2331 }
2323 2332
2324 private: 2333 private:
2325 HGraphBuilder* builder_; 2334 HGraphBuilder* builder_;
2326 }; 2335 };
2327 2336
2328 2337
2329 } } // namespace v8::internal 2338 } } // namespace v8::internal
2330 2339
2331 #endif // V8_HYDROGEN_H_ 2340 #endif // V8_HYDROGEN_H_
OLDNEW
« no previous file with comments | « src/arm/lithium-codegen-arm.cc ('k') | src/hydrogen.cc » ('j') | src/hydrogen.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698