mirror of
https://github.com/exaloop/codon.git
synced 2025-06-03 15:03:52 +08:00
34 lines
640 B
C
34 lines
640 B
C
|
#pragma once
|
||
|
|
||
|
#include <memory>
|
||
|
#include <unordered_map>
|
||
|
|
||
|
#include "rule.h"
|
||
|
|
||
|
#include "sir/transform/pass.h"
|
||
|
|
||
|
namespace seq {
|
||
|
namespace ir {
|
||
|
namespace transform {
|
||
|
namespace folding {
|
||
|
|
||
|
class FoldingPass : public OperatorPass, public Rewriter {
|
||
|
public:
|
||
|
/// Constructs a folding pass.
|
||
|
FoldingPass() : OperatorPass(/*childrenFirst=*/true) {}
|
||
|
|
||
|
static const std::string KEY;
|
||
|
std::string getKey() const override { return KEY; }
|
||
|
|
||
|
void run(Module *m) override;
|
||
|
void handle(CallInstr *v) override;
|
||
|
|
||
|
private:
|
||
|
void registerStandardRules(Module *m);
|
||
|
};
|
||
|
|
||
|
} // namespace folding
|
||
|
} // namespace transform
|
||
|
} // namespace ir
|
||
|
} // namespace seq
|