@@ -20,6 +20,7 @@ module Config =
2020 struct
2121 let variant _ = false
2222 let naturalsize = TypBase. get_size TypBase. default
23+ let wildcard = false
2324 end
2425
2526let dbg = 0
@@ -35,6 +36,7 @@ module type S = sig
3536 type atom
3637 module PteVal : PteVal_gen .S with type pte_atom = atom
3738 type rmw
39+ val wildcard : bool
3840
3941 val pp_atom : atom -> string
4042 val tr_value : atom option -> Code .v -> Code .v
@@ -160,6 +162,7 @@ module
160162 sig
161163 val variant : Variant_gen .t -> bool
162164 val naturalsize : MachSize .sz
165+ val wildcard : bool
163166 end )
164167 (F :Fence.S ) : S
165168with
@@ -175,6 +178,7 @@ and type rmw = F.rmw = struct
175178 let do_kvm = Variant_gen. is_kvm Cfg. variant
176179 let do_disjoint = Cfg. variant Variant_gen. MixedDisjoint
177180 let do_strict_overlap = Cfg. variant Variant_gen. MixedStrictOverlap
181+ let wildcard = Cfg. wildcard
178182
179183 let debug = false
180184 open Code
@@ -389,24 +393,25 @@ let fold_tedges f r =
389393 let r = fold_ie (fun ie -> f (Rf ie)) r in
390394 let r = fold_ie (fun ie -> f (Fr ie)) r in
391395 let r = fold_ie (fun ie -> f (Ws ie)) r in
392- let r = F. fold_rmw (fun rmw -> f (Rmw rmw)) r in
393- let r = fold_sd_extr_extr (fun sd e1 e2 r -> f (Po (sd,e1,e2)) r) r in
396+ let r = F. fold_rmw wildcard (fun rmw -> f (Rmw rmw)) r in
397+ let r = fold_sd_extr_extr wildcard (fun sd e1 e2 r -> f (Po (sd,e1,e2)) r) r in
394398 let r = F. fold_all_fences (fun fe -> f (Insert fe)) r in
395399 let r = f Store r in
396400 let r =
397401 F. fold_all_fences
398402 (fun fe ->
399- fold_sd_extr_extr
403+ fold_sd_extr_extr wildcard
400404 (fun sd e1 e2 -> f (Fenced (fe,sd,e1,e2)))) r in
401405 let r =
402406 F. fold_dpr
403- (fun dp -> fold_sd (fun sd -> f (Dp (dp,sd,Dir R )))) r in
407+ (fun dp -> fold_sd wildcard (fun sd -> f (Dp (dp,sd,Dir R )))) r in
404408 let r =
405409 F. fold_dpw
406- (fun dp -> fold_sd (fun sd -> f (Dp (dp,sd,Dir W )))) r in
410+ (fun dp -> fold_sd wildcard (fun sd -> f (Dp (dp,sd,Dir W )))) r in
407411 let r =
408- F. fold_dpw
409- (fun dp -> fold_sd (fun sd -> f (Dp (dp,sd,Irr )))) r in
412+ if wildcard then F. fold_dpw
413+ (fun dp -> fold_sd wildcard (fun sd -> f (Dp (dp,sd,Irr )))) r
414+ else r in
410415 let r = f Id r in
411416 let r = f (Node R ) (f (Node W ) r) in
412417 let r = f Hat r in
@@ -586,7 +591,7 @@ let fold_tedges f r =
586591
587592 let () =
588593 four_times_iter_edges false iter_edges;
589- fold_sd_extr_extr
594+ fold_sd_extr_extr wildcard
590595 (fun sd e1 e2 () ->
591596 add_lxm_edge
592597 (pp_strong sd e1 e2) (plain_edge (Fenced (F. strong,sd,e1,e2)))) () ;
@@ -596,9 +601,10 @@ let fold_tedges f r =
596601 add_lxm_edge
597602 (pp_dp_default tag sd e)
598603 (plain_edge (Dp (dp,sd,e))) in
599- fold_sd
604+ fold_sd wildcard
600605 (fun sd () ->
601- fill_opt " Dp" F. ddr_default sd Irr ;
606+ if wildcard then fill_opt " Dp" F. ddr_default sd Irr ;
607+ if wildcard then fill_opt " Ctrl" F. ctrlr_default sd Irr ;
602608 fill_opt " Dp" F. ddr_default sd (Dir R ) ;
603609 fill_opt " Ctrl" F. ctrlr_default sd (Dir R ) ;
604610 fill_opt " Dp" F. ddw_default sd (Dir W ) ;
0 commit comments