mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 23:58:50 +00:00
Fix array comparisons
This commit is contained in:
+6
-3
@@ -4111,14 +4111,17 @@ irValue *ir_emit_comp(irProcedure *proc, TokenKind op_kind, irValue *left, irVal
|
|||||||
|
|
||||||
if (inline_array_arith) {
|
if (inline_array_arith) {
|
||||||
// inline
|
// inline
|
||||||
|
irValue *val = ir_add_local_generated(proc, t_bool, false);
|
||||||
|
ir_emit_store(proc, val, res);
|
||||||
for (i32 i = 0; i < count; i++) {
|
for (i32 i = 0; i < count; i++) {
|
||||||
irValue *x = ir_emit_load(proc, ir_emit_array_epi(proc, lhs, i));
|
irValue *x = ir_emit_load(proc, ir_emit_array_epi(proc, lhs, i));
|
||||||
irValue *y = ir_emit_load(proc, ir_emit_array_epi(proc, rhs, i));
|
irValue *y = ir_emit_load(proc, ir_emit_array_epi(proc, rhs, i));
|
||||||
irValue *cmp = ir_emit_comp(proc, op_kind, x, y);
|
irValue *cmp = ir_emit_comp(proc, op_kind, x, y);
|
||||||
res = ir_emit_arith(proc, cmp_op, res, cmp, t_bool);
|
irValue *new_res = ir_emit_arith(proc, cmp_op, ir_emit_load(proc, val), cmp, t_bool);
|
||||||
|
ir_emit_store(proc, val, ir_emit_conv(proc, new_res, t_bool));
|
||||||
}
|
}
|
||||||
|
|
||||||
return ir_emit_conv(proc, res, t_bool);
|
return ir_emit_load(proc, val);
|
||||||
} else {
|
} else {
|
||||||
irValue *val = ir_add_local_generated(proc, t_bool, false);
|
irValue *val = ir_add_local_generated(proc, t_bool, false);
|
||||||
ir_emit_store(proc, val, res);
|
ir_emit_store(proc, val, res);
|
||||||
@@ -4127,7 +4130,7 @@ irValue *ir_emit_comp(irProcedure *proc, TokenKind op_kind, irValue *left, irVal
|
|||||||
irValue *x = ir_emit_load(proc, ir_emit_array_ep(proc, lhs, loop_data.idx));
|
irValue *x = ir_emit_load(proc, ir_emit_array_ep(proc, lhs, loop_data.idx));
|
||||||
irValue *y = ir_emit_load(proc, ir_emit_array_ep(proc, rhs, loop_data.idx));
|
irValue *y = ir_emit_load(proc, ir_emit_array_ep(proc, rhs, loop_data.idx));
|
||||||
irValue *cmp = ir_emit_comp(proc, op_kind, x, y);
|
irValue *cmp = ir_emit_comp(proc, op_kind, x, y);
|
||||||
irValue *new_res = ir_emit_arith(proc, cmp_op, res, cmp, t_bool);
|
irValue *new_res = ir_emit_arith(proc, cmp_op, res, ir_emit_load(proc, val), t_bool);
|
||||||
ir_emit_store(proc, val, ir_emit_conv(proc, new_res, t_bool));
|
ir_emit_store(proc, val, ir_emit_conv(proc, new_res, t_bool));
|
||||||
}
|
}
|
||||||
ir_loop_end(proc, loop_data);
|
ir_loop_end(proc, loop_data);
|
||||||
|
|||||||
Reference in New Issue
Block a user