Bugfix: i64.eqz returns i32, not i64, in constprop pass.
This commit is contained in:
parent
8caba239fa
commit
eafb4dc649
|
@ -83,44 +83,44 @@ fn const_eval(op: &Operator, vals: &[ConstVal]) -> Option<ConstVal> {
|
||||||
(Operator::I32GeU, [ConstVal::I32(a), ConstVal::I32(b)]) => {
|
(Operator::I32GeU, [ConstVal::I32(a), ConstVal::I32(b)]) => {
|
||||||
Some(ConstVal::I32(if a >= b { 1 } else { 0 }))
|
Some(ConstVal::I32(if a >= b { 1 } else { 0 }))
|
||||||
}
|
}
|
||||||
(Operator::I64Eqz, [ConstVal::I64(a)]) => Some(ConstVal::I64(if *a == 0 { 1 } else { 0 })),
|
(Operator::I64Eqz, [ConstVal::I64(a)]) => Some(ConstVal::I32(if *a == 0 { 1 } else { 0 })),
|
||||||
(Operator::I64Eq, [ConstVal::I64(a), ConstVal::I64(b)]) => {
|
(Operator::I64Eq, [ConstVal::I64(a), ConstVal::I64(b)]) => {
|
||||||
Some(ConstVal::I64(if a == b { 1 } else { 0 }))
|
Some(ConstVal::I32(if a == b { 1 } else { 0 }))
|
||||||
}
|
}
|
||||||
(Operator::I64Ne, [ConstVal::I64(a), ConstVal::I64(b)]) => {
|
(Operator::I64Ne, [ConstVal::I64(a), ConstVal::I64(b)]) => {
|
||||||
Some(ConstVal::I64(if a != b { 1 } else { 0 }))
|
Some(ConstVal::I32(if a != b { 1 } else { 0 }))
|
||||||
}
|
}
|
||||||
(Operator::I64LtS, [ConstVal::I64(a), ConstVal::I64(b)]) => {
|
(Operator::I64LtS, [ConstVal::I64(a), ConstVal::I64(b)]) => {
|
||||||
Some(ConstVal::I64(if (*a as i64) < (*b as i64) { 1 } else { 0 }))
|
Some(ConstVal::I32(if (*a as i64) < (*b as i64) { 1 } else { 0 }))
|
||||||
}
|
}
|
||||||
(Operator::I64LtU, [ConstVal::I64(a), ConstVal::I64(b)]) => {
|
(Operator::I64LtU, [ConstVal::I64(a), ConstVal::I64(b)]) => {
|
||||||
Some(ConstVal::I64(if a < b { 1 } else { 0 }))
|
Some(ConstVal::I32(if a < b { 1 } else { 0 }))
|
||||||
}
|
}
|
||||||
(Operator::I64GtS, [ConstVal::I64(a), ConstVal::I64(b)]) => {
|
(Operator::I64GtS, [ConstVal::I64(a), ConstVal::I64(b)]) => {
|
||||||
Some(ConstVal::I64(if (*a as i64) > (*b as i64) { 1 } else { 0 }))
|
Some(ConstVal::I32(if (*a as i64) > (*b as i64) { 1 } else { 0 }))
|
||||||
}
|
}
|
||||||
(Operator::I64GtU, [ConstVal::I64(a), ConstVal::I64(b)]) => {
|
(Operator::I64GtU, [ConstVal::I64(a), ConstVal::I64(b)]) => {
|
||||||
Some(ConstVal::I64(if a > b { 1 } else { 0 }))
|
Some(ConstVal::I32(if a > b { 1 } else { 0 }))
|
||||||
}
|
}
|
||||||
(Operator::I64LeS, [ConstVal::I64(a), ConstVal::I64(b)]) => {
|
(Operator::I64LeS, [ConstVal::I64(a), ConstVal::I64(b)]) => {
|
||||||
Some(ConstVal::I64(if (*a as i64) <= (*b as i64) {
|
Some(ConstVal::I32(if (*a as i64) <= (*b as i64) {
|
||||||
1
|
1
|
||||||
} else {
|
} else {
|
||||||
0
|
0
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
(Operator::I64LeU, [ConstVal::I64(a), ConstVal::I64(b)]) => {
|
(Operator::I64LeU, [ConstVal::I64(a), ConstVal::I64(b)]) => {
|
||||||
Some(ConstVal::I64(if a <= b { 1 } else { 0 }))
|
Some(ConstVal::I32(if a <= b { 1 } else { 0 }))
|
||||||
}
|
}
|
||||||
(Operator::I64GeS, [ConstVal::I64(a), ConstVal::I64(b)]) => {
|
(Operator::I64GeS, [ConstVal::I64(a), ConstVal::I64(b)]) => {
|
||||||
Some(ConstVal::I64(if (*a as i64) >= (*b as i64) {
|
Some(ConstVal::I32(if (*a as i64) >= (*b as i64) {
|
||||||
1
|
1
|
||||||
} else {
|
} else {
|
||||||
0
|
0
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
(Operator::I64GeU, [ConstVal::I64(a), ConstVal::I64(b)]) => {
|
(Operator::I64GeU, [ConstVal::I64(a), ConstVal::I64(b)]) => {
|
||||||
Some(ConstVal::I64(if a >= b { 1 } else { 0 }))
|
Some(ConstVal::I32(if a >= b { 1 } else { 0 }))
|
||||||
}
|
}
|
||||||
|
|
||||||
(Operator::I32Add, [ConstVal::I32(a), ConstVal::I32(b)]) => {
|
(Operator::I32Add, [ConstVal::I32(a), ConstVal::I32(b)]) => {
|
||||||
|
|
Loading…
Reference in a new issue