diff options
Diffstat (limited to 'llvm/lib/Target/WebAssembly')
| -rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyRegisterInfo.cpp | 5 | ||||
| -rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyStoreResults.cpp | 15 |
2 files changed, 14 insertions, 6 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyRegisterInfo.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyRegisterInfo.cpp index 46f271c20af..3397f598759 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyRegisterInfo.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyRegisterInfo.cpp @@ -74,8 +74,9 @@ void WebAssemblyRegisterInfo::eliminateFrameIndex( // generate broken code. report_fatal_error("Memory offset field overflow"); } - MI.getOperand(1).setImm(Offset); - MI.getOperand(2).ChangeToRegister(WebAssembly::SP32, /*IsDef=*/false); + MI.getOperand(FIOperandNum - 1).setImm(Offset); + MI.getOperand(FIOperandNum) + .ChangeToRegister(WebAssembly::SP32, /*IsDef=*/false); } else { // Otherwise create an i32.add SP, offset and make it the operand. auto &MRI = MF.getRegInfo(); diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyStoreResults.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyStoreResults.cpp index 5368ab7bf4c..4035eae83f3 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyStoreResults.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyStoreResults.cpp @@ -134,10 +134,17 @@ bool WebAssemblyStoreResults::runOnMachineFunction(MachineFunction &MF) { case WebAssembly::STORE_F64: case WebAssembly::STORE_I32: case WebAssembly::STORE_I64: { - unsigned ToReg = MI.getOperand(0).getReg(); - unsigned FromReg = - MI.getOperand(WebAssembly::StoreValueOperandNo).getReg(); - Changed |= ReplaceDominatedUses(MBB, MI, FromReg, ToReg, MRI, MDT); + const auto &Stored = MI.getOperand(WebAssembly::StoreValueOperandNo); + if (Stored.isReg()) { + unsigned ToReg = MI.getOperand(0).getReg(); + unsigned FromReg = Stored.getReg(); + Changed |= ReplaceDominatedUses(MBB, MI, FromReg, ToReg, MRI, MDT); + } else if (Stored.isFI()) { + break; + } else { + report_fatal_error( + "Store results: store not consuming reg or frame index"); + } break; } case WebAssembly::CALL_I32: |

