1 #include "../IRContextPass.h"
2 #include "tir/Constant.h"
3 #include "utils/PassManager.h"
5 using std::string_view;
7 using utils::PassManager;
9 class GlobalDCE
final :
public Pass {
11 GlobalDCE(PassManager& PM)
noexcept : Pass(PM) {}
16 changed = removeAllGlobals(CU);
24 std::vector<std::string> toRemove;
25 for(
auto p : CU.global_objects_kv()) {
27 if(go->isExternalLinkage())
continue;
28 if(!go->users().empty())
continue;
30 if(
auto fn = dyn_cast<tir::Function>(go)) {
31 for(
auto bb : fn->body()) {
32 auto* inst = *bb->begin();
34 auto next = inst->next();
35 inst->eraseFromParent();
40 toRemove.push_back(std::string{name});
42 for(
auto name : toRemove) {
43 CU.removeGlobalObject(name);
45 return toRemove.size() > 0;
49 void computeDependencies()
override {
50 ComputeDependency(GetPass<IRContextPass>());