diff options
author | Wouter van Oortmerssen <aardappel@gmail.com> | 2021-11-04 17:21:00 -0700 |
---|---|---|
committer | Wouter van Oortmerssen <aardappel@gmail.com> | 2021-11-08 15:53:44 -0800 |
commit | 4a0c89a6cf8f368583f9c0724dbcb04fb17204ec (patch) | |
tree | b69b6babc6aa6de7a1b20c2079aa92db30875763 | |
parent | 1297c214060a11ab06447767bec5f273b7bcb0f9 (diff) | |
download | llvm-4a0c89a6cf8f368583f9c0724dbcb04fb17204ec.tar.gz |
[WebAssembly] Fix fixBrTableIndex removing instruction without checking uses
Fixes: https://bugs.llvm.org/show_bug.cgi?id=52352
Differential Revision: https://reviews.llvm.org/D113230
-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 = |