(chunk: &mut SSAChunk, dead: &mut [bool], ip: usize)
| 215 | } |
| 216 | |
| 217 | fn try_fold_not(chunk: &mut SSAChunk, dead: &mut [bool], ip: usize) { |
| 218 | let Some(prev1_ip) = prev_live(dead, ip) else { return }; |
| 219 | let p1 = chunk.instructions[prev1_ip]; |
| 220 | if p1.opcode != OpCode::LoadConst { return; } |
| 221 | let Some(v) = const_to_val(&chunk.constants, p1.operand) else { return }; |
| 222 | |
| 223 | let folded = if v.is_bool() { |
| 224 | Some(Val::bool(!v.as_bool())) |
| 225 | } else if v.is_int() { |
| 226 | Some(Val::bool(v.as_int() == 0)) |
| 227 | } else if v.is_float() { |
| 228 | Some(Val::bool(v.as_float() == 0.0)) |
| 229 | } else if v.is_none() { |
| 230 | Some(Val::bool(true)) |
| 231 | } else { |
| 232 | None |
| 233 | }; |
| 234 | |
| 235 | if let Some(r) = folded |
| 236 | && write_const_load(chunk, prev1_ip, r) |
| 237 | { |
| 238 | dead[ip] = true; |
| 239 | } |
| 240 | } |
| 241 | |
| 242 | fn try_fold_neg(chunk: &mut SSAChunk, dead: &mut [bool], ip: usize) { |
| 243 | let Some(prev1_ip) = prev_live(dead, ip) else { return }; |
no test coverage detected