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

Unified Diff: src/compiler/x64/instruction-selector-x64.cc

Issue 735293004: [turbofan]: Use "leal" more prevasively on x64 (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Tweaks Created 6 years 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 side-by-side diff with in-line comments
Download patch
Index: src/compiler/x64/instruction-selector-x64.cc
diff --git a/src/compiler/x64/instruction-selector-x64.cc b/src/compiler/x64/instruction-selector-x64.cc
index 14c8f4db1464c44e32983a74e6482323d307d1e3..bbf76993c5aef3f6717b51cb8329ff7fbad0b167 100644
--- a/src/compiler/x64/instruction-selector-x64.cc
+++ b/src/compiler/x64/instruction-selector-x64.cc
@@ -430,33 +430,6 @@ void InstructionSelector::VisitInt32Add(Node* node) {
// case that there are only two operands to the add and one of them isn't
// live, use a plain "addl".
if (m.matches() && (m.constant() == NULL || g.CanBeImmediate(m.constant()))) {
- if (m.offset() != NULL) {
- if (m.constant() == NULL) {
- if (m.scaled() != NULL && m.scale_exponent() == 0) {
- if (!IsLive(m.offset())) {
- Emit(kX64Add32, g.DefineSameAsFirst(node),
- g.UseRegister(m.offset()), g.Use(m.scaled()));
- return;
- } else if (!IsLive(m.scaled())) {
- Emit(kX64Add32, g.DefineSameAsFirst(node),
- g.UseRegister(m.scaled()), g.Use(m.offset()));
- return;
- }
- }
- } else {
- if (m.scale_exponent() == 0) {
- if (m.scaled() == NULL || m.offset() == NULL) {
- Node* non_constant = m.scaled() == NULL ? m.offset() : m.scaled();
- if (!IsLive(non_constant)) {
- Emit(kX64Add32, g.DefineSameAsFirst(node),
- g.UseRegister(non_constant), g.UseImmediate(m.constant()));
- return;
- }
- }
- }
- }
- }
-
InstructionOperand* inputs[4];
size_t input_count = 0;
AddressingMode mode = GenerateMemoryOperandInputs(
@@ -491,15 +464,12 @@ void InstructionSelector::VisitInt32Sub(Node* node) {
Emit(kX64Neg32, g.DefineSameAsFirst(node), g.UseRegister(m.right().node()));
} else {
if (m.right().HasValue() && g.CanBeImmediate(m.right().node())) {
- if (IsLive(m.left().node())) {
- // Special handling for subtraction of constants where the non-constant
- // input is used elsewhere. To eliminate the gap move before the sub to
- // copy the destination register, use a "leal" instead.
- Emit(kX64Lea32 | AddressingModeField::encode(kMode_MRI),
- g.DefineAsRegister(node), g.UseRegister(m.left().node()),
- g.TempImmediate(-m.right().Value()));
- return;
- }
+ // Turn subtractions of constant values into immediate "leal" instructions
+ // by negating the value.
+ Emit(kX64Lea32 | AddressingModeField::encode(kMode_MRI),
+ g.DefineAsRegister(node), g.UseRegister(m.left().node()),
+ g.TempImmediate(-m.right().Value()));
+ return;
}
VisitBinop(this, node, kX64Sub32);
}
« no previous file with comments | « src/compiler/x64/code-generator-x64.cc ('k') | test/unittests/compiler/x64/instruction-selector-x64-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698