Add builtins for compound assignment operators. (#5335)

Provide builtins for compound assignments instead of defining them in
the prelude as a use of a binary operator and an assignment. This allows
us to lower compound assignment directly to LLVM operations instead of
producing a function call. In the short term this also allows us to
define a type-generic compound assignment in the prelude.
This commit is contained in:
Richard Smith
2025-04-21 20:38:11 +00:00
committed by GitHub
parent 2bdea71c25
commit b5ae988a08
39 changed files with 1373 additions and 312 deletions
+16 -1
View File
@@ -1394,7 +1394,22 @@ static auto MakeConstantForBuiltinCall(EvalContext& eval_context,
case SemIR::BuiltinFunctionKind::PrintChar:
case SemIR::BuiltinFunctionKind::PrintInt:
case SemIR::BuiltinFunctionKind::ReadChar: {
case SemIR::BuiltinFunctionKind::ReadChar:
case SemIR::BuiltinFunctionKind::IntSAddAssign:
case SemIR::BuiltinFunctionKind::IntSSubAssign:
case SemIR::BuiltinFunctionKind::IntSMulAssign:
case SemIR::BuiltinFunctionKind::IntSDivAssign:
case SemIR::BuiltinFunctionKind::IntSModAssign:
case SemIR::BuiltinFunctionKind::IntUAddAssign:
case SemIR::BuiltinFunctionKind::IntUSubAssign:
case SemIR::BuiltinFunctionKind::IntUMulAssign:
case SemIR::BuiltinFunctionKind::IntUDivAssign:
case SemIR::BuiltinFunctionKind::IntUModAssign:
case SemIR::BuiltinFunctionKind::IntAndAssign:
case SemIR::BuiltinFunctionKind::IntOrAssign:
case SemIR::BuiltinFunctionKind::IntXorAssign:
case SemIR::BuiltinFunctionKind::IntLeftShiftAssign:
case SemIR::BuiltinFunctionKind::IntRightShiftAssign: {
// These are runtime-only builtins.
// TODO: Consider tracking this on the `BuiltinFunctionKind`.
return SemIR::ConstantId::NotConstant;