mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
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:
+10
-10
@@ -35,7 +35,7 @@ fn F() -> i32 {
|
||||
// CHECK:STDOUT: %Convert.specific_fn: <specific function> = specific_function %Convert.956, @Convert.2(%int_32) [concrete]
|
||||
// CHECK:STDOUT: %bound_method: <bound method> = bound_method %int_0.5c6, %Convert.specific_fn [concrete]
|
||||
// CHECK:STDOUT: %int_0.6a9: %i32 = int_value 0 [concrete]
|
||||
// CHECK:STDOUT: %ptr: type = ptr_type %i32 [concrete]
|
||||
// CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
@@ -85,21 +85,21 @@ fn F() -> i32 {
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %n: ref %i32 = bind_name n, %n.var
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %p.patt: %ptr = binding_pattern p
|
||||
// CHECK:STDOUT: %.loc13_3: %ptr = var_pattern %p.patt
|
||||
// CHECK:STDOUT: %p.patt: %ptr.235 = binding_pattern p
|
||||
// CHECK:STDOUT: %.loc13_3: %ptr.235 = var_pattern %p.patt
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %p.var: ref %ptr = var p
|
||||
// CHECK:STDOUT: %p.var: ref %ptr.235 = var p
|
||||
// CHECK:STDOUT: %n.ref: ref %i32 = name_ref n, %n
|
||||
// CHECK:STDOUT: %addr: %ptr = addr_of %n.ref
|
||||
// CHECK:STDOUT: %addr: %ptr.235 = addr_of %n.ref
|
||||
// CHECK:STDOUT: assign %p.var, %addr
|
||||
// CHECK:STDOUT: %.loc13_13: type = splice_block %ptr [concrete = constants.%ptr] {
|
||||
// CHECK:STDOUT: %.loc13_13: type = splice_block %ptr [concrete = constants.%ptr.235] {
|
||||
// CHECK:STDOUT: %int_32.loc13: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
|
||||
// CHECK:STDOUT: %i32.loc13: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
|
||||
// CHECK:STDOUT: %ptr: type = ptr_type %i32.loc13 [concrete = constants.%ptr]
|
||||
// CHECK:STDOUT: %ptr: type = ptr_type %i32.loc13 [concrete = constants.%ptr.235]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %p: ref %ptr = bind_name p, %p.var
|
||||
// CHECK:STDOUT: %p.ref: ref %ptr = name_ref p, %p
|
||||
// CHECK:STDOUT: %.loc15_11: %ptr = bind_value %p.ref
|
||||
// CHECK:STDOUT: %p: ref %ptr.235 = bind_name p, %p.var
|
||||
// CHECK:STDOUT: %p.ref: ref %ptr.235 = name_ref p, %p
|
||||
// CHECK:STDOUT: %.loc15_11: %ptr.235 = bind_value %p.ref
|
||||
// CHECK:STDOUT: %.loc15_10.1: ref %i32 = deref %.loc15_11
|
||||
// CHECK:STDOUT: %.loc15_10.2: %i32 = bind_value %.loc15_10.1
|
||||
// CHECK:STDOUT: return %.loc15_10.2
|
||||
|
||||
Reference in New Issue
Block a user