StackDoubleFlow commented on issue #1133:
Is the process complete?
bnotnow panics on anunimplemented!during lowering.
cfallin commented on issue #1133:
Yes, we're currently using the new backend. It looks like the lowering for
bnotfor scalar boolean types exists for aarch64 but not for x86-64; a PR to add this on x86-64 would be a welcome contribution and a good first bug if anyone wants to try this!(We still have some holes in supported-operand-types coverage for CLIF that is outside of what the Wasm frontend generates, and the Wasm frontend doesn't use Cranelift-level bools, so that's probably why this still isn't implemented. Sorry about that!)
akirilov-arm commented on issue #1133:
And looking at the other items in this issue - currently we do not allow loads and stores of scalar booleans; this has been discussed at length in #3205, together with other aspects of the boolean types.
pnevyk commented on issue #1133:
It seems that
bnotno longer panics onx86_64target since #3592 . I tried to allowx86_64target in this runtest and it does not fail, while it fails before the PR.Not sure if that was intentional given the ongoing (?) discussion on representation of
b1.
cfallin commented on issue #1133:
Indeed (re: above), bools are fairly well supported now; I think we can probably close this tracking issue. The broader issue of what we want to do about bool representations in #3205 should continue regardless, as we still need to pin down some details of what we want at the CLIF-semantics level.
cfallin closed issue #1133:
See vaguely bytecodealliance/wasmtime#1110, bytecodealliance/wasmtime#1045, and https://github.com/jyn514/rcc/issues/92. An easy way to do this might be to convert from bool -> int -> bool and back as suggested in https://github.com/CraneStation/cranelift/issues/922#issuecomment-523931097.
- [ ] bnot
Only occurs if you return the value (maybe would also happen for function calls?)function u0:0() -> i32 system_v { ebb0: v0 = iconst.i32 1 v1 = icmp_imm ne v0, 0 v2 = bnot v1 v3 = bint.i32 v2 return v3 } codegen error: Compilation error: Verifier errors: - inst2: v2 is a real GPR value defined by a ghost instruction
- [ ] bnz
Note: this only occurs when the values arei8, not fori32, and it occurs during codegen, not verification.function u0:0() system_v { ebb0: v0 = iconst.i8 0 v1 = iconst.i8 0 v2 = icmp ne v0, v1 brz v2, ebb1 return ebb1: return } codegen error: Compilation error: Verifier errors: - inst3: Branch must have an encoding
- [ ]
storefunction u0:0() -> i32 system_v { ss0 = explicit_slot 1 ebb0: v0 = bconst.b1 true v1 = stack_addr.i64 ss0 store v0, v1 v2 = iconst.i32 0 return v2 } fatal: - inst2: has an invalid controlling type b1
- [ ]
borfunction u0:0() -> i32 system_v { ss0 = explicit_slot 1 ebb0: v0 = stack_addr.i64 ss0 v1 = bconst.b1 true v2 = load.b1 v0 v3 = bor v2, v1 store v3, v0 v4 = iconst.i32 0 return v4 } fatal: - inst2: has an invalid controlling type b1 - inst4: has an invalid controlling type b1
Last updated: Dec 06 2025 at 06:05 UTC