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

Unified Diff: src/compiler/ia32/code-generator-ia32.cc

Issue 1242303005: [turbofan]: Elide extra move when accessing stack or frame register (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: src/compiler/code-generator.cc Created 5 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/compiler/code-generator-impl.h ('k') | src/compiler/instruction.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/ia32/code-generator-ia32.cc
diff --git a/src/compiler/ia32/code-generator-ia32.cc b/src/compiler/ia32/code-generator-ia32.cc
index 4690a8cc05d869893778ed9f12c229b2b10f88c5..35c4502b40113d1b5e271e5dc16451515ae6e5c8 100644
--- a/src/compiler/ia32/code-generator-ia32.cc
+++ b/src/compiler/ia32/code-generator-ia32.cc
@@ -38,7 +38,7 @@ class IA32OperandConverter : public InstructionOperandConverter {
Operand OutputOperand() { return ToOperand(instr_->Output()); }
Operand ToOperand(InstructionOperand* op, int extra = 0) {
- if (op->IsRegister()) {
+ if (op->GeneratesRegister()) {
DCHECK(extra == 0);
return Operand(ToRegister(op));
} else if (op->IsDoubleRegister()) {
@@ -222,7 +222,7 @@ class OutOfLineTruncateDoubleToI final : public OutOfLineCode {
do { \
auto result = i.OutputDoubleRegister(); \
auto offset = i.InputRegister(0); \
- if (instr->InputAt(1)->IsRegister()) { \
+ if (instr->InputAt(1)->GeneratesRegister()) { \
__ cmp(offset, i.InputRegister(1)); \
} else { \
__ cmp(offset, i.InputImmediate(1)); \
@@ -238,7 +238,7 @@ class OutOfLineTruncateDoubleToI final : public OutOfLineCode {
do { \
auto result = i.OutputRegister(); \
auto offset = i.InputRegister(0); \
- if (instr->InputAt(1)->IsRegister()) { \
+ if (instr->InputAt(1)->GeneratesRegister()) { \
__ cmp(offset, i.InputRegister(1)); \
} else { \
__ cmp(offset, i.InputImmediate(1)); \
@@ -253,7 +253,7 @@ class OutOfLineTruncateDoubleToI final : public OutOfLineCode {
#define ASSEMBLE_CHECKED_STORE_FLOAT(asm_instr) \
do { \
auto offset = i.InputRegister(0); \
- if (instr->InputAt(1)->IsRegister()) { \
+ if (instr->InputAt(1)->GeneratesRegister()) { \
__ cmp(offset, i.InputRegister(1)); \
} else { \
__ cmp(offset, i.InputImmediate(1)); \
@@ -268,14 +268,14 @@ class OutOfLineTruncateDoubleToI final : public OutOfLineCode {
#define ASSEMBLE_CHECKED_STORE_INTEGER(asm_instr) \
do { \
auto offset = i.InputRegister(0); \
- if (instr->InputAt(1)->IsRegister()) { \
+ if (instr->InputAt(1)->GeneratesRegister()) { \
__ cmp(offset, i.InputRegister(1)); \
} else { \
__ cmp(offset, i.InputImmediate(1)); \
} \
Label done; \
__ j(above_equal, &done, Label::kNear); \
- if (instr->InputAt(2)->IsRegister()) { \
+ if (instr->InputAt(2)->GeneratesRegister()) { \
__ asm_instr(i.MemoryOperand(3), i.InputRegister(2)); \
} else { \
__ asm_instr(i.MemoryOperand(3), i.InputImmediate(2)); \
@@ -1361,15 +1361,15 @@ void CodeGenerator::AssembleMove(InstructionOperand* source,
IA32OperandConverter g(this, NULL);
// Dispatch on the source and destination operand kinds. Not all
// combinations are possible.
- if (source->IsRegister()) {
- DCHECK(destination->IsRegister() || destination->IsStackSlot());
+ if (source->GeneratesRegister()) {
+ DCHECK(destination->GeneratesRegister() || destination->IsStackSlot());
Register src = g.ToRegister(source);
Operand dst = g.ToOperand(destination);
__ mov(dst, src);
} else if (source->IsStackSlot()) {
- DCHECK(destination->IsRegister() || destination->IsStackSlot());
+ DCHECK(destination->GeneratesRegister() || destination->IsStackSlot());
Operand src = g.ToOperand(source);
- if (destination->IsRegister()) {
+ if (destination->GeneratesRegister()) {
Register dst = g.ToRegister(destination);
__ mov(dst, src);
} else {
@@ -1383,7 +1383,7 @@ void CodeGenerator::AssembleMove(InstructionOperand* source,
Handle<HeapObject> src = src_constant.ToHeapObject();
int offset;
if (IsMaterializableFromFrame(src, &offset)) {
- if (destination->IsRegister()) {
+ if (destination->GeneratesRegister()) {
Register dst = g.ToRegister(destination);
__ mov(dst, Operand(ebp, offset));
} else {
@@ -1392,7 +1392,7 @@ void CodeGenerator::AssembleMove(InstructionOperand* source,
__ push(Operand(ebp, offset));
__ pop(dst);
}
- } else if (destination->IsRegister()) {
+ } else if (destination->GeneratesRegister()) {
Register dst = g.ToRegister(destination);
__ LoadHeapObject(dst, src);
} else {
@@ -1406,7 +1406,7 @@ void CodeGenerator::AssembleMove(InstructionOperand* source,
__ mov(dst, src);
}
}
- } else if (destination->IsRegister()) {
+ } else if (destination->GeneratesRegister()) {
Register dst = g.ToRegister(destination);
__ Move(dst, g.ToImmediate(source));
} else if (destination->IsStackSlot()) {
@@ -1471,12 +1471,12 @@ void CodeGenerator::AssembleSwap(InstructionOperand* source,
IA32OperandConverter g(this, NULL);
// Dispatch on the source and destination operand kinds. Not all
// combinations are possible.
- if (source->IsRegister() && destination->IsRegister()) {
+ if (source->GeneratesRegister() && destination->GeneratesRegister()) {
// Register-register.
Register src = g.ToRegister(source);
Register dst = g.ToRegister(destination);
__ xchg(dst, src);
- } else if (source->IsRegister() && destination->IsStackSlot()) {
+ } else if (source->GeneratesRegister() && destination->IsStackSlot()) {
// Register-memory.
__ xchg(g.ToRegister(source), g.ToOperand(destination));
} else if (source->IsStackSlot() && destination->IsStackSlot()) {
« no previous file with comments | « src/compiler/code-generator-impl.h ('k') | src/compiler/instruction.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698