-
Notifications
You must be signed in to change notification settings - Fork 497
/
dead_code.h
46 lines (34 loc) · 1.14 KB
/
dead_code.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// Copyright (C) 2022-2024 Exaloop Inc. <https://exaloop.io>
#pragma once
#include "codon/cir/transform/pass.h"
namespace codon {
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 codon