That is a good idea! I did just that. Note that HLSL_OP2_DOT is not defined for bools, so bool vectors are a special case I had to handle with HLSL_OP2_LOGIC_AND and HLSL_OP2_LOGIC_OR.
Maybe my mathematician side is prevailing too much for Zeb's tastes, but I would just decide that `DOT` is defined for `bool` too, simply using `AND` instead of `MUL` and `OR` instead of `ADD` (unless I am missing something, you can basically use the same `lower_int_dot()` implementation, just using the appropriate `HLSL_OP2` constants). Notice that this is different of how the `dot()` intrinsic work, but that's not necessarily a problem because the `bool` dot product is immediately casted to `int` while parsing (inside `expr_common_base_type()`).