1
0
mirror of https://github.com/exaloop/codon.git synced 2025-06-03 15:03:52 +08:00
2021-09-27 14:02:44 -04:00

45 lines
1.1 KiB
C++

#pragma once
#include "sir/transform/pass.h"
namespace seq {
namespace ir {
namespace transform {
namespace cleanup {
/// Cleanup pass that removes dead code.
class DeadCodeCleanupPass : public OperatorPass {
private:
std::string sideEffectsKey;
int numReplacements;
public:
static const std::string KEY;
/// Constructs a dead code elimination pass
/// @param sideEffectsKey the side effect analysis' key
DeadCodeCleanupPass(std::string sideEffectsKey)
: OperatorPass(), sideEffectsKey(std::move(sideEffectsKey)), numReplacements(0) {}
std::string getKey() const override { return KEY; }
void run(Module *m) override;
void handle(SeriesFlow *v) override;
void handle(IfFlow *v) override;
void handle(WhileFlow *v) override;
void handle(ImperativeForFlow *v) override;
void handle(TernaryInstr *v) override;
/// @return the number of replacements
int getNumReplacements() const { return numReplacements; }
private:
void doReplacement(Value *og, Value *v);
};
} // namespace cleanup
} // namespace transform
} // namespace ir
} // namespace seq