Changeset 95170 in webkit
- Timestamp:
- Sep 14, 2011 10:44:07 PM (13 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r95168 r95170 1 2011-09-14 Filip Pizlo <fpizlo@apple.com> 2 3 DFG JIT does not leverage integer speculations on branches 4 https://bugs.webkit.org/show_bug.cgi?id=68140 5 6 Reviewed by Oliver Hunt. 7 8 * dfg/DFGJITCodeGenerator.cpp: 9 (JSC::DFG::JITCodeGenerator::isStrictInt32): 10 * dfg/DFGJITCodeGenerator.h: 11 * dfg/DFGSpeculativeJIT.cpp: 12 (JSC::DFG::SpeculativeJIT::compile): 13 1 14 2011-09-14 Gavin Barraclough <barraclough@apple.com> 2 15 -
trunk/Source/JavaScriptCore/dfg/DFGJITCodeGenerator.cpp
r95147 r95170 351 351 } 352 352 353 bool JITCodeGenerator::isStrictInt32(NodeIndex nodeIndex) 354 { 355 if (isInt32Constant(nodeIndex)) 356 return true; 357 358 Node& node = m_jit.graph()[nodeIndex]; 359 GenerationInfo& info = m_generationInfo[node.virtualRegister()]; 360 361 return info.registerFormat() == DataFormatInteger; 362 } 363 353 364 bool JITCodeGenerator::isKnownInteger(NodeIndex nodeIndex) 354 365 { -
trunk/Source/JavaScriptCore/dfg/DFGJITCodeGenerator.h
r95147 r95170 409 409 } 410 410 411 bool isStrictInt32(NodeIndex); 412 411 413 bool isKnownInteger(NodeIndex); 412 414 bool isKnownNumeric(NodeIndex); -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
r95147 r95170 1279 1279 1280 1280 case Branch: 1281 if (isStrictInt32(node.child1())) { 1282 SpeculateStrictInt32Operand op(this, node.child1()); 1283 1284 BlockIndex taken = m_jit.graph().blockIndexForBytecodeOffset(node.takenBytecodeOffset()); 1285 BlockIndex notTaken = m_jit.graph().blockIndexForBytecodeOffset(node.notTakenBytecodeOffset()); 1286 1287 MacroAssembler::ResultCondition condition = MacroAssembler::NonZero; 1288 1289 if (taken == (m_block + 1)) { 1290 condition = MacroAssembler::Zero; 1291 BlockIndex tmp = taken; 1292 taken = notTaken; 1293 notTaken = tmp; 1294 } 1295 1296 addBranch(m_jit.branchTest32(condition, op.gpr()), taken); 1297 if (notTaken != (m_block + 1)) 1298 addBranch(m_jit.jump(), notTaken); 1299 1300 noResult(m_compileIndex); 1301 break; 1302 } 1303 if (shouldSpeculateInteger(node.child1())) { 1304 SpeculateIntegerOperand op(this, node.child1()); 1305 1306 BlockIndex taken = m_jit.graph().blockIndexForBytecodeOffset(node.takenBytecodeOffset()); 1307 BlockIndex notTaken = m_jit.graph().blockIndexForBytecodeOffset(node.notTakenBytecodeOffset()); 1308 1309 MacroAssembler::RelationalCondition condition = MacroAssembler::NotEqual; 1310 1311 if (taken == (m_block + 1)) { 1312 condition = MacroAssembler::Equal; 1313 BlockIndex tmp = taken; 1314 taken = notTaken; 1315 notTaken = tmp; 1316 } 1317 1318 addBranch(m_jit.branchPtr(condition, op.gpr(), GPRInfo::tagTypeNumberRegister), taken); 1319 1320 if (notTaken != (m_block + 1)) 1321 addBranch(m_jit.jump(), notTaken); 1322 1323 noResult(m_compileIndex); 1324 break; 1325 } 1281 1326 emitBranch(node); 1282 1327 break;
Note: See TracChangeset
for help on using the changeset viewer.