aboutsummaryrefslogtreecommitdiff
path: root/src/ir.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ir.cpp')
-rw-r--r--src/ir.cpp18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/ir.cpp b/src/ir.cpp
index ede403c722..5facc3eb49 100644
--- a/src/ir.cpp
+++ b/src/ir.cpp
@@ -25215,21 +25215,25 @@ static IrInstGen *ir_analyze_instruction_cmpxchg(IrAnalyze *ira, IrInstSrcCmpxch
if (ptr_val == nullptr)
return ira->codegen->invalid_inst_gen;
- ZigValue *op1_val = const_ptr_pointee(ira, ira->codegen, ptr_val, instruction->base.base.source_node);
- if (op1_val == nullptr)
+ ZigValue *stored_val = const_ptr_pointee(ira, ira->codegen, ptr_val, instruction->base.base.source_node);
+ if (stored_val == nullptr)
return ira->codegen->invalid_inst_gen;
- ZigValue *op2_val = ir_resolve_const(ira, casted_cmp_value, UndefBad);
- if (op2_val == nullptr)
+ ZigValue *expected_val = ir_resolve_const(ira, casted_cmp_value, UndefBad);
+ if (expected_val == nullptr)
+ return ira->codegen->invalid_inst_gen;
+
+ ZigValue *new_val = ir_resolve_const(ira, casted_new_value, UndefBad);
+ if (new_val == nullptr)
return ira->codegen->invalid_inst_gen;
- bool eql = const_values_equal(ira->codegen, op1_val, op2_val);
+ bool eql = const_values_equal(ira->codegen, stored_val, expected_val);
IrInstGen *result = ir_const(ira, &instruction->base.base, result_type);
if (eql) {
- ir_analyze_store_ptr(ira, &instruction->base.base, casted_ptr, casted_new_value, false);
+ copy_const_val(ira->codegen, stored_val, new_val);
set_optional_value_to_null(result->value);
} else {
- set_optional_payload(result->value, op1_val);
+ set_optional_payload(result->value, stored_val);
}
return result;
}