rapx/analysis/opt/data_collection/
suboptimal.rs

1pub mod participant;
2pub mod slice_contains;
3pub mod vec_remove;
4
5use participant::ParticipantCheck;
6use slice_contains::SliceContainsCheck;
7use vec_remove::VecRemoveCheck;
8
9use crate::analysis::core::dataflow::graph::Graph;
10use crate::analysis::opt::OptCheck;
11
12use rustc_middle::ty::TyCtxt;
13
14use super::super::LEVEL;
15
16pub struct SuboptimalCheck {
17    participant: ParticipantCheck,
18    slice_contains: SliceContainsCheck,
19    vec_remove: VecRemoveCheck,
20}
21
22impl OptCheck for SuboptimalCheck {
23    fn new() -> Self {
24        Self {
25            participant: ParticipantCheck::new(),
26            slice_contains: SliceContainsCheck::new(),
27            vec_remove: VecRemoveCheck::new(),
28        }
29    }
30
31    fn check(&mut self, graph: &Graph, tcx: &TyCtxt) {
32        self.vec_remove.check(graph, tcx);
33        let level = LEVEL.lock().unwrap();
34        if *level == 2 {
35            self.participant.check(graph, tcx);
36            self.slice_contains.check(graph, tcx);
37        }
38    }
39
40    fn report(&self, graph: &Graph) {
41        self.participant.report(graph);
42        self.slice_contains.report(graph);
43        self.vec_remove.report(graph);
44    }
45
46    fn cnt(&self) -> usize {
47        self.participant.cnt() + self.slice_contains.cnt() + self.vec_remove.cnt()
48    }
49}