summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/WebAssembly/WebAssemblyStoreResults.cpp
diff options
context:
space:
mode:
authorJF Bastien <jfb@google.com>2016-01-26 20:22:42 +0000
committerJF Bastien <jfb@google.com>2016-01-26 20:22:42 +0000
commit1a6c7608b1f47dadf7adae8dbc1fb8345f7ff15e (patch)
tree574ee329cac3ed73909e74f1e955bf5eaf6878ee /llvm/lib/Target/WebAssembly/WebAssemblyStoreResults.cpp
parentbacf7e4f397f5863e52a0fad4155abd9a6b84b8c (diff)
downloadbcm5719-llvm-1a6c7608b1f47dadf7adae8dbc1fb8345f7ff15e.tar.gz
bcm5719-llvm-1a6c7608b1f47dadf7adae8dbc1fb8345f7ff15e.zip
WebAssembly: don't optimize memcpy/memmove/memcpy to frame index
r258781 optimized memcpy/memmove/memcpy so the intrinsic call can return its first argument, but missed the frame index case. Teach it to ignore that case so C code doesn't assert out in these cases. llvm-svn: 258851
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyStoreResults.cpp')
-rw-r--r--llvm/lib/Target/WebAssembly/WebAssemblyStoreResults.cpp26
1 files changed, 16 insertions, 10 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyStoreResults.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyStoreResults.cpp
index 1d7fe387c41..5368ab7bf4c 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyStoreResults.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyStoreResults.cpp
@@ -150,16 +150,22 @@ bool WebAssemblyStoreResults::runOnMachineFunction(MachineFunction &MF) {
Name == TLI.getLibcallName(RTLIB::MEMSET)) {
LibFunc::Func Func;
if (LibInfo.getLibFunc(Name, Func)) {
- if (!MI.getOperand(2).isReg())
- report_fatal_error(
- "Call to builtin function with wrong signature");
- unsigned FromReg = MI.getOperand(2).getReg();
- unsigned ToReg = MI.getOperand(0).getReg();
- if (MRI.getRegClass(FromReg) != MRI.getRegClass(ToReg))
- report_fatal_error(
- "Call to builtin function with wrong signature");
- Changed |=
- ReplaceDominatedUses(MBB, MI, FromReg, ToReg, MRI, MDT);
+ const auto &Op2 = MI.getOperand(2);
+ if (Op2.isReg()) {
+ unsigned FromReg = Op2.getReg();
+ unsigned ToReg = MI.getOperand(0).getReg();
+ if (MRI.getRegClass(FromReg) != MRI.getRegClass(ToReg))
+ report_fatal_error("Store results: call to builtin function "
+ "with wrong signature, from/to mismatch");
+ Changed |=
+ ReplaceDominatedUses(MBB, MI, FromReg, ToReg, MRI, MDT);
+ } else if (Op2.isFI()) {
+ break;
+ } else {
+ report_fatal_error("Store results: call to builtin function "
+ "with wrong signature, not consuming reg or "
+ "frame index");
+ }
}
}
}
OpenPOWER on IntegriCloud