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

Side by Side Diff: src/arm64/lithium-arm64.h

Issue 596783002: Refactor bailout reasons and disable optimization in more cases. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: remove bogus assertion Created 6 years, 3 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
« no previous file with comments | « src/arm/macro-assembler-arm.h ('k') | src/arm64/lithium-arm64.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_ARM64_LITHIUM_ARM64_H_ 5 #ifndef V8_ARM64_LITHIUM_ARM64_H_
6 #define V8_ARM64_LITHIUM_ARM64_H_ 6 #define V8_ARM64_LITHIUM_ARM64_H_
7 7
8 #include "src/hydrogen.h" 8 #include "src/hydrogen.h"
9 #include "src/lithium.h" 9 #include "src/lithium.h"
10 #include "src/lithium-allocator.h" 10 #include "src/lithium-allocator.h"
(...skipping 3079 matching lines...) Expand 10 before | Expand all | Expand 10 after
3090 : LChunk(info, graph) { } 3090 : LChunk(info, graph) { }
3091 3091
3092 int GetNextSpillIndex(); 3092 int GetNextSpillIndex();
3093 LOperand* GetNextSpillSlot(RegisterKind kind); 3093 LOperand* GetNextSpillSlot(RegisterKind kind);
3094 }; 3094 };
3095 3095
3096 3096
3097 class LChunkBuilder FINAL : public LChunkBuilderBase { 3097 class LChunkBuilder FINAL : public LChunkBuilderBase {
3098 public: 3098 public:
3099 LChunkBuilder(CompilationInfo* info, HGraph* graph, LAllocator* allocator) 3099 LChunkBuilder(CompilationInfo* info, HGraph* graph, LAllocator* allocator)
3100 : LChunkBuilderBase(graph->zone()), 3100 : LChunkBuilderBase(info, graph),
3101 chunk_(NULL),
3102 info_(info),
3103 graph_(graph),
3104 status_(UNUSED),
3105 current_instruction_(NULL), 3101 current_instruction_(NULL),
3106 current_block_(NULL), 3102 current_block_(NULL),
3107 allocator_(allocator) { } 3103 allocator_(allocator) {}
3108 3104
3109 // Build the sequence for the graph. 3105 // Build the sequence for the graph.
3110 LPlatformChunk* Build(); 3106 LPlatformChunk* Build();
3111 3107
3112 // Declare methods that deal with the individual node types. 3108 // Declare methods that deal with the individual node types.
3113 #define DECLARE_DO(type) LInstruction* Do##type(H##type* node); 3109 #define DECLARE_DO(type) LInstruction* Do##type(H##type* node);
3114 HYDROGEN_CONCRETE_INSTRUCTION_LIST(DECLARE_DO) 3110 HYDROGEN_CONCRETE_INSTRUCTION_LIST(DECLARE_DO)
3115 #undef DECLARE_DO 3111 #undef DECLARE_DO
3116 3112
3117 LInstruction* DoDivByPowerOf2I(HDiv* instr); 3113 LInstruction* DoDivByPowerOf2I(HDiv* instr);
3118 LInstruction* DoDivByConstI(HDiv* instr); 3114 LInstruction* DoDivByConstI(HDiv* instr);
3119 LInstruction* DoDivI(HBinaryOperation* instr); 3115 LInstruction* DoDivI(HBinaryOperation* instr);
3120 LInstruction* DoModByPowerOf2I(HMod* instr); 3116 LInstruction* DoModByPowerOf2I(HMod* instr);
3121 LInstruction* DoModByConstI(HMod* instr); 3117 LInstruction* DoModByConstI(HMod* instr);
3122 LInstruction* DoModI(HMod* instr); 3118 LInstruction* DoModI(HMod* instr);
3123 LInstruction* DoFlooringDivByPowerOf2I(HMathFloorOfDiv* instr); 3119 LInstruction* DoFlooringDivByPowerOf2I(HMathFloorOfDiv* instr);
3124 LInstruction* DoFlooringDivByConstI(HMathFloorOfDiv* instr); 3120 LInstruction* DoFlooringDivByConstI(HMathFloorOfDiv* instr);
3125 LInstruction* DoFlooringDivI(HMathFloorOfDiv* instr); 3121 LInstruction* DoFlooringDivI(HMathFloorOfDiv* instr);
3126 3122
3127 static bool HasMagicNumberForDivision(int32_t divisor); 3123 static bool HasMagicNumberForDivision(int32_t divisor);
3128 3124
3129 private: 3125 private:
3130 enum Status {
3131 UNUSED,
3132 BUILDING,
3133 DONE,
3134 ABORTED
3135 };
3136
3137 HGraph* graph() const { return graph_; }
3138 Isolate* isolate() const { return info_->isolate(); }
3139
3140 bool is_unused() const { return status_ == UNUSED; }
3141 bool is_building() const { return status_ == BUILDING; }
3142 bool is_done() const { return status_ == DONE; }
3143 bool is_aborted() const { return status_ == ABORTED; }
3144
3145 int argument_count() const { return argument_count_; }
3146 CompilationInfo* info() const { return info_; }
3147 Heap* heap() const { return isolate()->heap(); }
3148
3149 void Abort(BailoutReason reason);
3150
3151 // Methods for getting operands for Use / Define / Temp. 3126 // Methods for getting operands for Use / Define / Temp.
3152 LUnallocated* ToUnallocated(Register reg); 3127 LUnallocated* ToUnallocated(Register reg);
3153 LUnallocated* ToUnallocated(DoubleRegister reg); 3128 LUnallocated* ToUnallocated(DoubleRegister reg);
3154 3129
3155 // Methods for setting up define-use relationships. 3130 // Methods for setting up define-use relationships.
3156 MUST_USE_RESULT LOperand* Use(HValue* value, LUnallocated* operand); 3131 MUST_USE_RESULT LOperand* Use(HValue* value, LUnallocated* operand);
3157 MUST_USE_RESULT LOperand* UseFixed(HValue* value, Register fixed_register); 3132 MUST_USE_RESULT LOperand* UseFixed(HValue* value, Register fixed_register);
3158 MUST_USE_RESULT LOperand* UseFixedDouble(HValue* value, 3133 MUST_USE_RESULT LOperand* UseFixedDouble(HValue* value,
3159 DoubleRegister fixed_register); 3134 DoubleRegister fixed_register);
3160 3135
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
3264 LInstruction* DoShiftedBinaryOp(HBinaryOperation* instr, 3239 LInstruction* DoShiftedBinaryOp(HBinaryOperation* instr,
3265 HValue* left, 3240 HValue* left,
3266 HBitwiseBinaryOperation* shift); 3241 HBitwiseBinaryOperation* shift);
3267 3242
3268 LInstruction* DoShift(Token::Value op, HBitwiseBinaryOperation* instr); 3243 LInstruction* DoShift(Token::Value op, HBitwiseBinaryOperation* instr);
3269 LInstruction* DoArithmeticD(Token::Value op, 3244 LInstruction* DoArithmeticD(Token::Value op,
3270 HArithmeticBinaryOperation* instr); 3245 HArithmeticBinaryOperation* instr);
3271 LInstruction* DoArithmeticT(Token::Value op, 3246 LInstruction* DoArithmeticT(Token::Value op,
3272 HBinaryOperation* instr); 3247 HBinaryOperation* instr);
3273 3248
3274 LPlatformChunk* chunk_;
3275 CompilationInfo* info_;
3276 HGraph* const graph_;
3277 Status status_;
3278 HInstruction* current_instruction_; 3249 HInstruction* current_instruction_;
3279 HBasicBlock* current_block_; 3250 HBasicBlock* current_block_;
3280 LAllocator* allocator_; 3251 LAllocator* allocator_;
3281 3252
3282 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); 3253 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder);
3283 }; 3254 };
3284 3255
3285 #undef DECLARE_HYDROGEN_ACCESSOR 3256 #undef DECLARE_HYDROGEN_ACCESSOR
3286 #undef DECLARE_CONCRETE_INSTRUCTION 3257 #undef DECLARE_CONCRETE_INSTRUCTION
3287 3258
3288 } } // namespace v8::internal 3259 } } // namespace v8::internal
3289 3260
3290 #endif // V8_ARM64_LITHIUM_ARM64_H_ 3261 #endif // V8_ARM64_LITHIUM_ARM64_H_
OLDNEW
« no previous file with comments | « src/arm/macro-assembler-arm.h ('k') | src/arm64/lithium-arm64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698