diff options
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyFixBrTableDefaults.cpp')
-rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyFixBrTableDefaults.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyFixBrTableDefaults.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyFixBrTableDefaults.cpp index 52aa3534c78e..5bdec89f1125 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyFixBrTableDefaults.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyFixBrTableDefaults.cpp @@ -61,9 +61,13 @@ void fixBrTableIndex(MachineInstr &MI, MachineBasicBlock *MBB, auto ExtMI = MF.getRegInfo().getVRegDef(MI.getOperand(0).getReg()); if (ExtMI->getOpcode() == WebAssembly::I64_EXTEND_U_I32) { // Unnecessarily extending a 32-bit value to 64, remove it. - assert(MI.getOperand(0).getReg() == ExtMI->getOperand(0).getReg()); + auto ExtDefReg = ExtMI->getOperand(0).getReg(); + assert(MI.getOperand(0).getReg() == ExtDefReg); MI.getOperand(0).setReg(ExtMI->getOperand(1).getReg()); - ExtMI->eraseFromParent(); + if (MF.getRegInfo().use_nodbg_empty(ExtDefReg)) { + // No more users of extend, delete it. + ExtMI->eraseFromParent(); + } } else { // Incoming 64-bit value that needs to be truncated. Register Reg32 = |