Skip to content

Commit 043ca77

Browse files
authored
Builtin for [Atomic.set] (ocaml-flambda#3497)
Add [Lambda.Patomic_set] and propagate to the backend
1 parent aca1fea commit 043ca77

16 files changed

+93
-51
lines changed

bytecomp/bytegen.ml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ let preserve_tailcall_for_prim = function
199199
| Patomic_exchange _ | Patomic_compare_exchange _
200200
| Patomic_compare_set _ | Patomic_fetch_add | Patomic_add
201201
| Patomic_sub | Patomic_land | Patomic_lor
202-
| Patomic_lxor | Patomic_load _
202+
| Patomic_lxor | Patomic_load _ | Patomic_set _
203203
| Pdls_get | Preinterpret_tagged_int63_as_unboxed_int64
204204
| Preinterpret_unboxed_int64_as_tagged_int63 | Ppoll | Ppeek _ | Ppoke _ ->
205205
false
@@ -657,6 +657,7 @@ let comp_primitive stack_info p sz args =
657657
| Pget_header _ -> Kccall("caml_get_header", 1)
658658
| Pobj_dup -> Kccall("caml_obj_dup", 1)
659659
| Patomic_load _ -> Kccall("caml_atomic_load", 1)
660+
| Patomic_set _
660661
| Patomic_exchange _ -> Kccall("caml_atomic_exchange", 2)
661662
| Patomic_compare_exchange _ -> Kccall("caml_atomic_compare_exchange", 3)
662663
| Patomic_compare_set _ -> Kccall("caml_atomic_compare_set", 3)

lambda/lambda.ml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@ type primitive =
311311
| Pint_as_pointer of locality_mode
312312
(* Atomic operations *)
313313
| Patomic_load of {immediate_or_pointer : immediate_or_pointer}
314+
| Patomic_set of {immediate_or_pointer : immediate_or_pointer}
314315
| Patomic_exchange of {immediate_or_pointer : immediate_or_pointer}
315316
| Patomic_compare_exchange of {immediate_or_pointer : immediate_or_pointer}
316317
| Patomic_compare_set of {immediate_or_pointer : immediate_or_pointer}
@@ -1950,6 +1951,7 @@ let primitive_may_allocate : primitive -> locality_mode option = function
19501951
| Ppoll ->
19511952
Some alloc_heap
19521953
| Patomic_load _
1954+
| Patomic_set _
19531955
| Patomic_exchange _
19541956
| Patomic_compare_exchange _
19551957
| Patomic_compare_set _
@@ -2126,7 +2128,7 @@ let primitive_can_raise prim =
21262128
| Patomic_exchange _ | Patomic_compare_exchange _
21272129
| Patomic_compare_set _ | Patomic_fetch_add | Patomic_add
21282130
| Patomic_sub | Patomic_land | Patomic_lor
2129-
| Patomic_lxor | Patomic_load _ -> false
2131+
| Patomic_lxor | Patomic_load _ | Patomic_set _ -> false
21302132
| Prunstack | Pperform | Presume | Preperform -> true (* XXX! *)
21312133
| Pdls_get | Ppoll | Preinterpret_tagged_int63_as_unboxed_int64
21322134
| Preinterpret_unboxed_int64_as_tagged_int63
@@ -2357,6 +2359,7 @@ let primitive_result_layout (p : primitive) =
23572359
| Prunstack | Presume | Pperform | Preperform -> layout_any_value
23582360
| Patomic_load { immediate_or_pointer = Immediate } -> layout_int
23592361
| Patomic_load { immediate_or_pointer = Pointer } -> layout_any_value
2362+
| Patomic_set _ -> layout_unit
23602363
| Patomic_exchange { immediate_or_pointer = Immediate } -> layout_int
23612364
| Patomic_exchange { immediate_or_pointer = Pointer } -> layout_any_value
23622365
| Patomic_compare_exchange { immediate_or_pointer = Immediate } -> layout_int

lambda/lambda.mli

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,7 @@ type primitive =
309309
| Pint_as_pointer of locality_mode
310310
(* Atomic operations *)
311311
| Patomic_load of {immediate_or_pointer : immediate_or_pointer}
312+
| Patomic_set of {immediate_or_pointer : immediate_or_pointer}
312313
| Patomic_exchange of {immediate_or_pointer : immediate_or_pointer}
313314
| Patomic_compare_exchange of {immediate_or_pointer : immediate_or_pointer}
314315
| Patomic_compare_set of {immediate_or_pointer : immediate_or_pointer}

lambda/printlambda.ml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -913,6 +913,10 @@ let primitive ppf = function
913913
(match immediate_or_pointer with
914914
| Immediate -> fprintf ppf "atomic_load_imm"
915915
| Pointer -> fprintf ppf "atomic_load_ptr")
916+
| Patomic_set {immediate_or_pointer} ->
917+
(match immediate_or_pointer with
918+
| Immediate -> fprintf ppf "atomic_set_imm"
919+
| Pointer -> fprintf ppf "atomic_set_ptr")
916920
| Patomic_exchange {immediate_or_pointer} ->
917921
(match immediate_or_pointer with
918922
| Immediate -> fprintf ppf "atomic_exchange_imm"
@@ -1109,6 +1113,10 @@ let name_of_primitive = function
11091113
(match immediate_or_pointer with
11101114
| Immediate -> "atomic_load_imm"
11111115
| Pointer -> "atomic_load_ptr")
1116+
| Patomic_set {immediate_or_pointer} ->
1117+
(match immediate_or_pointer with
1118+
| Immediate -> "atomic_set_imm"
1119+
| Pointer -> "atomic_set_ptr")
11121120
| Patomic_exchange {immediate_or_pointer} ->
11131121
(match immediate_or_pointer with
11141122
| Immediate -> "atomic_exchange_imm"

lambda/tmc.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -905,7 +905,7 @@ let rec choice ctx t =
905905
| Patomic_exchange _ | Patomic_compare_exchange _
906906
| Patomic_compare_set _ | Patomic_fetch_add
907907
| Patomic_add | Patomic_sub | Patomic_land
908-
| Patomic_lor | Patomic_lxor | Patomic_load _
908+
| Patomic_lor | Patomic_lxor | Patomic_load _ | Patomic_set _
909909
| Punbox_float _ | Pbox_float (_, _)
910910
| Punbox_int _ | Pbox_int _
911911
| Punbox_vector _ | Pbox_vector (_, _)

lambda/translprim.ml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -897,6 +897,8 @@ let lookup_primitive loc ~poly_mode ~poly_sort pos p =
897897
| "%get_header" -> Primitive (Pget_header mode, 1)
898898
| "%atomic_load" ->
899899
Primitive ((Patomic_load {immediate_or_pointer=Pointer}), 1)
900+
| "%atomic_set" ->
901+
Primitive (Patomic_set {immediate_or_pointer=Pointer}, 2)
900902
| "%atomic_exchange" ->
901903
Primitive (Patomic_exchange {immediate_or_pointer=Pointer}, 2)
902904
| "%atomic_compare_exchange" ->
@@ -1378,6 +1380,16 @@ let specialize_primitive env loc ty ~has_constant_constructor prim =
13781380
| Some (_p1, rhs) -> maybe_pointer_type env rhs in
13791381
Some (Primitive (Patomic_load {immediate_or_pointer = is_int}, arity))
13801382
end
1383+
| Primitive (Patomic_set { immediate_or_pointer = Pointer },
1384+
arity), [_; p2] -> begin
1385+
match maybe_pointer_type env p2 with
1386+
| Pointer -> None
1387+
| Immediate ->
1388+
Some
1389+
(Primitive
1390+
(Patomic_set
1391+
{immediate_or_pointer = Immediate}, arity))
1392+
end
13811393
| Primitive (Patomic_exchange { immediate_or_pointer = Pointer },
13821394
arity), [_; p2] -> begin
13831395
match maybe_pointer_type env p2 with
@@ -1938,7 +1950,7 @@ let lambda_primitive_needs_event_after = function
19381950
| Pprobe_is_enabled _
19391951
| Patomic_exchange _ | Patomic_compare_exchange _
19401952
| Patomic_compare_set _ | Patomic_fetch_add | Patomic_add | Patomic_sub
1941-
| Patomic_land | Patomic_lor | Patomic_lxor | Patomic_load _
1953+
| Patomic_land | Patomic_lor | Patomic_lxor | Patomic_load _ | Patomic_set _
19421954
| Pintofbint _ | Pctconst _ | Pbswap16 | Pint_as_pointer _ | Popaque _
19431955
| Pdls_get
19441956
| Pobj_magic _ | Punbox_float _ | Punbox_int _ | Punbox_vector _

lambda/value_rec_compiler.ml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,7 @@ let compute_static_size lam =
350350
| Pbbswap _
351351
| Pint_as_pointer _
352352
| Patomic_load _
353+
| Patomic_set _
353354
| Patomic_exchange _
354355
| Patomic_compare_exchange _
355356
| Patomic_compare_set _

middle_end/flambda2/from_lambda/closure_conversion.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1049,7 +1049,7 @@ let close_primitive acc env ~let_bound_ids_with_kinds named
10491049
| Patomic_exchange _ | Patomic_compare_exchange _ | Patomic_compare_set _
10501050
| Patomic_fetch_add | Patomic_add | Patomic_sub | Patomic_land
10511051
| Patomic_lor | Patomic_lxor | Pdls_get | Ppoll | Patomic_load _
1052-
| Preinterpret_tagged_int63_as_unboxed_int64
1052+
| Patomic_set _ | Preinterpret_tagged_int63_as_unboxed_int64
10531053
| Preinterpret_unboxed_int64_as_tagged_int63 | Ppeek _ | Ppoke _ ->
10541054
(* Inconsistent with outer match *)
10551055
assert false

middle_end/flambda2/from_lambda/lambda_to_flambda_primitives.ml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2382,6 +2382,11 @@ let convert_lprim ~big_endian (prim : L.primitive) (args : Simple.t list list)
23822382
[ Unary
23832383
( Atomic_load (convert_block_access_field_kind immediate_or_pointer),
23842384
atomic ) ]
2385+
| Patomic_set { immediate_or_pointer }, [[atomic]; [new_value]] ->
2386+
[ Binary
2387+
( Atomic_set (convert_block_access_field_kind immediate_or_pointer),
2388+
atomic,
2389+
new_value ) ]
23852390
| Patomic_exchange { immediate_or_pointer }, [[atomic]; [new_value]] ->
23862391
[ Binary
23872392
( Atomic_exchange (convert_block_access_field_kind immediate_or_pointer),
@@ -2507,8 +2512,8 @@ let convert_lprim ~big_endian (prim : L.primitive) (args : Simple.t list list)
25072512
_,
25082513
_ )
25092514
| Pcompare_ints | Pcompare_floats _ | Pcompare_bints _
2510-
| Patomic_exchange _ | Patomic_fetch_add | Patomic_add | Patomic_sub
2511-
| Patomic_land | Patomic_lor | Patomic_lxor | Ppoke _ ),
2515+
| Patomic_exchange _ | Patomic_set _ | Patomic_fetch_add | Patomic_add
2516+
| Patomic_sub | Patomic_land | Patomic_lor | Patomic_lxor | Ppoke _ ),
25122517
( []
25132518
| [_]
25142519
| _ :: _ :: _ :: _

middle_end/flambda2/parser/flambda_to_fexpr.ml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -609,7 +609,8 @@ let binop env (op : Flambda_primitive.binary_primitive) : Fexpr.binop =
609609
| Float_comp (w, c) -> Infix (Float_comp (w, c))
610610
| String_or_bigstring_load (slv, saw) -> String_or_bigstring_load (slv, saw)
611611
| Bigarray_get_alignment align -> Bigarray_get_alignment align
612-
| Bigarray_load _ | Atomic_exchange _ | Atomic_int_arith _ | Poke _ ->
612+
| Bigarray_load _ | Atomic_exchange _ | Atomic_set _ | Atomic_int_arith _
613+
| Poke _ ->
613614
Misc.fatal_errorf "TODO: Binary primitive: %a"
614615
Flambda_primitive.Without_args.print
615616
(Flambda_primitive.Without_args.Binary op)

middle_end/flambda2/simplify/simplify_binary_primitive.ml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1011,6 +1011,12 @@ let simplify_bigarray_get_alignment _align ~original_prim dacc ~original_term
10111011
(P.result_kind' original_prim)
10121012
~original_term
10131013

1014+
let simplify_atomic_set ~original_prim dacc ~original_term _dbg ~arg1:_
1015+
~arg1_ty:_ ~arg2:_ ~arg2_ty:_ ~result_var =
1016+
SPR.create_unknown dacc ~result_var
1017+
(P.result_kind' original_prim)
1018+
~original_term
1019+
10141020
let simplify_atomic_exchange ~original_prim dacc ~original_term _dbg ~arg1:_
10151021
~arg1_ty:_ ~arg2:_ ~arg2_ty:_ ~result_var =
10161022
SPR.create_unknown dacc ~result_var
@@ -1077,6 +1083,7 @@ let simplify_binary_primitive0 dacc original_prim (prim : P.binary_primitive)
10771083
~original_prim
10781084
| Bigarray_get_alignment align ->
10791085
simplify_bigarray_get_alignment align ~original_prim
1086+
| Atomic_set _ -> simplify_atomic_set ~original_prim
10801087
| Atomic_exchange _ -> simplify_atomic_exchange ~original_prim
10811088
| Atomic_int_arith op -> simplify_atomic_int_arith ~original_prim ~op
10821089
| Poke _ -> simplify_poke
@@ -1089,7 +1096,7 @@ let recover_comparison_primitive dacc (prim : P.binary_primitive) ~arg1 ~arg2 =
10891096
| Int_comp (_, Yielding_int_like_compare_functions _)
10901097
| Float_arith _ | Float_comp _ | Phys_equal _ | String_or_bigstring_load _
10911098
| Bigarray_load _ | Bigarray_get_alignment _ | Atomic_exchange _
1092-
| Atomic_int_arith _ | Poke _ ->
1099+
| Atomic_set _ | Atomic_int_arith _ | Poke _ ->
10931100
None
10941101
| Int_comp (kind, Yielding_bool op) -> (
10951102
match kind with

middle_end/flambda2/terms/code_size.ml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,10 @@ let binary_prim_size prim =
404404
| Float_comp (_width, Yielding_int_like_compare_functions ()) -> 8
405405
| Bigarray_get_alignment _ -> 3 (* load data + add index + and *)
406406
| Atomic_int_arith _ -> 1
407-
| Atomic_exchange _ -> does_not_need_caml_c_call_extcall_size
407+
| Atomic_set Immediate -> 1
408+
| Atomic_exchange Immediate -> 1
409+
| Atomic_exchange Any_value | Atomic_set Any_value ->
410+
does_not_need_caml_c_call_extcall_size
408411
| Poke _ -> 1
409412

410413
let ternary_prim_size prim =
@@ -415,8 +418,9 @@ let ternary_prim_size prim =
415418
5 (* ~ 3 block_load + 2 block_set *)
416419
| Bigarray_set (_dims, _kind, _layout) -> 2
417420
(* ~ 1 block_load + 1 block_set *)
418-
| Atomic_compare_and_set Immediate -> 1
419-
| Atomic_compare_and_set Any_value | Atomic_compare_exchange _ ->
421+
| Atomic_compare_and_set Immediate -> 3
422+
| Atomic_compare_exchange Immediate -> 1
423+
| Atomic_compare_and_set Any_value | Atomic_compare_exchange Any_value ->
420424
does_not_need_caml_c_call_extcall_size
421425

422426
let variadic_prim_size prim args =

middle_end/flambda2/terms/flambda_primitive.ml

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1647,6 +1647,7 @@ type binary_primitive =
16471647
| Float_arith of float_bitwidth * binary_float_arith_op
16481648
| Float_comp of float_bitwidth * unit comparison_behaviour
16491649
| Bigarray_get_alignment of int
1650+
| Atomic_set of Block_access_field_kind.t
16501651
| Atomic_exchange of Block_access_field_kind.t
16511652
| Atomic_int_arith of binary_int_atomic_op
16521653
| Poke of Flambda_kind.Standard_int_or_float.t
@@ -1667,7 +1668,7 @@ let binary_primitive_eligible_for_cse p =
16671668
floating-point arithmetic operations. See also the comment in
16681669
effects_and_coeffects of unary primitives. *)
16691670
Flambda_features.float_const_prop ()
1670-
| Atomic_exchange _ | Atomic_int_arith _ | Poke _ -> false
1671+
| Atomic_set _ | Atomic_exchange _ | Atomic_int_arith _ | Poke _ -> false
16711672

16721673
let compare_binary_primitive p1 p2 =
16731674
let binary_primitive_numbering p =
@@ -1683,9 +1684,10 @@ let compare_binary_primitive p1 p2 =
16831684
| Float_arith _ -> 8
16841685
| Float_comp _ -> 9
16851686
| Bigarray_get_alignment _ -> 10
1686-
| Atomic_exchange _ -> 11
1687-
| Atomic_int_arith _ -> 12
1688-
| Poke _ -> 13
1687+
| Atomic_set _ -> 11
1688+
| Atomic_exchange _ -> 12
1689+
| Atomic_int_arith _ -> 13
1690+
| Poke _ -> 14
16891691
in
16901692
match p1, p2 with
16911693
| ( Block_set { kind = kind1; init = init1; field = field1 },
@@ -1738,11 +1740,14 @@ let compare_binary_primitive p1 p2 =
17381740
Atomic_exchange block_access_field_kind2 ) ->
17391741
Block_access_field_kind.compare block_access_field_kind1
17401742
block_access_field_kind2
1743+
| Atomic_set block_access_field_kind1, Atomic_set block_access_field_kind2 ->
1744+
Block_access_field_kind.compare block_access_field_kind1
1745+
block_access_field_kind2
17411746
| Atomic_int_arith op1, Atomic_int_arith op2 -> Stdlib.compare op1 op2
17421747
| ( ( Block_set _ | Array_load _ | String_or_bigstring_load _
17431748
| Bigarray_load _ | Phys_equal _ | Int_arith _ | Int_shift _ | Int_comp _
17441749
| Float_arith _ | Float_comp _ | Bigarray_get_alignment _
1745-
| Atomic_exchange _ | Atomic_int_arith _ | Poke _ ),
1750+
| Atomic_exchange _ | Atomic_set _ | Atomic_int_arith _ | Poke _ ),
17461751
_ ) ->
17471752
Stdlib.compare
17481753
(binary_primitive_numbering p1)
@@ -1781,6 +1786,9 @@ let print_binary_primitive ppf p =
17811786
| Atomic_exchange block_access_field_kind ->
17821787
Format.fprintf ppf "@[(Atomic_exchange@ %a)@]" Block_access_field_kind.print
17831788
block_access_field_kind
1789+
| Atomic_set block_access_field_kind ->
1790+
Format.fprintf ppf "@[(Atomic_set@ %a)@]" Block_access_field_kind.print
1791+
block_access_field_kind
17841792
| Atomic_int_arith op ->
17851793
Format.fprintf ppf "@[(Atomic_int_arith %a)@]" print_binary_int_atomic_op op
17861794
| Poke kind ->
@@ -1810,7 +1818,7 @@ let args_kind_of_binary_primitive p =
18101818
| Float_arith (Float32, _) | Float_comp (Float32, _) ->
18111819
K.naked_float32, K.naked_float32
18121820
| Bigarray_get_alignment _ -> bigstring_kind, K.naked_immediate
1813-
| Atomic_exchange _ | Atomic_int_arith _ -> K.value, K.value
1821+
| Atomic_set _ | Atomic_exchange _ | Atomic_int_arith _ -> K.value, K.value
18141822
| Poke kind -> K.naked_nativeint, K.Standard_int_or_float.to_kind kind
18151823

18161824
let result_kind_of_binary_primitive p : result_kind =
@@ -1834,6 +1842,7 @@ let result_kind_of_binary_primitive p : result_kind =
18341842
| Phys_equal _ | Int_comp _ | Float_comp _ -> Singleton K.naked_immediate
18351843
| Bigarray_get_alignment _ -> Singleton K.naked_immediate
18361844
| Atomic_exchange _ | Atomic_int_arith Fetch_add -> Singleton K.value
1845+
| Atomic_set _ -> Unit
18371846
| Atomic_int_arith (Add | Sub | And | Or | Xor) -> Unit
18381847
| Poke _ -> Unit
18391848

@@ -1863,7 +1872,7 @@ let effects_and_coeffects_of_binary_primitive p : Effects_and_coeffects.t =
18631872
then No_effects, No_coeffects, Strict
18641873
else No_effects, Has_coeffects, Strict
18651874
| Bigarray_get_alignment _ -> No_effects, No_coeffects, Strict
1866-
| Atomic_exchange _ | Atomic_int_arith _ ->
1875+
| Atomic_set _ | Atomic_exchange _ | Atomic_int_arith _ ->
18671876
Arbitrary_effects, Has_coeffects, Strict
18681877
| Poke _ -> Arbitrary_effects, No_coeffects, Strict
18691878

@@ -1872,15 +1881,15 @@ let binary_classify_for_printing p =
18721881
| Array_load _ -> Destructive
18731882
| Block_set _ | Phys_equal _ | Int_arith _ | Int_shift _ | Int_comp _
18741883
| Float_arith _ | Float_comp _ | Bigarray_load _ | String_or_bigstring_load _
1875-
| Bigarray_get_alignment _ | Atomic_exchange _ | Atomic_int_arith _ | Poke _
1876-
->
1884+
| Bigarray_get_alignment _ | Atomic_set _ | Atomic_exchange _
1885+
| Atomic_int_arith _ | Poke _ ->
18771886
Neither
18781887

18791888
let free_names_binary_primitive p =
18801889
match p with
18811890
| Block_set _ | Array_load _ | String_or_bigstring_load _ | Bigarray_load _
18821891
| Phys_equal _ | Int_arith _ | Int_shift _ | Int_comp _ | Float_arith _
1883-
| Float_comp _ | Bigarray_get_alignment _ | Atomic_exchange _
1892+
| Float_comp _ | Bigarray_get_alignment _ | Atomic_exchange _ | Atomic_set _
18841893
| Atomic_int_arith _
18851894
| Poke (_ : Flambda_kind.Standard_int_or_float.t) ->
18861895
Name_occurrences.empty
@@ -1889,7 +1898,7 @@ let apply_renaming_binary_primitive p _renaming =
18891898
match p with
18901899
| Block_set _ | Array_load _ | String_or_bigstring_load _ | Bigarray_load _
18911900
| Phys_equal _ | Int_arith _ | Int_shift _ | Int_comp _ | Float_arith _
1892-
| Float_comp _ | Bigarray_get_alignment _ | Atomic_exchange _
1901+
| Float_comp _ | Bigarray_get_alignment _ | Atomic_exchange _ | Atomic_set _
18931902
| Atomic_int_arith _
18941903
| Poke (_ : Flambda_kind.Standard_int_or_float.t) ->
18951904
p
@@ -1898,7 +1907,7 @@ let ids_for_export_binary_primitive p =
18981907
match p with
18991908
| Block_set _ | Array_load _ | String_or_bigstring_load _ | Bigarray_load _
19001909
| Phys_equal _ | Int_arith _ | Int_shift _ | Int_comp _ | Float_arith _
1901-
| Float_comp _ | Bigarray_get_alignment _ | Atomic_exchange _
1910+
| Float_comp _ | Bigarray_get_alignment _ | Atomic_exchange _ | Atomic_set _
19021911
| Atomic_int_arith _
19031912
| Poke (_ : Flambda_kind.Standard_int_or_float.t) ->
19041913
Ids_for_export.empty

middle_end/flambda2/terms/flambda_primitive.mli

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,6 +511,7 @@ type binary_primitive =
511511
| Float_arith of float_bitwidth * binary_float_arith_op
512512
| Float_comp of float_bitwidth * unit comparison_behaviour
513513
| Bigarray_get_alignment of int
514+
| Atomic_set of Block_access_field_kind.t
514515
| Atomic_exchange of Block_access_field_kind.t
515516
| Atomic_int_arith of binary_int_atomic_op
516517
| Poke of Flambda_kind.Standard_int_or_float.t

0 commit comments

Comments
 (0)