浏览代码

Fix for perf recovery change

Louis Lafreniere 6 年之前
父节点
当前提交
7c13463859
共有 2 个文件被更改,包括 12 次插入1 次删除
  1. 11 0
      lib/Backend/BackwardPass.cpp
  2. 1 1
      lib/Backend/GlobOpt.cpp

+ 11 - 0
lib/Backend/BackwardPass.cpp

@@ -7454,6 +7454,17 @@ BackwardPass::SymIsIntconstOrSelf(Sym *sym, IR::Opnd *opnd)
 bool
 BackwardPass::InstrPreservesNumberValues(IR::Instr *instr, Sym *defSym)
 {
+    if (instr->m_opcode == Js::OpCode::Ld_A)
+    {
+        if (instr->GetSrc1()->IsRegOpnd())
+        {
+            IR::RegOpnd *src1 = instr->GetSrc1()->AsRegOpnd();
+            if (src1->m_sym->IsSingleDef())
+            {
+                instr = src1->m_sym->GetInstrDef();
+            }
+        }
+    }
     return (OpCodeAttr::ProducesNumber(instr->m_opcode) ||
         (instr->m_opcode == Js::OpCode::Add_A && this->SymIsIntconstOrSelf(defSym, instr->GetSrc1()) && this->SymIsIntconstOrSelf(defSym, instr->GetSrc2())));
 }

+ 1 - 1
lib/Backend/GlobOpt.cpp

@@ -2725,7 +2725,7 @@ GlobOpt::IsNonNumericRegOpnd(IR::RegOpnd *opnd, bool inGlobOpt) const
         {
             return true;
         }
-        if (currentBlock->loop->preservesNumberValue->Test(opnd->m_sym->m_id))
+        if (this->prePassLoop->preservesNumberValue->Test(opnd->m_sym->m_id))
         {
             return false;
         }