Skip to content

Add unique barriers for Pduprecord, Parraylength, Parrayrefu #3243

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 5 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Formatting changes only
  • Loading branch information
mshinwell committed Nov 14, 2024
commit aeafd1d32ee95e1dceb4239976edf63d55c3820b
35 changes: 23 additions & 12 deletions bytecomp/bytegen.ml
Original file line number Diff line number Diff line change
Expand Up @@ -508,17 +508,20 @@ let comp_primitive stack_info p sz args =
[Parrayset{s,u}]). *)
| Parrayrefs (Pgenarray_ref _, index_kind, _)
| Parrayrefs ((Paddrarray_ref | Pintarray_ref | Pfloatarray_ref _
| Punboxedfloatarray_ref (Pfloat64 | Pfloat32) | Punboxedintarray_ref _),
| Punboxedfloatarray_ref (Pfloat64 | Pfloat32)
| Punboxedintarray_ref _),
(Punboxed_int_index _ as index_kind), _) ->
Kccall(indexing_primitive index_kind "caml_array_get", 2)
| Parrayrefs ((Punboxedfloatarray_ref Pfloat64 | Pfloatarray_ref _), Ptagged_int_index, _) ->
| Parrayrefs ((Punboxedfloatarray_ref Pfloat64 | Pfloatarray_ref _),
Ptagged_int_index, _) ->
Kccall("caml_floatarray_get", 2)
| Parrayrefs ((Punboxedfloatarray_ref Pfloat32 | Punboxedintarray_ref _
| Paddrarray_ref | Pintarray_ref), Ptagged_int_index, _) ->
Kccall("caml_array_get_addr", 2)
| Parraysets (Pgenarray_set _, index_kind)
| Parraysets ((Paddrarray_set _ | Pintarray_set | Pfloatarray_set
| Punboxedfloatarray_set (Pfloat64 | Pfloat32) | Punboxedintarray_set _),
| Punboxedfloatarray_set (Pfloat64 | Pfloat32)
| Punboxedintarray_set _),
(Punboxed_int_index _ as index_kind)) ->
Kccall(indexing_primitive index_kind "caml_array_set", 3)
| Parraysets ((Punboxedfloatarray_set Pfloat64 | Pfloatarray_set),
Expand All @@ -529,24 +532,32 @@ let comp_primitive stack_info p sz args =
Kccall("caml_array_set_addr", 3)
| Parrayrefu (Pgenarray_ref _, index_kind, _, _)
| Parrayrefu ((Paddrarray_ref | Pintarray_ref | Pfloatarray_ref _
| Punboxedfloatarray_ref (Pfloat64 | Pfloat32) | Punboxedintarray_ref _),
| Punboxedfloatarray_ref (Pfloat64 | Pfloat32)
| Punboxedintarray_ref _),
(Punboxed_int_index _ as index_kind), _, _) ->
Kccall(indexing_primitive index_kind "caml_array_unsafe_get", 2)
| Parrayrefu ((Punboxedfloatarray_ref Pfloat64 | Pfloatarray_ref _), Ptagged_int_index, _, _) ->
Kccall("caml_floatarray_unsafe_get", 2)
| Parrayrefu ((Punboxedfloatarray_ref Pfloat64 | Pfloatarray_ref _),
Ptagged_int_index, _, _) ->
Kccall("caml_floatarray_unsafe_get", 2)
| Parrayrefu ((Punboxedfloatarray_ref Pfloat32 | Punboxedintarray_ref _
| Paddrarray_ref | Pintarray_ref), Ptagged_int_index, _, _) -> Kgetvectitem
| Paddrarray_ref | Pintarray_ref), Ptagged_int_index, _, _) ->
Kgetvectitem
| Parraysetu (Pgenarray_set _, index_kind)
| Parraysetu ((Paddrarray_set _ | Pintarray_set | Pfloatarray_set
| Punboxedfloatarray_set (Pfloat64 | Pfloat32) | Punboxedintarray_set _),
| Punboxedfloatarray_set (Pfloat64 | Pfloat32)
| Punboxedintarray_set _),
(Punboxed_int_index _ as index_kind)) ->
Kccall(indexing_primitive index_kind "caml_array_unsafe_set", 3)
| Parraysetu ((Punboxedfloatarray_set Pfloat64 | Pfloatarray_set), Ptagged_int_index) ->
| Parraysetu ((Punboxedfloatarray_set Pfloat64 | Pfloatarray_set),
Ptagged_int_index) ->
Kccall("caml_floatarray_unsafe_set", 3)
| Parraysetu ((Punboxedfloatarray_set Pfloat32 | Punboxedintarray_set _
| Paddrarray_set _ | Pintarray_set), Ptagged_int_index) -> Ksetvectitem
| Parrayrefs (Punboxedvectorarray_ref _, _, _) | Parraysets (Punboxedvectorarray_set _, _)
| Parrayrefu (Punboxedvectorarray_ref _, _, _, _) | Parraysetu (Punboxedvectorarray_set _, _) ->
| Paddrarray_set _ | Pintarray_set), Ptagged_int_index) ->
Ksetvectitem
| Parrayrefs (Punboxedvectorarray_ref _, _, _)
| Parraysets (Punboxedvectorarray_set _, _)
| Parrayrefu (Punboxedvectorarray_ref _, _, _, _)
| Parraysetu (Punboxedvectorarray_set _, _) ->
fatal_error "SIMD is not supported in bytecode mode."
| Pctconst c ->
let const_name = match c with
Expand Down
6 changes: 4 additions & 2 deletions lambda/lambda.mli
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,8 @@ type unique_barrier =
| May_be_pushed_down
| Must_stay_here

val add_barrier_to_read : unique_barrier -> field_read_semantics -> field_read_semantics
val add_barrier_to_read : unique_barrier -> field_read_semantics
-> field_read_semantics

(* Tail calls can close their enclosing region early *)
type region_close =
Expand Down Expand Up @@ -189,7 +190,8 @@ type primitive =
The arguments of [Pduparray] give the kind and mutability of the
array being *produced* by the duplication. *)
| Parraylength of array_kind * unique_barrier
| Parrayrefu of array_ref_kind * array_index_kind * mutable_flag * unique_barrier
| Parrayrefu of array_ref_kind * array_index_kind * mutable_flag
* unique_barrier
| Parraysetu of array_set_kind * array_index_kind
| Parrayrefs of array_ref_kind * array_index_kind * mutable_flag
| Parraysets of array_set_kind * array_index_kind
Expand Down
2 changes: 1 addition & 1 deletion middle_end/flambda2/terms/unique_barrier.ml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ type t =
| Must_stay_here
| May_be_pushed_down

let [@ocamlformat "disable"] print ppf t =
let print ppf t =
match t with
| Must_stay_here -> Format.pp_print_string ppf "Must_stay_here"
| May_be_pushed_down -> Format.pp_print_string ppf "May_be_pushed_down"
Expand Down