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

Side by Side Diff: src/interpreter/mkpeephole.cc

Issue 2795183002: [Interpreter] Move ToBoolean elision in BytecodeGenerator. (Closed)
Patch Set: tests Created 3 years, 8 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
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 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 #include <array> 5 #include <array>
6 #include <fstream> 6 #include <fstream>
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 // values. Only the first bytecode is needed if there's a sequence 115 // values. Only the first bytecode is needed if there's a sequence
116 // of back-to-back Ldar and Star bytecodes with the same operand. 116 // of back-to-back Ldar and Star bytecodes with the same operand.
117 if (Bytecodes::IsLdarOrStar(last) && Bytecodes::IsLdarOrStar(current)) { 117 if (Bytecodes::IsLdarOrStar(last) && Bytecodes::IsLdarOrStar(current)) {
118 return {PeepholeAction::kElideCurrentIfOperand0MatchesAction, 118 return {PeepholeAction::kElideCurrentIfOperand0MatchesAction,
119 Bytecode::kIllegal}; 119 Bytecode::kIllegal};
120 } 120 }
121 121
122 // TODO(rmcilroy): Add elide for consecutive mov to and from the same 122 // TODO(rmcilroy): Add elide for consecutive mov to and from the same
123 // register. 123 // register.
124 124
125 // Remove ToBoolean coercion from conditional jumps where possible.
126 if (Bytecodes::WritesBooleanToAccumulator(last)) {
127 if (Bytecodes::IsJumpIfToBoolean(current)) {
128 return {PeepholeAction::kChangeJumpBytecodeAction,
129 Bytecodes::GetJumpWithoutToBoolean(current)};
130 } else if (current == Bytecode::kToBooleanLogicalNot) {
131 return {PeepholeAction::kChangeBytecodeAction, Bytecode::kLogicalNot};
132 }
133 }
134
135 // Fuse LdaSmi followed by binary op to produce binary op with a 125 // Fuse LdaSmi followed by binary op to produce binary op with a
136 // immediate integer argument. This savaes on dispatches and size. 126 // immediate integer argument. This savaes on dispatches and size.
137 if (last == Bytecode::kLdaSmi) { 127 if (last == Bytecode::kLdaSmi) {
138 switch (current) { 128 switch (current) {
139 case Bytecode::kAdd: 129 case Bytecode::kAdd:
140 return {PeepholeAction::kTransformLdaSmiBinaryOpToBinaryOpWithSmiAction, 130 return {PeepholeAction::kTransformLdaSmiBinaryOpToBinaryOpWithSmiAction,
141 Bytecode::kAddSmi}; 131 Bytecode::kAddSmi};
142 case Bytecode::kSub: 132 case Bytecode::kSub:
143 return {PeepholeAction::kTransformLdaSmiBinaryOpToBinaryOpWithSmiAction, 133 return {PeepholeAction::kTransformLdaSmiBinaryOpToBinaryOpWithSmiAction,
144 Bytecode::kSubSmi}; 134 Bytecode::kSubSmi};
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 340
351 std::ofstream ofs(argv[1], std::ofstream::trunc); 341 std::ofstream ofs(argv[1], std::ofstream::trunc);
352 v8::internal::interpreter::PeepholeActionTableWriter writer; 342 v8::internal::interpreter::PeepholeActionTableWriter writer;
353 writer.BuildTable(); 343 writer.BuildTable();
354 writer.Write(ofs); 344 writer.Write(ofs);
355 ofs.flush(); 345 ofs.flush();
356 ofs.close(); 346 ofs.close();
357 347
358 return 0; 348 return 0;
359 } 349 }
OLDNEW
« no previous file with comments | « src/interpreter/control-flow-builders.cc ('k') | test/cctest/interpreter/bytecode_expectations/ClassDeclarations.golden » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698