How LLVM passes transform Three-Address Code SSA form:
#include "llvm/IR/PassManager.h"
#include "llvm/Passes/PassPlugin.h"
struct DeadBranchEliminator : llvm::PassInfoMixin<DeadBranchEliminator> {
llvm::PreservedAnalyses run(llvm::Function& F, llvm::FunctionAnalysisManager& FAM) {
for (auto& BB : F) {
for (auto& Inst : BB) {
if (auto* branch = llvm::dyn_cast<llvm::BranchInst>(&Inst)) {
if (branch->isConditional()) {
if (auto* c = llvm::dyn_cast<llvm::ConstantInt>(branch->getCondition())) {
// Constant condition found: simplify conditional branch to direct jump!
}
}
}
}
}
return llvm::PreservedAnalyses::all();
}
};