aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-11-23 15:02:40 +0200
committerVeikka Tuominen <git@vexu.eu>2022-11-26 18:05:27 +0200
commit72fa8d4880613d88f9f29dd78012b7253729bac7 (patch)
treed9a84bce86501001b27cb5d31f0a596a3362f7b8 /src
parent5b9d0a446af4e74c9f915a34b39de83d9b2335f9 (diff)
downloadzig-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.zig10
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);