@@ -11545,6 +11545,7 @@ Lowerer::LowerBailOnNotStackArgs(IR::Instr * instr)
1154511545 {
1154611546 //BailOut if the number of actuals (except "this" argument) is greater than or equal to 15.
1154711547 IR::RegOpnd* ldLenDstOpnd = IR::RegOpnd::New(TyUint32, instr->m_func);
11548+ const IR::AutoReuseOpnd autoReuseldLenDstOpnd(ldLenDstOpnd, instr->m_func);
1154811549 IR::Instr* ldLen = IR::Instr::New(Js::OpCode::LdLen_A, ldLenDstOpnd, instr->m_func);
1154911550 ldLenDstOpnd->SetValueType(ValueType::GetTaggedInt()); //LdLen_A works only on stack arguments
1155011551 instr->InsertBefore(ldLen);
@@ -19535,7 +19536,8 @@ Lowerer::GenerateArgOutForStackArgs(IR::Instr* callInstr, IR::Instr* stackArgsIn
1953519536 IR::RegOpnd* stackArgs = stackArgsInstr->GetSrc1()->AsRegOpnd();
1953619537
1953719538 IR::RegOpnd* ldLenDstOpnd = IR::RegOpnd::New(TyMachReg, func);
19538- IR::Instr* ldLen = IR::Instr::New(Js::OpCode::LdLen_A, ldLenDstOpnd ,stackArgs, func);
19539+ const IR::AutoReuseOpnd autoReuseLdLenDstOpnd(ldLenDstOpnd, func);
19540+ IR::Instr* ldLen = IR::Instr::New(Js::OpCode::LdLen_A, ldLenDstOpnd, stackArgs, func);
1953919541 ldLenDstOpnd->SetValueType(ValueType::GetTaggedInt()); /*LdLen_A works only on stack arguments*/
1954019542 callInstr->InsertBefore(ldLen);
1954119543 GenerateFastRealStackArgumentsLdLen(ldLen);
@@ -19563,6 +19565,7 @@ Lowerer::GenerateArgOutForStackArgs(IR::Instr* callInstr, IR::Instr* stackArgsIn
1956319565
1956419566 IR::IndirOpnd *nthArgument = IR::IndirOpnd::New(stackArgs, ldLenDstOpnd, TyMachReg, func);
1956519567 IR::RegOpnd* ldElemDstOpnd = IR::RegOpnd::New(TyMachReg,func);
19568+ const IR::AutoReuseOpnd autoReuseldElemDstOpnd(ldElemDstOpnd, func);
1956619569 IR::Instr* ldElem = IR::Instr::New(Js::OpCode::LdElemI_A, ldElemDstOpnd, nthArgument, func);
1956719570 callInstr->InsertBefore(ldElem);
1956819571 GenerateFastStackArgumentsLdElemI(ldElem);
@@ -19586,6 +19589,7 @@ Lowerer::GenerateArgOutForStackArgs(IR::Instr* callInstr, IR::Instr* stackArgsIn
1958619589
1958719590 nthArgument = IR::IndirOpnd::New(stackArgs, ldLenDstOpnd, TyMachReg, func);
1958819591 ldElemDstOpnd = IR::RegOpnd::New(TyMachReg,func);
19592+ const IR::AutoReuseOpnd autoReuseldElemDstOpnd2(ldElemDstOpnd, func);
1958919593 ldElem = IR::Instr::New(Js::OpCode::LdElemI_A, ldElemDstOpnd, nthArgument, func);
1959019594 callInstr->InsertBefore(ldElem);
1959119595 GenerateFastStackArgumentsLdElemI(ldElem);
@@ -22531,6 +22535,7 @@ Lowerer::GenerateFastCmTypeOf(IR::Instr *compare, IR::RegOpnd *object, IR::IntCo
2253122535 else // Other primitive types don't need helper
2253222536 {
2253322537 typeOf->Remove();
22538+ dst = compare->UnlinkDst()->AsRegOpnd();
2253422539 compare->Remove();
2253522540 *pfNoLower = true;
2253622541 }
0 commit comments