diff options
| author | Veikka Tuominen <git@vexu.eu> | 2022-11-23 15:02:40 +0200 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2022-11-26 18:05:27 +0200 |
| commit | 72fa8d4880613d88f9f29dd78012b7253729bac7 (patch) | |
| tree | d9a84bce86501001b27cb5d31f0a596a3362f7b8 /src | |
| parent | 5b9d0a446af4e74c9f915a34b39de83d9b2335f9 (diff) | |
| download | zig-72fa8d4880613d88f9f29dd78012b7253729bac7.tar.gz zig-72fa8d4880613d88f9f29dd78012b7253729bac7.zip | |
Sema: fix overflow arithmetic with runtime vectors
It should return a a vector of bools for compatibility with scalar
operands and stage1 until #10248 can be implemented.
Closes #13201
Diffstat (limited to 'src')
| -rw-r--r-- | src/Sema.zig | 10 |
1 files changed, 1 insertions, 9 deletions
diff --git a/src/Sema.zig b/src/Sema.zig index 0a28d2d7d0..24faa946c4 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -13468,7 +13468,6 @@ fn zirOverflowArithmetic( const maybe_rhs_val = try sema.resolveMaybeUndefVal(rhs); const tuple_ty = try sema.overflowArithmeticTupleType(dest_ty); - const ov_ty = tuple_ty.tupleFields().types[1]; // TODO: Remove and use `ov_ty` instead. // This is a temporary type used until overflow arithmetic properly returns `u1` instead of `bool`. const overflowed_ty = if (dest_ty.zigTypeTag() == .Vector) try Type.vector(sema.arena, dest_ty.vectorLen(), Type.bool) else Type.bool; @@ -13619,14 +13618,7 @@ fn zirOverflowArithmetic( try sema.storePtr2(block, src, ptr, ptr_src, wrapped, src, .store); const overflow_bit = try sema.tupleFieldValByIndex(block, src, tuple, 1, tuple_ty); - const zero_ov_val = if (dest_ty.zigTypeTag() == .Vector) try Value.Tag.repeated.create(sema.arena, Value.zero) else Value.zero; - const zero_ov = try sema.addConstant(ov_ty, zero_ov_val); - - const overflowed_inst = if (dest_ty.zigTypeTag() == .Vector) - block.addCmpVector(overflow_bit, .zero, .neq, try sema.addType(ov_ty)) - else - block.addBinOp(.cmp_neq, overflow_bit, zero_ov); - return overflowed_inst; + return block.addBitCast(overflowed_ty, overflow_bit); }; try sema.storePtr2(block, src, ptr, ptr_src, result.wrapped, src, .store); |
