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:
@@ -974,22 +974,28 @@ 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);
|
||||||
|
if lane_reg != zero_reg() {
|
||||||
collector.reg_use(lane_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);
|
||||||
|
if lane_reg != zero_reg() {
|
||||||
collector.reg_use(lane_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);
|
||||||
|
if lane_reg != zero_reg() {
|
||||||
collector.reg_use(lane_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);
|
||||||
collector.reg_use(ri);
|
collector.reg_use(ri);
|
||||||
|
|||||||
Reference in New Issue
Block a user