[turbofan] Second round of optimisation for unordered comparisons on arm/arm64.
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}
This commit is contained in:
parent
5913c7cc3f
commit
6459dabdae
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user