Coverage Report

Created: 2023-10-30 17:15

/builds/2mk6rsew/0/parcoach/parcoach/src/aSSA/MPICommAnalysis.cpp
Line
Count
Source (jump to first uncovered line)
1
#include "parcoach/MPICommAnalysis.h"
2
3
#include "parcoach/Collectives.h"
4
5
#include "llvm/ADT/STLExtras.h"
6
7
using namespace llvm;
8
9
namespace parcoach {
10
AnalysisKey MPICommAnalysis::Key;
11
12
MPICommAnalysis::Result MPICommAnalysis::run(Module &M,
13
1.76k
                                             ModuleAnalysisManager &AM) {
14
1.76k
  TimeTraceScope TTS("MPICommAnalysis");
15
1.76k
  MPICommAnalysis::Result Res;
16
19.8k
  for (Function &F : M) {
17
19.8k
    MPICollective const *Coll =
18
19.8k
        dyn_cast_or_null<MPICollective>(Collective::find(F));
19
    // Ignore non-MPI collective, or those (MPIFinalize) not taking a
20
    // communicator parameter.
21
19.8k
    if (!Coll || Coll->CommArgId < 0) {
22
17.1k
      continue;
23
17.1k
    }
24
5.12k
    for (User *U : F.users()) {
25
5.12k
      CallInst *CI = dyn_cast<CallInst>(U);
26
5.12k
      if (!CI) {
27
0
        continue;
28
0
      }
29
5.12k
      Res.insert(Coll->getCommunicator(*CI));
30
5.12k
    }
31
2.71k
  }
32
1.76k
  return Res;
33
1.76k
}
34
} // namespace parcoach