Skip to content

Commit 080316f

Browse files
committed
Implement @silent
Removes item from output of write_array and related methods. Needs careful consideration on how this interacts with unconstrain_array function
1 parent 8bff6ad commit 080316f

File tree

7 files changed

+544
-7
lines changed

7 files changed

+544
-7
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
open Core
2+
3+
let recognized_annotation a =
4+
List.mem ["extern"; "silent"] a ~equal:String.equal
5+
6+
let outvar_is_silent Middle.Program.{out_annotations; _} =
7+
List.mem out_annotations "silent" ~equal:String.equal
8+
9+
(** Noisy meaning "not silent" *)
10+
let get_noisy_outvars outvars =
11+
List.filter ~f:(fun (_, _, outvar) -> not @@ outvar_is_silent outvar) outvars

src/stan_math_backend/Lower_program.ml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,7 @@ let gen_get_param_names {Program.output_vars; _} =
355355
~f:(fun id -> Exprs.literal_string (Mangle.remove_prefix id))
356356
(UnsizedType.enumerate_tuple_names_io name (SizedType.to_unsized st))
357357
in
358+
let output_vars = Annotations.get_noisy_outvars output_vars in
358359
let params, tparams, gqs =
359360
List.partition3_map output_vars ~f:(function
360361
| id, _, {Program.out_block= Parameters; out_constrained_st= st; _} ->
@@ -398,6 +399,7 @@ let gen_get_dims {Program.output_vars; _} =
398399
We should probably deprecate get_dims and replace it with a
399400
new function later on which returns a more structured type
400401
*)
402+
let output_vars = Annotations.get_noisy_outvars output_vars in
401403
let cast x = Exprs.static_cast Types.size_t (lower_expr x) in
402404
let pack inner_dims =
403405
List.map
@@ -528,6 +530,7 @@ let gen_param_names_fn name (paramvars, tparamvars, gqvars) =
528530
~cv_qualifiers:[Const; Final] ())
529531

530532
let gen_constrained_param_names {Program.output_vars; _} =
533+
let output_vars = Annotations.get_noisy_outvars output_vars in
531534
gen_param_names_fn "constrained_param_names"
532535
(List.partition3_map
533536
~f:(function
@@ -598,7 +601,8 @@ let gen_overloads {Program.output_vars; _} =
598601
Expr.Helpers.binop_list
599602
(List.map
600603
~f:(fun outvar ->
601-
SizedType.io_size outvar.Program.out_constrained_st)
604+
if Annotations.outvar_is_silent outvar then Expr.Helpers.zero
605+
else SizedType.io_size outvar.Program.out_constrained_st)
602606
outvars)
603607
Operator.Plus ~default:Expr.Helpers.zero
604608
|> lower_expr in

src/stan_math_backend/Transform_Mir.ml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1012,8 +1012,6 @@ let map_prog_stmt_lists f (p : ('a, 'b, 'c) Program.t) =
10121012
; transform_inits= f p.transform_inits
10131013
; unconstrain_array= f p.unconstrain_array }
10141014

1015-
let recognized_annotation a = a = "extern"
1016-
10171015
let trans_prog (p : Program.Typed.t) =
10181016
(* name mangling of c++ keywords*)
10191017
let rec map_stmt {Stmt.Fixed.pattern; meta} =
@@ -1061,8 +1059,9 @@ let trans_prog (p : Program.Typed.t) =
10611059
then init_pos @ stmts
10621060
else stmts in
10631061
let param_writes, tparam_writes, gq_writes =
1064-
List.map p.output_vars ~f:param_unconstrained_serializer_write
1065-
|> List.map2_exn p.output_vars ~f:(fun (_, meta, outvar) writes ->
1062+
let loud_output_vars = Annotations.get_noisy_outvars p.output_vars in
1063+
List.map loud_output_vars ~f:param_unconstrained_serializer_write
1064+
|> List.map2_exn loud_output_vars ~f:(fun (_, meta, outvar) writes ->
10661065
(outvar.Program.out_block, Stmt.Fixed.{pattern= SList writes; meta}))
10671066
|> List.partition3_map ~f:(fun (b, x) ->
10681067
match b with

src/stan_math_backend/Transform_Mir.mli

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,3 @@ open Middle
77
val trans_prog : Program.Typed.t -> Program.Typed.t
88
val is_opencl_var : string -> bool
99
val use_opencl : bool ref
10-
val recognized_annotation : string -> bool

src/stanc/stanc.ml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,8 @@ let use_file filename =
286286
~print_warnings:(not !canonicalize_settings.deprecations)
287287
~bare_functions:!bare_functions in
288288
let unused_annotations =
289-
Annotations.find_unrecognized Transform_Mir.recognized_annotation ast in
289+
Frontend.Annotations.find_unrecognized
290+
Stan_math_backend.Annotations.recognized_annotation ast in
290291
Warnings.pp_warnings ?printed_filename Fmt.stderr unused_annotations;
291292
Debugging.ast_logger ast;
292293
let typed_ast = type_ast_or_exit ?printed_filename ast in

0 commit comments

Comments
 (0)