Index: llvm/lib/Target/WebAssembly/WebAssemblyFixBrTableDefaults.cpp =================================================================== --- llvm/lib/Target/WebAssembly/WebAssemblyFixBrTableDefaults.cpp +++ llvm/lib/Target/WebAssembly/WebAssemblyFixBrTableDefaults.cpp @@ -61,9 +61,17 @@ 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()); + // Check if the br_table was the only user of the extend. + for (MachineInstr &UseMI : MF.getRegInfo().use_instructions(ExtDefReg)) { + if (&UseMI != &MI) + goto user_found; + } + // No more users of extend, delete it. ExtMI->eraseFromParent(); + user_found:; } else { // Incoming 64-bit value that needs to be truncated. Register Reg32 =