codon/compiler/sir/transform/folding/const_prop.h

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