Changeset 223318 in webkit for trunk/Source/JavaScriptCore/dfg
- Timestamp:
- Oct 14, 2017, 8:35:48 AM (8 years ago)
- Location:
- trunk/Source/JavaScriptCore/dfg
- Files:
-
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h
r222689 r223318 1408 1408 break; 1409 1409 } 1410 1410 1411 case CompareBelow: 1412 case CompareBelowEq: { 1413 JSValue leftConst = forNode(node->child1()).value(); 1414 JSValue rightConst = forNode(node->child2()).value(); 1415 if (leftConst && rightConst) { 1416 if (leftConst.isInt32() && rightConst.isInt32()) { 1417 uint32_t a = static_cast<uint32_t>(leftConst.asInt32()); 1418 uint32_t b = static_cast<uint32_t>(rightConst.asInt32()); 1419 switch (node->op()) { 1420 case CompareBelow: 1421 setConstant(node, jsBoolean(a < b)); 1422 break; 1423 case CompareBelowEq: 1424 setConstant(node, jsBoolean(a <= b)); 1425 break; 1426 default: 1427 RELEASE_ASSERT_NOT_REACHED(); 1428 break; 1429 } 1430 break; 1431 } 1432 } 1433 1434 if (node->child1() == node->child2()) { 1435 switch (node->op()) { 1436 case CompareBelow: 1437 setConstant(node, jsBoolean(false)); 1438 break; 1439 case CompareBelowEq: 1440 setConstant(node, jsBoolean(true)); 1441 break; 1442 default: 1443 DFG_CRASH(m_graph, node, "Unexpected node type"); 1444 break; 1445 } 1446 break; 1447 } 1448 forNode(node).setType(SpecBoolean); 1449 break; 1450 } 1451 1411 1452 case CompareLess: 1412 1453 case CompareLessEq: -
trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp
r223159 r223318 4635 4635 } 4636 4636 4637 case op_below: { 4638 Node* op1 = get(VirtualRegister(currentInstruction[2].u.operand)); 4639 Node* op2 = get(VirtualRegister(currentInstruction[3].u.operand)); 4640 set(VirtualRegister(currentInstruction[1].u.operand), addToGraph(CompareBelow, op1, op2)); 4641 NEXT_OPCODE(op_below); 4642 } 4643 4644 case op_beloweq: { 4645 Node* op1 = get(VirtualRegister(currentInstruction[2].u.operand)); 4646 Node* op2 = get(VirtualRegister(currentInstruction[3].u.operand)); 4647 set(VirtualRegister(currentInstruction[1].u.operand), addToGraph(CompareBelowEq, op1, op2)); 4648 NEXT_OPCODE(op_beloweq); 4649 } 4650 4637 4651 case op_eq: { 4638 4652 Node* op1 = get(VirtualRegister(currentInstruction[2].u.operand)); … … 5080 5094 LAST_OPCODE(op_jngreatereq); 5081 5095 } 5082 5096 5097 case op_jbelow: { 5098 unsigned relativeOffset = currentInstruction[3].u.operand; 5099 Node* op1 = get(VirtualRegister(currentInstruction[1].u.operand)); 5100 Node* op2 = get(VirtualRegister(currentInstruction[2].u.operand)); 5101 Node* condition = addToGraph(CompareBelow, op1, op2); 5102 addToGraph(Branch, OpInfo(branchData(m_currentIndex + relativeOffset, m_currentIndex + OPCODE_LENGTH(op_jbelow))), condition); 5103 LAST_OPCODE(op_jbelow); 5104 } 5105 5106 case op_jbeloweq: { 5107 unsigned relativeOffset = currentInstruction[3].u.operand; 5108 Node* op1 = get(VirtualRegister(currentInstruction[1].u.operand)); 5109 Node* op2 = get(VirtualRegister(currentInstruction[2].u.operand)); 5110 Node* condition = addToGraph(CompareBelowEq, op1, op2); 5111 addToGraph(Branch, OpInfo(branchData(m_currentIndex + relativeOffset, m_currentIndex + OPCODE_LENGTH(op_jbeloweq))), condition); 5112 LAST_OPCODE(op_jbeloweq); 5113 } 5114 5083 5115 case op_switch_imm: { 5084 5116 SwitchData& data = *m_graph.m_switchData.add(); -
trunk/Source/JavaScriptCore/dfg/DFGCapabilities.cpp
r222689 r223318 152 152 case op_greater: 153 153 case op_greatereq: 154 case op_below: 155 case op_beloweq: 154 156 case op_eq: 155 157 case op_eq_null: … … 193 195 case op_jngreater: 194 196 case op_jngreatereq: 197 case op_jbelow: 198 case op_jbeloweq: 195 199 case op_loop_hint: 196 200 case op_check_traps: -
trunk/Source/JavaScriptCore/dfg/DFGClobberize.h
r222689 r223318 1487 1487 def(PureValue(node)); 1488 1488 return; 1489 1490 case CompareBelow: 1491 case CompareBelowEq: 1492 def(PureValue(node)); 1493 return; 1489 1494 1490 1495 case CompareEq: -
trunk/Source/JavaScriptCore/dfg/DFGDoesGC.cpp
r222689 r223318 144 144 case CompareGreater: 145 145 case CompareGreaterEq: 146 case CompareBelow: 147 case CompareBelowEq: 146 148 case CompareEq: 147 149 case CompareStrictEq: -
trunk/Source/JavaScriptCore/dfg/DFGFixupPhase.cpp
r222689 r223318 143 143 else { 144 144 node->setArithMode(Arith::DoOverflow); 145 node->clearFlags(NodeMustGenerate);146 145 node->setResult(enableInt52() ? NodeResultInt52 : NodeResultDouble); 147 146 } … … 1595 1594 case GetTypedArrayByteOffset: { 1596 1595 fixEdge<KnownCellUse>(node->child1()); 1596 break; 1597 } 1598 1599 case CompareBelow: 1600 case CompareBelowEq: { 1601 fixEdge<Int32Use>(node->child1()); 1602 fixEdge<Int32Use>(node->child2()); 1597 1603 break; 1598 1604 } -
trunk/Source/JavaScriptCore/dfg/DFGIntegerRangeOptimizationPhase.cpp
r223047 r223318 1141 1141 terminal->child1().node(), m_zero, Relationship::NotEqual, 0); 1142 1142 } else { 1143 // FIXME: Handle CompareBelow and CompareBelowEq. 1143 1144 Node* compare = terminal->child1().node(); 1144 1145 switch (compare->op()) { -
trunk/Source/JavaScriptCore/dfg/DFGNodeType.h
r222689 r223318 122 122 macro(ValueToInt32, NodeResultInt32) \ 123 123 /* Used to box the result of URShift nodes (result has range 0..2^32-1). */\ 124 macro(UInt32ToNumber, NodeResultNumber | NodeMustGenerate) \124 macro(UInt32ToNumber, NodeResultNumber) \ 125 125 /* Converts booleans to numbers but passes everything else through. */\ 126 126 macro(BooleanToNumber, NodeResultJS) \ … … 287 287 macro(CompareGreater, NodeResultBoolean | NodeMustGenerate) \ 288 288 macro(CompareGreaterEq, NodeResultBoolean | NodeMustGenerate) \ 289 macro(CompareBelow, NodeResultBoolean) \ 290 macro(CompareBelowEq, NodeResultBoolean) \ 289 291 macro(CompareEq, NodeResultBoolean | NodeMustGenerate) \ 290 292 macro(CompareStrictEq, NodeResultBoolean) \ -
trunk/Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp
r222689 r223318 819 819 case CompareGreater: 820 820 case CompareGreaterEq: 821 case CompareBelow: 822 case CompareBelowEq: 821 823 case CompareEq: 822 824 case CompareStrictEq: -
trunk/Source/JavaScriptCore/dfg/DFGSafeToExecute.h
r222689 r223318 267 267 case CompareGreater: 268 268 case CompareGreaterEq: 269 case CompareBelow: 270 case CompareBelowEq: 269 271 case CompareEq: 270 272 case CompareStrictEq: -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
r222827 r223318 5730 5730 } 5731 5731 5732 void SpeculativeJIT::compileCompareUnsigned(Node* node, MacroAssembler::RelationalCondition condition) 5733 { 5734 compileInt32Compare(node, condition); 5735 } 5736 5732 5737 bool SpeculativeJIT::compileStrictEq(Node* node) 5733 5738 { -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h
r223047 r223318 2741 2741 2742 2742 bool compare(Node*, MacroAssembler::RelationalCondition, MacroAssembler::DoubleCondition, S_JITOperation_EJJ); 2743 void compileCompareUnsigned(Node*, MacroAssembler::RelationalCondition); 2743 2744 bool compilePeepHoleBranch(Node*, MacroAssembler::RelationalCondition, MacroAssembler::DoubleCondition, S_JITOperation_EJJ); 2744 2745 void compilePeepHoleInt32Branch(Node*, Node* branchNode, JITCompiler::RelationalCondition); -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp
r222689 r223318 2521 2521 if (compare(node, JITCompiler::GreaterThanOrEqual, JITCompiler::DoubleGreaterThanOrEqual, operationCompareGreaterEq)) 2522 2522 return; 2523 break; 2524 2525 case CompareBelow: 2526 compileCompareUnsigned(node, JITCompiler::Below); 2527 break; 2528 2529 case CompareBelowEq: 2530 compileCompareUnsigned(node, JITCompiler::BelowOrEqual); 2523 2531 break; 2524 2532 -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp
r222827 r223318 2663 2663 if (compare(node, JITCompiler::GreaterThanOrEqual, JITCompiler::DoubleGreaterThanOrEqual, operationCompareGreaterEq)) 2664 2664 return; 2665 break; 2666 2667 case CompareBelow: 2668 compileCompareUnsigned(node, JITCompiler::Below); 2669 break; 2670 2671 case CompareBelowEq: 2672 compileCompareUnsigned(node, JITCompiler::BelowOrEqual); 2665 2673 break; 2666 2674 -
trunk/Source/JavaScriptCore/dfg/DFGValidate.cpp
r222689 r223318 268 268 case CompareGreater: 269 269 case CompareGreaterEq: 270 case CompareBelow: 271 case CompareBelowEq: 270 272 case CompareEq: 271 273 case CompareStrictEq:
Note:
See TracChangeset
for help on using the changeset viewer.