Changeset 289354 in webkit for trunk/Source/JavaScriptCore/b3
- Timestamp:
- Feb 7, 2022, 7:00:28 PM (3 years ago)
- Location:
- trunk/Source/JavaScriptCore/b3/air
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/b3/air/AirLowerStackArgs.cpp
r287513 r289354 111 111 inst.forEachArg( 112 112 [&] (Arg& arg, Arg::Role role, Bank, Width width) { 113 auto stackAddr = [&] ( Value::OffsetType offsetFromFP) -> Arg {113 auto stackAddr = [&] (unsigned instIndex, Value::OffsetType offsetFromFP) -> Arg { 114 114 int32_t offsetFromSP = offsetFromFP + code.frameSize(); 115 115 … … 138 138 return result; 139 139 #elif CPU(X86_64) 140 UNUSED_PARAM(instIndex); 140 141 // Can't happen on x86: immediates are always big enough for frame size. 141 142 RELEASE_ASSERT_NOT_REACHED(); … … 172 173 insertionSet.insert( 173 174 instIndex + 1, storeOpcode, inst.origin, operand, 174 stackAddr( arg.offset() + 4 + slot->offsetFromFP()));175 stackAddr(instIndex + 1, arg.offset() + 4 + slot->offsetFromFP())); 175 176 } 176 arg = stackAddr( arg.offset() + slot->offsetFromFP());177 arg = stackAddr(instIndex, arg.offset() + slot->offsetFromFP()); 177 178 break; 178 179 } 179 180 case Arg::CallArg: 180 arg = stackAddr( arg.offset() - code.frameSize());181 arg = stackAddr(instIndex, arg.offset() - code.frameSize()); 181 182 break; 182 183 default: -
trunk/Source/JavaScriptCore/b3/air/testair.cpp
r277920 r289354 2359 2359 auto runResult = compileAndRun<uint32_t>(proc); 2360 2360 CHECK(runResult == 99); 2361 } 2362 2363 void testZDefOfSpillSlotWithOffsetNeedingToBeMaterializedInARegister() 2364 { 2365 if (Options::defaultB3OptLevel() == 2) 2366 return; 2367 2368 B3::Procedure proc; 2369 Code& code = proc.code(); 2370 2371 BasicBlock* root = code.addBlock(); 2372 2373 Vector<StackSlot*> slots; 2374 for (unsigned i = 0; i < 10000; ++i) 2375 slots.append(code.addStackSlot(8, StackSlotKind::Spill)); 2376 2377 for (auto* slot : slots) 2378 root->append(Move32, nullptr, Tmp(GPRInfo::argumentGPR0), Arg::stack(slot)); 2379 2380 Tmp loadResult = code.newTmp(GP); 2381 Tmp sum = code.newTmp(GP); 2382 root->append(Move, nullptr, Arg::imm(0), sum); 2383 for (auto* slot : slots) { 2384 root->append(Move, nullptr, Arg::stack(slot), loadResult); 2385 root->append(Add64, nullptr, loadResult, sum); 2386 } 2387 root->append(Move, nullptr, sum, Tmp(GPRInfo::returnValueGPR)); 2388 root->append(Ret64, nullptr, Tmp(GPRInfo::returnValueGPR)); 2389 2390 int32_t result = compileAndRun<int>(proc, 1); 2391 CHECK(result == 10000); 2361 2392 } 2362 2393 … … 2456 2487 RUN(testLinearScanSpillRangesEarlyDef()); 2457 2488 2489 RUN(testZDefOfSpillSlotWithOffsetNeedingToBeMaterializedInARegister()); 2490 2458 2491 if (tasks.isEmpty()) 2459 2492 usage();
Note:
See TracChangeset
for help on using the changeset viewer.