s390x: Fix more regalloc checker errors (#5121)

For VecInsertLane[Undef] and VecExtractLane, if lane_reg is zero_reg(),
the instruction does not actually use any register value.

Fixes https://github.com/bytecodealliance/wasmtime/issues/5090
This commit is contained in:
Ulrich Weigand
2022-10-25 20:04:31 +02:00
committed by GitHub
parent 39b3b1d772
commit b61e678309

View File

@@ -974,21 +974,27 @@ fn s390x_get_operands<F: Fn(VReg) -> VReg>(inst: &Inst, collector: &mut OperandC
collector.reg_reuse_def(rd, 1); collector.reg_reuse_def(rd, 1);
collector.reg_use(ri); collector.reg_use(ri);
collector.reg_use(rn); collector.reg_use(rn);
collector.reg_use(lane_reg); if lane_reg != zero_reg() {
collector.reg_use(lane_reg);
}
} }
&Inst::VecInsertLaneUndef { &Inst::VecInsertLaneUndef {
rd, rn, lane_reg, .. rd, rn, lane_reg, ..
} => { } => {
collector.reg_def(rd); collector.reg_def(rd);
collector.reg_use(rn); collector.reg_use(rn);
collector.reg_use(lane_reg); if lane_reg != zero_reg() {
collector.reg_use(lane_reg);
}
} }
&Inst::VecExtractLane { &Inst::VecExtractLane {
rd, rn, lane_reg, .. rd, rn, lane_reg, ..
} => { } => {
collector.reg_def(rd); collector.reg_def(rd);
collector.reg_use(rn); collector.reg_use(rn);
collector.reg_use(lane_reg); if lane_reg != zero_reg() {
collector.reg_use(lane_reg);
}
} }
&Inst::VecInsertLaneImm { rd, ri, .. } => { &Inst::VecInsertLaneImm { rd, ri, .. } => {
collector.reg_reuse_def(rd, 1); collector.reg_reuse_def(rd, 1);