<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/144992>144992</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Where and When does the outer customized pass plugin execute exactly?
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
TJU-PanYizhe
</td>
</tr>
</table>
<pre>
I used `PassInfoMixin` to implement my own pass plugin and load it with `clang-19 -fpass-plugin="build/libRCXLP.so" tests/test.c -S -emit-llvm -o tests/out/test_clang.ll` command.
I wonder Where and When does this pass plugin execute exactly?
- before all other passes implemented in llvm
- or after all other passes
- or ... ?
This is my pass plugin code
```C++
#include "RCXLP.h"
using namespace std;
using namespace llvm;
namespace
{
class MY_TEST_Pass : public PassInfoMixin<MY_TEST_Pass>
{
public:
vector<RCXLP::RIRInstruction> rir_instructions;
PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM)
{
cout << "My first pass plugin" << endl;
return PreservedAnalyses::all();
}
};
}
llvm::PassPluginLibraryInfo getMyPluginInfo()
{
return {
LLVM_PLUGIN_API_VERSION, "MY_TEST_Pass", "v0.1",
[](llvm::PassBuilder &PB)
{
PB.registerPipelineStartEPCallback(
[](ModulePassManager &MPM, OptimizationLevel Level)
{
FunctionPassManager FPM;
MPM.addPass(MY_TEST_Pass());
});
PB.registerPipelineParsingCallback(
[](
llvm::StringRef Name, llvm::ModulePassManager &MPM,
llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)
{
if (Name == "my-test")
{
MPM.addPass(MY_TEST_Pass());
return true;
}
return false;
});
}};
}
extern "C" LLVM_ATTRIBUTE_WEAK ::llvm::PassPluginLibraryInfo
llvmGetPassPluginInfo()
{
return getMyPluginInfo();
}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJycVkuT2jgQ_jXi0oXLIzM8DhwMAyl2h8TFkGRzomSrAe3KEiXJM0N-_Vbb5rVhk611uTDqlz593S1JeK92BnHMHifs8akjqrC3brz-7XM3E-ab-r7HTm7lcbyAyqME1o8z4f3CbO1SvSvD-jEEC6o8aCzRBCiPYN8MHIT3cNDVThkQRoK2QoIK8KbCnoIUWphd92EE3S2ZdhtTljwxzvNKacn4XKt8Nf3jOYu8ZZxDQB8843P6RgV0X6CLpQpdrV9L6Nqz3lahtdrUs0RaE8rClqUwMmJxyuJ0AW_WSHTwdY8Oa4hf92hAWvQQ9srfrADfsagCAr6LIugjS-ZNlC7kuLXkrzXYsEdXu6G_EIISlAHCWNtbB2Ib0P3gcdJGUQTn-GsCojyReg2nsBIbA9aPm3fK-ITeOGU8UabQlURgnDcE7hnnjUPlldmBESX6gygQfJAsmdxR1IhrDYvTs5iGAxICFJoQLb9t1rOX9YaKAliSwqHKtSrgtkiS6bUdS2Z1hFOkxoUlNBO8YhGsY8m0Rk7CJF0tVgvjg6uKoKxhyQyccht1EfkzUgCAzKFH94oyNUIfKRuuMowPl1ZWmljpLxmfQjNsbJRfCiN26GptumR81AY7gaSnsFUAlkxZMiVul0fYKufDdW6oUFsLNFI3uBpvh6Fy5kd0zRqF1owPad6zCxs80T_6NMurxyxOm9yQF9GZ1RM_q9wJdyTOYYdheWzENG7jXlLXImmHz89flpvs-fOHxcdNmi02X2arl8Wnj0QRLfI6cZy30tc4emhGNcJ672B8eAtsQn3cUJpNLoyeOc0mkcOd8gFdpg6olcGXIFyYZVOhdS6Kvwj5yal1PU3VZI-muc5cVmf20yGoUn0XVBrP-Ioa6t9rCDdAbp55Zeqaug49z5bXmTw9y2wZCSkbaoa3TNWUX2fzMufTRX6Hgkw4asX_QAHJL4y_BKfMboVb-ChKJBouup-QdRskdU4cV7hlyfRuLltBC3XWbHHUz_9GrdoC40NCBLS5J09UPeWxS9tzXUD_9Dt7_i9yr_osuArvGbRd1VpthfZ3zG6SdJb80Ij4HpAaifMpNX7dSel6vVpMPq9nm6-z9HdoGPtFx7Y9_QHDRf2zzr3f4NfYTudCR44TOUpGooPjh8Fj3Isfk96wsx8L8cCTfjEa4IhvB4NcDAoc9IYPuZQS5SDpqDGP-WPc53E86HE-jOTjViaD4bCfi6QX45D1YiyF0hFBj6zbdZT3FY4fer3RiHe0yFH7-l7BucE3qLWU88enjhuTUzevdp71Yq188JcwQQWN4_sHM4Kt6PgsKh9sqb6j_MVB3amcHu9DONT7LJ8zPt-psK_yqLAlXTIoM82ne3D2Tyzo9lBjpctEu5jXMf87AAD__5fIvVQ">