/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 |