Check if src is defined using a bitmap. Modifies ops, bitmap_registers and bitmap_backed.
(
ops: list[Op],
src: Register,
bitmap_registers: list[Register],
bitmap_backed: list[Register],
error_block: BasicBlock,
ok_block: BasicBlock,
line: int,
)
| 135 | |
| 136 | |
| 137 | def check_for_uninit_using_bitmap( |
| 138 | ops: list[Op], |
| 139 | src: Register, |
| 140 | bitmap_registers: list[Register], |
| 141 | bitmap_backed: list[Register], |
| 142 | error_block: BasicBlock, |
| 143 | ok_block: BasicBlock, |
| 144 | line: int, |
| 145 | ) -> None: |
| 146 | """Check if src is defined using a bitmap. |
| 147 | |
| 148 | Modifies ops, bitmap_registers and bitmap_backed. |
| 149 | """ |
| 150 | if src not in bitmap_backed: |
| 151 | # Set up a new bitmap backed register. |
| 152 | bitmap_backed.append(src) |
| 153 | n = (len(bitmap_backed) - 1) // BITMAP_BITS |
| 154 | if len(bitmap_registers) <= n: |
| 155 | bitmap_registers.append(Register(bitmap_rprimitive, f"__locals_bitmap{n}")) |
| 156 | |
| 157 | index = bitmap_backed.index(src) |
| 158 | masked = IntOp( |
| 159 | bitmap_rprimitive, |
| 160 | bitmap_registers[index // BITMAP_BITS], |
| 161 | Integer(1 << (index & (BITMAP_BITS - 1)), bitmap_rprimitive), |
| 162 | IntOp.AND, |
| 163 | line, |
| 164 | ) |
| 165 | ops.append(masked) |
| 166 | chk = ComparisonOp(masked, Integer(0, bitmap_rprimitive), ComparisonOp.EQ) |
| 167 | ops.append(chk) |
| 168 | ops.append(Branch(chk, error_block, ok_block, Branch.BOOL)) |
| 169 | |
| 170 | |
| 171 | def update_register_assignments_to_set_bitmap( |
no test coverage detected
searching dependent graphs…