The type i1imm serves the same purpose as u1imm. Both types are not required.
This patch removes the u1imm type.
Thank you for the review.
I've looked around but the only place we use u1imm is where we only have 1 bit to use in the instruction anyway so we have no way to represent -1 anyway.
I'm actually not going to do this in the end.... I'm just going to abandon this patch.
I realized that we did actually need this type too.
The u1imm type is actually an i32 which is later restricted to be either a 0 or a 1. On the other hand the i1imm type is an i1. This is an important difference.
The issue is that some of the instructions that use this type have builtins. For example: vshasigmaw. The builtin requires that the single bit be passed in as a parameter and that means we need to use an i32. Anyway I'm going to leave the type in.