summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/WebAssembly
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Target/WebAssembly')
-rw-r--r--llvm/lib/Target/WebAssembly/WebAssemblyRegisterInfo.cpp5
-rw-r--r--llvm/lib/Target/WebAssembly/WebAssemblyStoreResults.cpp15
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:
OpenPOWER on IntegriCloud