Developer knowledge network · moderated exchange

Społeczność UnreliableCode

Badania programistów, inżynieria wsteczna i społeczność programistów

Knowledge indexNa żywo
4Categories
919Threads
2.8KPosty
Analysis

Writing a Custom LLVM Intermediate Representation (IR) Pass for Constant Folding & Dead Code Elimination [StackOverflow Architecture Guide]

llvm_compiler_dev
LLVM & Clang Hacker
MEMBER
Rozpustnik: 139
Data dołączenia: Jul 2018
Posty: 21
Dzięki: 15
4 tygodnie temu · Jul 26, 2026 3:58 PM
#1

How LLVM passes transform Three-Address Code SSA form:

CPP
#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();
    }
};
modern_cpp_artisan
C++ Template Wizard
MEMBER
Rozpustnik: 124
Data dołączenia: Jun 2019
Posty: 29
Dzięki: 72
4 tygodnie temu · Jul 26, 2026 5:48 PM
#2

LLVM's New Pass Manager (llvm::PassInfoMixin) makes writing custom optimization and instrumentation passes so clean.

vtable_slayer
Senior Reverser
MEMBER
Rozpustnik: 215
Data dołączenia: Mar 2018
Posty: 86
Dzięki: 61
3 tygodnie temu · Jul 27, 2026 11:10 AM
#3

Static Single Assignment (SSA) form with phi nodes makes dataflow analysis linear time.