mirror of https://github.com/exaloop/codon.git
34 lines
849 B
C++
34 lines
849 B
C++
#pragma once
|
|
|
|
#include "sir/transform/pass.h"
|
|
|
|
namespace codon {
|
|
namespace ir {
|
|
namespace transform {
|
|
namespace folding {
|
|
|
|
/// Constant propagation pass.
|
|
class ConstPropPass : public OperatorPass {
|
|
private:
|
|
/// Key of the reaching definition analysis
|
|
std::string reachingDefKey;
|
|
/// Key of the global variables analysis
|
|
std::string globalVarsKey;
|
|
|
|
public:
|
|
static const std::string KEY;
|
|
|
|
/// Constructs a constant propagation pass.
|
|
/// @param reachingDefKey the reaching definition analysis' key
|
|
ConstPropPass(const std::string &reachingDefKey, const std::string &globalVarsKey)
|
|
: reachingDefKey(reachingDefKey), globalVarsKey(globalVarsKey) {}
|
|
|
|
std::string getKey() const override { return KEY; }
|
|
void handle(VarValue *v) override;
|
|
};
|
|
|
|
} // namespace folding
|
|
} // namespace transform
|
|
} // namespace ir
|
|
} // namespace codon
|