Fix some inefficiencies in the baseline usage of JITAddGenerator.
authormark.lam@apple.com <mark.lam@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 3 Nov 2015 22:13:52 +0000 (22:13 +0000)
committermark.lam@apple.com <mark.lam@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 3 Nov 2015 22:13:52 +0000 (22:13 +0000)
https://bugs.webkit.org/show_bug.cgi?id=150850

Reviewed by Michael Saboff.

1. emit_op_add() was loading the operands twice.  Removed the redundant load.
2. The snippet may decide that it wants to go the slow path route all the time.
   In that case, emit_op_add will end up emitting a branch to an out of line
   slow path followed by some dead code to store the result of the fast path
   on to the stack.
   We now check if the snippet determined that there's no fast path, and just
   emit the slow path inline, and skip the dead store of the fast path result.

* jit/JITArithmetic.cpp:
(JSC::JIT::emit_op_add):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@191978 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/jit/JITArithmetic.cpp

index 73b8665c9495b2b3a7965af13c86423d2a27a70d..1b2a662de146eac306fba28478542233ce7a7960 100644 (file)
@@ -1,3 +1,21 @@
+2015-11-03  Mark Lam  <mark.lam@apple.com>
+
+        Fix some inefficiencies in the baseline usage of JITAddGenerator.
+        https://bugs.webkit.org/show_bug.cgi?id=150850
+
+        Reviewed by Michael Saboff.
+
+        1. emit_op_add() was loading the operands twice.  Removed the redundant load.
+        2. The snippet may decide that it wants to go the slow path route all the time.
+           In that case, emit_op_add will end up emitting a branch to an out of line
+           slow path followed by some dead code to store the result of the fast path
+           on to the stack.
+           We now check if the snippet determined that there's no fast path, and just
+           emit the slow path inline, and skip the dead store of the fast path result.
+
+        * jit/JITArithmetic.cpp:
+        (JSC::JIT::emit_op_add):
+
 2015-11-03  Filip Pizlo  <fpizlo@apple.com>
 
         B3::LowerToAir should do copy propagation
index e17eb7aa4fb800ee99dbbff33bd84ebb905c08b3..91bba03256fd9b61b2613af14ba1f406c426df85 100644 (file)
@@ -932,9 +932,6 @@ void JIT::emit_op_add(Instruction* currentInstruction)
     FPRReg scratchFPR = fpRegT2;
 #endif
 
-    emitGetVirtualRegister(op1, leftRegs);
-    emitGetVirtualRegister(op2, rightRegs);
-
     bool leftIsConstInt32 = isOperandConstantInt(op1);
     bool rightIsConstInt32 = isOperandConstantInt(op2);
     JITAddGenerator::OperandsConstness operandsConstness;
@@ -968,10 +965,17 @@ void JIT::emit_op_add(Instruction* currentInstruction)
         fpRegT0, fpRegT1, scratchGPR, scratchFPR);
 
     gen.generateFastPath(*this);
-    gen.endJumpList().link(this);
-    emitPutVirtualRegister(result, resultRegs);
 
-    addSlowCase(gen.slowPathJumpList());
+    if (!gen.endJumpList().empty()) {
+        gen.endJumpList().link(this);
+        emitPutVirtualRegister(result, resultRegs);
+        
+        addSlowCase(gen.slowPathJumpList());
+    } else {
+        gen.slowPathJumpList().link(this);
+        JITSlowPathCall slowPathCall(this, currentInstruction, slow_path_add);
+        slowPathCall.call();
+    }
 }
 
 void JIT::emitSlow_op_add(Instruction* currentInstruction, Vector<SlowCaseEntry>::iterator& iter)