[WebAssembly] Fix MRI.hasOneNonDBGUse assert in WebAssemblyRegStackify pass
authorYury Delendik <ydelendik@mozilla.com>
Wed, 26 Sep 2018 23:49:21 +0000 (23:49 +0000)
committerYury Delendik <ydelendik@mozilla.com>
Wed, 26 Sep 2018 23:49:21 +0000 (23:49 +0000)
Summary:
The OneUseDominatesOtherUses in the WebAssemblyRegStackify not properly validates register use using hasOneUse. Since we added/modified DBG_VALUE the assert started catching valid cases.

See also https://reviews.llvm.org/D49034#1247200

Fix verified by running the wasm waterfall.

Reviewed By: dschuff

Tags: #debug-info

Differential Revision: https://reviews.llvm.org/D49034

llvm-svn: 343154

llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp

index 5b6a91d..4649230 100644 (file)
@@ -428,8 +428,8 @@ static bool OneUseDominatesOtherUses(unsigned Reg, const MachineOperand &OneUse,
         if (!TargetRegisterInfo::isVirtualRegister(DefReg) ||
             !MFI.isVRegStackified(DefReg))
           return false;
-        assert(MRI.hasOneUse(DefReg));
-        const MachineOperand &NewUse = *MRI.use_begin(DefReg);
+        assert(MRI.hasOneNonDBGUse(DefReg));
+        const MachineOperand &NewUse = *MRI.use_nodbg_begin(DefReg);
         const MachineInstr *NewUseInst = NewUse.getParent();
         if (NewUseInst == OneUseInst) {
           if (&OneUse > &NewUse)