Fix a bug in produces_const (#4709)

https://github.com/bytecodealliance/wasmtime/pull/4709
This commit is contained in:
Trevor Elliott
2022-08-15 12:00:33 -07:00
committed by GitHub
parent f0c60f46a8
commit 1d0f6fa4fb

View File

@@ -766,13 +766,13 @@ impl Inst {
/// same as the first register (already handled). /// same as the first register (already handled).
fn produces_const(&self) -> bool { fn produces_const(&self) -> bool {
match self { match self {
Self::AluRmiR { op, src2, dst, .. } => { Self::AluRmiR { op, src1, src2, .. } => {
src2.clone().to_reg_mem_imm().to_reg() == Some(dst.to_reg().to_reg()) src2.clone().to_reg_mem_imm().to_reg() == Some(src1.to_reg())
&& (*op == AluRmiROpcode::Xor || *op == AluRmiROpcode::Sub) && (*op == AluRmiROpcode::Xor || *op == AluRmiROpcode::Sub)
} }
Self::XmmRmR { op, src2, dst, .. } => { Self::XmmRmR { op, src1, src2, .. } => {
src2.clone().to_reg_mem().to_reg() == Some(dst.to_reg().to_reg()) src2.clone().to_reg_mem().to_reg() == Some(src1.to_reg())
&& (*op == SseOpcode::Xorps && (*op == SseOpcode::Xorps
|| *op == SseOpcode::Xorpd || *op == SseOpcode::Xorpd
|| *op == SseOpcode::Pxor || *op == SseOpcode::Pxor
@@ -783,9 +783,13 @@ impl Inst {
} }
Self::XmmRmRImm { Self::XmmRmRImm {
op, src2, dst, imm, .. op,
src1,
src2,
imm,
..
} => { } => {
src2.to_reg() == Some(dst.to_reg()) src2.to_reg() == Some(src1.clone())
&& (*op == SseOpcode::Cmppd || *op == SseOpcode::Cmpps) && (*op == SseOpcode::Cmppd || *op == SseOpcode::Cmpps)
&& *imm == FcmpImm::Equal.encode() && *imm == FcmpImm::Equal.encode()
} }