Skip to content

Commit bbf4624

Browse files
committed
[MERGE chakra-core#2007 @curtisman] Fix regression from Bool-Int equality fast-path GenerateFastEqBoolInt
Merge pull request chakra-core#2007 from curtisman:fix 1. XOR requires the dst and src1 to be the same. Just use the dst instead of a temp 2. The true ^ false is not a AddrOpndKindDynamicVar, change it to AddrOpndKindDynamicMisc
2 parents 3554808 + 49304db commit bbf4624

1 file changed

Lines changed: 10 additions & 12 deletions

File tree

lib/Backend/Lower.cpp

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20478,13 +20478,12 @@ bool Lowerer::GenerateFastEqBoolInt(IR::Instr * instr, bool *pNeedHelper)
2047820478
instr->InsertBefore(firstFalse);
2047920479
}
2048020480

20481-
// tmp = src
20482-
// dst = tmp ^ (true ^ false) (= !src)
20483-
IR::RegOpnd* temp = IR::RegOpnd::New(IRType::TyVar, instr->m_func);
20484-
LowererMD::CreateAssign(temp, srcBool, instr);
20481+
// dst = src
20482+
// dst = dst ^ (true ^ false) (= !src)
20483+
LowererMD::CreateAssign(instr->GetDst(), srcBool, instr);
2048520484
ScriptContextInfo* sci = instr->m_func->GetScriptContextInfo();
20486-
IR::AddrOpnd* xorval = IR::AddrOpnd::New(sci->GetTrueAddr() ^ sci->GetFalseAddr(), IR::AddrOpndKindDynamicVar, instr->m_func, true);
20487-
instr->InsertBefore(IR::Instr::New(LowererMD::MDXorOpcode, instr->GetDst(), temp, xorval, instr->m_func));
20485+
IR::AddrOpnd* xorval = IR::AddrOpnd::New(sci->GetTrueAddr() ^ sci->GetFalseAddr(), IR::AddrOpndKindDynamicMisc, instr->m_func, true);
20486+
instr->InsertBefore(IR::Instr::New(LowererMD::MDXorOpcode, instr->GetDst(), instr->GetDst(), xorval, instr->m_func));
2048820487

2048920488
instr->InsertBefore(forceInequal);
2049020489
LowererMD::CreateAssign(instr->GetDst(), this->LoadLibraryValueOpnd(instr, inequalResultValue), instr);
@@ -20531,13 +20530,12 @@ bool Lowerer::GenerateFastEqBoolInt(IR::Instr * instr, bool *pNeedHelper)
2053120530
}
2053220531
else
2053320532
{
20534-
// tmp = src
20535-
// dst = tmp ^ (true ^ false) (= !src)
20536-
IR::RegOpnd* temp = IR::RegOpnd::New(IRType::TyVar, instr->m_func);
20537-
LowererMD::CreateAssign(temp, srcBool, instr);
20533+
// dst = src
20534+
// dst = dst ^ (true ^ false) (= !src)
20535+
LowererMD::CreateAssign(instr->GetDst(), srcBool, instr);
2053820536
ScriptContextInfo* sci = instr->m_func->GetScriptContextInfo();
20539-
IR::AddrOpnd* xorval = IR::AddrOpnd::New(sci->GetTrueAddr() ^ sci->GetFalseAddr(), IR::AddrOpndKindDynamicVar, instr->m_func, true);
20540-
instr->InsertBefore(IR::Instr::New(LowererMD::MDXorOpcode, instr->GetDst(), temp, xorval, instr->m_func));
20537+
IR::AddrOpnd* xorval = IR::AddrOpnd::New(sci->GetTrueAddr() ^ sci->GetFalseAddr(), IR::AddrOpndKindDynamicMisc, instr->m_func, true);
20538+
instr->InsertBefore(IR::Instr::New(LowererMD::MDXorOpcode, instr->GetDst(), instr->GetDst(), xorval, instr->m_func));
2054120539
}
2054220540
instr->InsertBefore(IR::BranchInstr::New(LowererMD::MDUncondBranchOpcode, labelDone, this->m_func));
2054320541
}

0 commit comments

Comments
 (0)