[turbofan] Second round of optimisation for unordered comparisons on arm/arm64.
authorbaptiste.afsa <baptiste.afsa@arm.com>
Thu, 11 Dec 2014 17:54:22 +0000 (09:54 -0800)
committerCommit bot <commit-bot@chromium.org>
Thu, 11 Dec 2014 17:54:30 +0000 (17:54 +0000)
Avoid explicitly branching to the false label on unordered when the condition
on the true branch will not catch the unordered case and let the code fall
through.

R=bmeurer@chromium.org

Review URL: https://codereview.chromium.org/794203003

Cr-Commit-Position: refs/heads/master@{#25787}

src/compiler/arm/code-generator-arm.cc
src/compiler/arm64/code-generator-arm64.cc

index dcf03a4..cfa4de9 100644 (file)
@@ -687,8 +687,9 @@ void CodeGenerator::AssembleArchBranch(Instruction* instr, BranchInfo* branch) {
   Label* flabel = branch->false_label;
   switch (branch->condition) {
     case kUnorderedEqual:
-      __ b(vs, flabel);
-    // Fall through.
+      // The "eq" condition will not catch the unordered case.
+      // The jump/fall through to false label will be used if the comparison
+      // was unordered.
     case kEqual:
       __ b(eq, tlabel);
       break;
@@ -711,8 +712,9 @@ void CodeGenerator::AssembleArchBranch(Instruction* instr, BranchInfo* branch) {
       __ b(gt, tlabel);
       break;
     case kUnorderedLessThan:
-      __ b(vs, flabel);
-    // Fall through.
+      // The "lo" condition will not catch the unordered case.
+      // The jump/fall through to false label will be used if the comparison
+      // was unordered.
     case kUnsignedLessThan:
       __ b(lo, tlabel);
       break;
@@ -723,8 +725,9 @@ void CodeGenerator::AssembleArchBranch(Instruction* instr, BranchInfo* branch) {
       __ b(hs, tlabel);
       break;
     case kUnorderedLessThanOrEqual:
-      __ b(vs, flabel);
-    // Fall through.
+      // The "ls" condition will not catch the unordered case.
+      // The jump/fall through to false label will be used if the comparison
+      // was unordered.
     case kUnsignedLessThanOrEqual:
       __ b(ls, tlabel);
       break;
index 8cd0378..cc46fd6 100644 (file)
@@ -781,8 +781,9 @@ void CodeGenerator::AssembleArchBranch(Instruction* instr, BranchInfo* branch) {
   } else {
     switch (condition) {
       case kUnorderedEqual:
-        __ B(vs, flabel);
-      // Fall through.
+        // The "eq" condition will not catch the unordered case.
+        // The jump/fall through to false label will be used if the comparison
+        // was unordered.
       case kEqual:
         __ B(eq, tlabel);
         break;
@@ -805,8 +806,9 @@ void CodeGenerator::AssembleArchBranch(Instruction* instr, BranchInfo* branch) {
         __ B(gt, tlabel);
         break;
       case kUnorderedLessThan:
-        __ B(vs, flabel);
-      // Fall through.
+        // The "lo" condition will not catch the unordered case.
+        // The jump/fall through to false label will be used if the comparison
+        // was unordered.
       case kUnsignedLessThan:
         __ B(lo, tlabel);
         break;
@@ -817,8 +819,9 @@ void CodeGenerator::AssembleArchBranch(Instruction* instr, BranchInfo* branch) {
         __ B(hs, tlabel);
         break;
       case kUnorderedLessThanOrEqual:
-        __ B(vs, flabel);
-      // Fall through.
+        // The "ls" condition will not catch the unordered case.
+        // The jump/fall through to false label will be used if the comparison
+        // was unordered.
       case kUnsignedLessThanOrEqual:
         __ B(ls, tlabel);
         break;