<div dir="ltr"><div class="markdown-here-wrapper" style=""><p style="margin:0px 0px 1.2em!important">I’d like to have an initialization and finalization step for a bunch of custom out-of-tree Function/ModulePasses. I was thinking of having a single ModulePass (call it Scheduler) that would take care of that:</p>
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline;white-space:pre;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important">// Pseudocode
struct Scheduler: ModulePass {
  runOnModule(Module module) {
    if (!is_relevant(module)) {
      // Skip non-relevant modules
      return true;
    }

    function_pass_1 = create_function_pass_1()
    function_pass_1.doInitialization(module);
    for (auto func: module.getFunctionList()) {
      function_pass_1.runOnFunction(func);
    }

    function_pass_2 = create_function_pass_2()
    function_pass_2.doInitialization(module);
    for (auto func: module.getFunctionList()) {
      function_pass_2.runOnFunction(func);
    }

    function_pass_3 = create_function_pass_3()
    function_pass_3.doInitialization(module);
    for (auto func: module.getFunctionList()) {
      function_pass_3.runOnFunction(func);
    }

    Error err = run_diagnostics(module);
    if (err) {
      // Something bad happened
      return false;
    }
  }
}
</code></pre><p style="margin:0px 0px 1.2em!important">As you can see, some initialization and finalization relevant to specific passes is relevant here.<br>My question is: did LLVM solve this problem already (maybe using PassDependencies? Do they work for out-of-tree passes?)? Are there any clear drawbacks to using this approach?</p>
<p style="margin:0px 0px 1.2em!important">Many thanks!</p>
<div title="MDH:SSdkIGxpa2UgdG8gaGF2ZSBhbiBpbml0aWFsaXphdGlvbiBhbmQgZmluYWxpemF0aW9uIHN0ZXAg
Zm9yIGEgYnVuY2ggb2YgY3VzdG9tIG91dC1vZi10cmVlIEZ1bmN0aW9uL01vZHVsZVBhc3Nlcy4g
SSB3YXMgdGhpbmtpbmcgb2YgaGF2aW5nIGEgc2luZ2xlIE1vZHVsZVBhc3MgKGNhbGwgaXQgU2No
ZWR1bGVyKSB0aGF0IHdvdWxkIHRha2UgY2FyZSBvZiB0aGF0Ojxicj48YnI+YGBgPGJyPi8vIFBz
ZXVkb2NvZGU8YnI+c3RydWN0IFNjaGVkdWxlcjogTW9kdWxlUGFzcyB7PGJyPsKgIHJ1bk9uTW9k
dWxlKE1vZHVsZSBtb2R1bGUpIHs8YnI+wqAgwqAgaWYgKCFpc19yZWxldmFudChtb2R1bGUpKSB7
PGJyPsKgIMKgIMKgIC8vIFNraXAgbm9uLXJlbGV2YW50IG1vZHVsZXM8YnI+wqAgwqAgwqAgcmV0
dXJuIHRydWU7PGJyPsKgIMKgIH08YnI+PGJyPsKgIMKgIGZ1bmN0aW9uX3Bhc3NfMSA9IGNyZWF0
ZV9mdW5jdGlvbl9wYXNzXzEoKTxicj7CoCDCoCBmdW5jdGlvbl9wYXNzXzEuZG9Jbml0aWFsaXph
dGlvbihtb2R1bGUpOzxicj7CoCDCoCBmb3IgKGF1dG8gZnVuYzogbW9kdWxlLmdldEZ1bmN0aW9u
TGlzdCgpKSB7PGJyPsKgIMKgIMKgIGZ1bmN0aW9uX3Bhc3NfMS5ydW5PbkZ1bmN0aW9uKGZ1bmMp
Ozxicj7CoCDCoCB9PGJyPjxicj7CoCDCoCBmdW5jdGlvbl9wYXNzXzIgPSBjcmVhdGVfZnVuY3Rp
b25fcGFzc18yKCk8YnI+wqAgwqAgZnVuY3Rpb25fcGFzc18yLmRvSW5pdGlhbGl6YXRpb24obW9k
dWxlKTs8YnI+wqAgwqAgZm9yIChhdXRvIGZ1bmM6IG1vZHVsZS5nZXRGdW5jdGlvbkxpc3QoKSkg
ezxicj7CoCDCoCDCoCBmdW5jdGlvbl9wYXNzXzIucnVuT25GdW5jdGlvbihmdW5jKTs8YnI+wqAg
wqAgfTxicj48YnI+wqAgwqAgZnVuY3Rpb25fcGFzc18zID0gY3JlYXRlX2Z1bmN0aW9uX3Bhc3Nf
MygpPGJyPsKgIMKgIGZ1bmN0aW9uX3Bhc3NfMy5kb0luaXRpYWxpemF0aW9uKG1vZHVsZSk7PGJy
PsKgIMKgIGZvciAoYXV0byBmdW5jOiBtb2R1bGUuZ2V0RnVuY3Rpb25MaXN0KCkpIHs8YnI+wqAg
wqAgwqAgZnVuY3Rpb25fcGFzc18zLnJ1bk9uRnVuY3Rpb24oZnVuYyk7PGJyPsKgIMKgIH08YnI+
PGJyPsKgIMKgIEVycm9yIGVyciA9IHJ1bl9kaWFnbm9zdGljcyhtb2R1bGUpOzxicj7CoCDCoCBp
ZiAoZXJyKSB7PGJyPsKgIMKgIMKgIC8vIFNvbWV0aGluZyBiYWQgaGFwcGVuZWQ8YnI+wqAgwqAg
wqAgcmV0dXJuIGZhbHNlOzxicj7CoCDCoCB9PGJyPsKgIH08YnI+fTxicj5gYGA8YnI+PGJyPkFz
IHlvdSBjYW4gc2VlLCBzb21lIGluaXRpYWxpemF0aW9uIGFuZCBmaW5hbGl6YXRpb24gcmVsZXZh
bnQgdG8gc3BlY2lmaWMgcGFzc2VzIGlzIHJlbGV2YW50IGhlcmUuPGJyPk15IHF1ZXN0aW9uIGlz
OiBkaWQgTExWTSBzb2x2ZSB0aGlzIHByb2JsZW0gYWxyZWFkeSAobWF5YmUgdXNpbmcgUGFzc0Rl
cGVuZGVuY2llcz8gRG8gdGhleSB3b3JrIGZvcjxicj5vdXQtb2YtdHJlZSBwYXNzZXM/KT8gQXJl
IHRoZXJlIGFueSBjbGVhciBkcmF3YmFja3MgdG8gdXNpbmcgdGhpcyBhcHByb2FjaD88YnI+PGJy
Pk1hbnkgdGhhbmtzITxicj4=" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0"></div></div></div>